class_name GlobalConfig extends Resource signal streamer_mode_updated static var DEBUG = false const DEBUG_CHARACTER_PREFIX = "[debug]" # 影响事件的 release_stage # 0:demo # 1:v1.0正式版 const RELEASE_STAGE := 1 # .res would be binary encoded, .tres is text encoded const RES_FILE_FORMAT = ".tres" # Audio bus names const BUS_MASTER := "Master" const BUS_GAME_SFX := "game_sfx" const BUS_DIALOG := "dialog" const LANGUAGE_OPTIONS = ["简体中文", "English"] const LOCALE_PREFIX_MAPPING = {"zh": 0, "en": 1} const CAPTION_OPTIONS_DICT = {0: ["普通话", "上海话"], 1: [""]} const CAPTION_LOCALES_DICT = {0: ["zh_CN", "zh_SH"], 1: ["en"]} ### dailog const DIALOG_C01 = preload("uid://ckaq073w1lsom") const DIALOG_C02 = preload("uid://o7gam82qlv3s") const DIALOG_C03 = preload("uid://b66v5hsf3tdox") const DIALOG_C04 = preload("uid://cthsrdkrseijb") const DIALOG_C05 = preload("uid://c2em7wb623pd7") const DIALOG_C06 = preload("uid://c1bkhblw88ls0") const DIALOG_NPC = preload("uid://cni46vt7glkes") const DIALOG_INSPECT = preload("uid://dwykrbeikrpw1") const DIALOG_ITEM = preload("uid://b1vwhxctfhl5d") ## layers # 设置, DebugPanel const CANVAS_LAYER_SETTINGS = 30 # note const CANVAS_LAYER_NOTE = 25 const CANVAS_LAYER_MEM_ITEM = 23 const CANVAS_LAYER_UX_PANEL = 22 # dialog 在游戏场景中使用 CANVAS_LAYER_DIALOG # 在回忆中使用 CANVAS_LAYER_DIALOG_MEM const CANVAS_LAYER_DIALOG_MEM = 29 const CANVAS_LAYER_DIALOG = 22 # main 场景的 UI 层(prop hud、上下mask、notification) const CANVAS_LAYER_UI = 21 # 道具 inspector(prop/local) const CANVAS_LAYER_PROP_INSPECTOR = 20 # ground loader 转场等 mask 层 const CANVAS_LAYER_GROUND_MASK = 14 # 特殊全屏效果(无 shading) const CANVAS_LAYER_EFFECT = 11 # 全屏 shading const CANVAS_LAYER_SHADING = 10 # 小游戏与特写 const CANVAS_LAYER_LITTLE_GAME = 5 # 前景层 const CANVAS_LAYER_FG = 2 const DIALOG_IGNORE_INPUT = "ignore_input" # memory layer: 30 const DIALOG_MEM_LAYER = "mem_layer" const CHARACTER_COLOR_MAP = { "default": Color.LIGHT_SEA_GREEN, "吕萍": Color.ORANGE, "雾": Color.MEDIUM_SEA_GREEN, "获得": Color.WHITE, "小蝶": Color.MEDIUM_SPRING_GREEN, "小蝉": Color.AQUA, "陆仁": Color.POWDER_BLUE, "李氏": Color.SKY_BLUE, "方瞎子": Color.BURLYWOOD, "张胖子": Color.DARK_KHAKI, "王癞子": Color.AQUA, "吕萍(母)": Color.AQUA, } signal current_selected_archive_id_changed signal auto_save_enabled_changed signal auto_save_seconds_changed @export var version: int #存档版本 @export var debug_mode := false # 开启 debug 模式 @export var skip_trailer := false # 跳过 trailer @export var game_launched_times := 0 # 启动游戏次数 @export var game_total_seconds := 0 # 游戏总时长 @export var game_rounds := 1 # 当前周目数 @export var current_selected_archive_id := -1: # 当前选定存档, -1 为未选择 set(val): current_selected_archive_id = val current_selected_archive_id_changed.emit() @export var auto_save_enabled := true: set(val): auto_save_enabled = val auto_save_enabled_changed.emit() # 默认 60s 保存一次 @export var auto_save_seconds := 60: set(val): auto_save_seconds = val auto_save_seconds_changed.emit() # window @export var window_fullscreen := true @export var window_top := false # sound @export var db_master := linear_to_db(0.7) @export var db_dialog := linear_to_db(0.7) + Settings.dialog_db_offset @export var db_game_sfx := linear_to_db(0.7) + Settings.sfx_db_offset # language # -1 null; 0 zh; 1 en @export var language := 0 @export var caption := 0 # 最大范围为 10 秒,精度 0.1 @export var os_wait_time := 3.0 @export var os_auto_end := true # 绿色/主播模式 @export var streamer_mode := false: set(val): if streamer_mode != val: streamer_mode = val streamer_mode_updated.emit() func get_locale_language_name() -> String: language = wrapi(language, 0, LANGUAGE_OPTIONS.size()) return LANGUAGE_OPTIONS[language] func get_locale_caption_name() -> String: language = wrapi(language, 0, LANGUAGE_OPTIONS.size()) var caption_options = CAPTION_OPTIONS_DICT.get(language, [""]) caption = wrapi(caption, 0, caption_options.size()) return caption_options[caption] func get_locale() -> String: var locales = CAPTION_LOCALES_DICT.get(language, [""]) caption = wrapi(caption, 0, locales.size()) return locales[caption]