xiandie/manager/config_manager/global_config.gd

141 lines
4.3 KiB
GDScript3
Raw Normal View History

2024-12-23 01:29:31 +00:00
class_name GlobalConfig extends Resource
signal streamer_mode_updated
2025-06-28 01:14:15 +00:00
static var DEBUG = false
2025-07-17 08:43:30 +00:00
const DEBUG_CHARACTER_PREFIX = "[debug]"
2025-07-10 19:16:22 +00:00
# 影响事件的 release_stage
# 0:demo
# 1:v1.0正式版
const RELEASE_STAGE := 1
2024-12-23 01:29:31 +00:00
# .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}
2025-07-21 09:32:54 +00:00
const CAPTION_OPTIONS_DICT = {0: ["普通话", "上海话"], 1: [""]}
const CAPTION_LOCALES_DICT = {0: ["zh_CN", "zh_SH"], 1: ["en"]}
2025-07-16 21:44:00 +00:00
### 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")
2024-12-24 01:16:06 +00:00
## layers
# 设置, DebugPanel
const CANVAS_LAYER_SETTINGS = 30
2025-06-27 14:52:46 +00:00
# note
const CANVAS_LAYER_NOTE = 25
2025-06-28 01:14:15 +00:00
const CANVAS_LAYER_MEM_ITEM = 23
2025-06-27 14:52:46 +00:00
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
2025-06-23 09:01:43 +00:00
# main 场景的 UI 层prop hud、上下mask、notification
const CANVAS_LAYER_UI = 21
2025-06-23 09:01:43 +00:00
# 道具 inspectorprop/local
2025-03-21 13:45:41 +00:00
const CANVAS_LAYER_PROP_INSPECTOR = 20
2025-06-23 09:01:43 +00:00
# ground loader 转场等 mask 层
const CANVAS_LAYER_GROUND_MASK = 14
2025-06-23 09:01:43 +00:00
# 特殊全屏效果(无 shading
const CANVAS_LAYER_EFFECT = 11
2025-06-23 09:01:43 +00:00
# 全屏 shading
const CANVAS_LAYER_SHADING = 10
2025-06-25 17:53:16 +00:00
# 小游戏与特写
2025-03-09 14:01:51 +00:00
const CANVAS_LAYER_LITTLE_GAME = 5
2025-06-23 09:01:43 +00:00
# 前景层
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,
}
2024-12-24 11:24:55 +00:00
signal current_selected_archive_id_changed
signal auto_save_enabled_changed
2024-12-23 01:29:31 +00:00
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 # 启动游戏次数
2024-12-24 11:24:55 +00:00
@export var game_total_seconds := 0 # 游戏总时长
2024-12-23 01:29:31 +00:00
@export var game_rounds := 1 # 当前周目数
2024-12-24 11:24:55 +00:00
@export var current_selected_archive_id := -1: # 当前选定存档, -1 为未选择
2024-12-23 01:29:31 +00:00
set(val):
2024-12-24 11:24:55 +00:00
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:
2024-12-23 01:29:31 +00:00
set(val):
auto_save_seconds = val
auto_save_seconds_changed.emit()
# window
2025-06-27 22:51:13 +00:00
@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
2025-07-01 17:46:58 +00:00
@export var os_wait_time := 3.0
2025-07-04 18:16:45 +00:00
@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]