xiandie/manager/config_manager/global_config_manager.gd

130 lines
4.1 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@tool
extends Node
static var config: GlobalConfig:
set = _set_config
var timer = Timer.new()
func _ready() -> void:
timer.wait_time = 5.0
timer.one_shot = false
timer.timeout.connect(_on_timer_timeout)
add_child(timer)
timer.start()
func _set_config(val: GlobalConfig) -> void:
config = val
if Engine.is_editor_hint():
return
# debug)
if config.debug_mode:
GlobalConfig.DEBUG = true
print_rich("[color=orange]Debug mode enabled[/color]")
# set up window
if config.window_fullscreen:
get_window().mode = Window.MODE_EXCLUSIVE_FULLSCREEN
# get_window().mode = Window.MODE_FULLSCREEN
else:
get_window().mode = Window.MODE_WINDOWED
get_window().always_on_top = config.window_top
# set up sound
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), config.db_master)
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("game_sfx"), config.db_game_sfx)
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("dialog"), config.db_dialog)
prints(
"config load volume_db settings (master, sfx, dialog): ",
config.db_master,
config.db_game_sfx,
config.db_dialog
)
# set locale
update_locale(config.language, config.caption)
# -1 null; 0 zh; 1 en
var language_options = ["简体中文", "English"]
var caption_options_dict = {0: ["上海话", "普通话"], 1: [""]}
var caption_loacles_dict = {0: ["zh_SH", "zh_CN"], 1: ["en"]}
# return example: "中文_简体中文" "English_"
func update_locale(lang_id: int, caption_id: int) -> void:
lang_id = wrapi(lang_id, 0, language_options.size())
var caption_loacles = caption_loacles_dict.get(lang_id)
caption_id = wrapi(caption_id, 0, caption_loacles.size())
var lang = caption_loacles[caption_id]
GlobalConfigManager.config.language = lang_id
GlobalConfigManager.config.caption = caption_id
print("set language to: ", lang)
TranslationServer.set_locale(lang)
func get_locale_language_name() -> String:
GlobalConfigManager.config.language = wrapi(
GlobalConfigManager.config.language, 0, language_options.size()
)
return language_options[GlobalConfigManager.config.language]
func get_locale_caption_name() -> String:
GlobalConfigManager.config.language = wrapi(
GlobalConfigManager.config.language, 0, language_options.size()
)
var caption_options = caption_options_dict.get(GlobalConfigManager.config.language)
GlobalConfigManager.config.caption = wrapi(
GlobalConfigManager.config.caption, 0, caption_options.size()
)
return caption_options[GlobalConfigManager.config.caption]
var _on_timer_timeout_counter := 0
func _on_timer_timeout():
var archive := ArchiveManager.archive
if archive and config:
archive.game_seconds += 5
config.game_total_seconds += 5
_on_timer_timeout_counter += 1
# 30s 打印一次,无需首次打印
# ArchiveManager 设置 archive 时会调用 print_global_info
if _on_timer_timeout_counter % 6 == 0:
# editor 中 600s 打印一次
if Engine.is_editor_hint() and _on_timer_timeout_counter % 120 != 0:
return
print_global_info()
# @warning_ignore("intege")
func print_global_info():
var archive := ArchiveManager.archive
if not archive or not config:
return
@warning_ignore("integer_division")
var hour := archive.game_seconds / 3600
@warning_ignore("integer_division")
var minute := (archive.game_seconds % 3600) / 60
var second := archive.game_seconds % 60
# 0:未开始游戏1:序章2-5:一四章6:结尾
var chapter := EventManager.get_chapter_stage()
var round_info = "r" + str(config.game_rounds) + "_c" + str(chapter)
var game_time_info = "game:" + str(hour) + ":" + str(minute) + ":" + str(second)
# get ticks since game app run
var ticks = Time.get_ticks_msec()
@warning_ignore("integer_division")
hour = ticks / 3600000
@warning_ignore("integer_division")
minute = (ticks % 3600000) / 60000
@warning_ignore("integer_division")
second = (ticks % 60000) / 1000
var msec = ticks % 1000
var tick_time_info = (
"tick:" + str(hour) + ":" + str(minute) + ":" + str(second) + "." + str(msec)
)
var time_info = game_time_info + " " + tick_time_info
var scene_info = archive.current_scene
prints("[timemark]", Time.get_datetime_string_from_system(), round_info, scene_info, time_info)