2024-12-23 01:29:31 +00:00
|
|
|
|
class_name GlobalConfig extends Resource
|
|
|
|
|
|
2025-07-10 18:08:27 +00:00
|
|
|
|
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
|
2025-07-06 07:12:11 +00:00
|
|
|
|
|
2024-12-23 01:29:31 +00:00
|
|
|
|
# .res would be binary encoded, .tres is text encoded
|
|
|
|
|
const RES_FILE_FORMAT = ".tres"
|
|
|
|
|
|
2025-07-16 11:56:21 +00:00
|
|
|
|
# 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 11:56:21 +00:00
|
|
|
|
|
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
|
2025-07-16 15:20:55 +00:00
|
|
|
|
# 设置, DebugPanel
|
2025-01-30 12:04:02 +00:00
|
|
|
|
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
|
2025-07-16 08:42:59 +00:00
|
|
|
|
# dialog 在游戏场景中使用 CANVAS_LAYER_DIALOG
|
|
|
|
|
# 在回忆中使用 CANVAS_LAYER_DIALOG_MEM
|
|
|
|
|
const CANVAS_LAYER_DIALOG_MEM = 29
|
2025-07-16 08:01:09 +00:00
|
|
|
|
const CANVAS_LAYER_DIALOG = 22
|
2025-06-23 09:01:43 +00:00
|
|
|
|
# main 场景的 UI 层(prop hud、上下mask、notification)
|
2025-06-23 15:07:00 +00:00
|
|
|
|
const CANVAS_LAYER_UI = 21
|
2025-06-23 09:01:43 +00:00
|
|
|
|
# 道具 inspector(prop/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 层
|
2025-03-20 10:00:53 +00:00
|
|
|
|
const CANVAS_LAYER_GROUND_MASK = 14
|
2025-06-23 09:01:43 +00:00
|
|
|
|
# 特殊全屏效果(无 shading)
|
2025-06-23 15:07:00 +00:00
|
|
|
|
const CANVAS_LAYER_EFFECT = 11
|
2025-06-23 09:01:43 +00:00
|
|
|
|
# 全屏 shading
|
2025-01-05 11:25:13 +00:00
|
|
|
|
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
|
|
|
|
# 前景层
|
2025-01-05 11:25:13 +00:00
|
|
|
|
const CANVAS_LAYER_FG = 2
|
2024-12-26 13:58:37 +00:00
|
|
|
|
|
2025-01-24 14:19:17 +00:00
|
|
|
|
const DIALOG_IGNORE_INPUT = "ignore_input"
|
2025-07-16 08:01:09 +00:00
|
|
|
|
# memory layer: 30
|
|
|
|
|
const DIALOG_MEM_LAYER = "mem_layer"
|
2025-01-24 14:19:17 +00:00
|
|
|
|
|
2025-01-08 14:08:37 +00:00
|
|
|
|
const CHARACTER_COLOR_MAP = {
|
|
|
|
|
"default": Color.LIGHT_SEA_GREEN,
|
|
|
|
|
"吕萍": Color.ORANGE,
|
|
|
|
|
"雾": Color.MEDIUM_SEA_GREEN,
|
|
|
|
|
"获得": Color.WHITE,
|
2025-01-09 11:54:34 +00:00
|
|
|
|
"小蝶": Color.MEDIUM_SPRING_GREEN,
|
|
|
|
|
"小蝉": Color.AQUA,
|
|
|
|
|
"陆仁": Color.POWDER_BLUE,
|
|
|
|
|
"李氏": Color.SKY_BLUE,
|
|
|
|
|
"方瞎子": Color.BURLYWOOD,
|
|
|
|
|
"张胖子": Color.DARK_KHAKI,
|
2025-01-08 14:08:37 +00:00
|
|
|
|
"王癞子": Color.AQUA,
|
2025-01-09 11:54:34 +00:00
|
|
|
|
"吕萍(母)": Color.AQUA,
|
2025-01-08 14:08:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-12-24 11:24:55 +00:00
|
|
|
|
signal current_selected_archive_id_changed
|
2025-01-16 12:24:21 +00:00
|
|
|
|
signal auto_save_enabled_changed
|
2024-12-23 01:29:31 +00:00
|
|
|
|
signal auto_save_seconds_changed
|
|
|
|
|
|
2025-07-16 15:20:55 +00:00
|
|
|
|
@export var version: int #存档版本
|
2025-07-10 18:08:27 +00:00
|
|
|
|
@export var debug_mode := false # 开启 debug 模式
|
|
|
|
|
@export var skip_trailer := false # 跳过 trailer
|
2025-07-16 11:56:21 +00:00
|
|
|
|
@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()
|
2025-01-16 12:24:21 +00:00
|
|
|
|
@export var auto_save_enabled := true:
|
|
|
|
|
set(val):
|
|
|
|
|
auto_save_enabled = val
|
|
|
|
|
auto_save_enabled_changed.emit()
|
2025-06-28 13:42:20 +00:00
|
|
|
|
# 默认 60s 保存一次
|
|
|
|
|
@export var auto_save_seconds := 60:
|
2024-12-23 01:29:31 +00:00
|
|
|
|
set(val):
|
|
|
|
|
auto_save_seconds = val
|
2025-01-05 11:25:13 +00:00
|
|
|
|
auto_save_seconds_changed.emit()
|
2025-01-16 12:24:21 +00:00
|
|
|
|
# window
|
2025-06-27 22:51:13 +00:00
|
|
|
|
@export var window_fullscreen := true
|
|
|
|
|
@export var window_top := false
|
2025-01-16 12:24:21 +00:00
|
|
|
|
# sound
|
2025-07-08 07:13:16 +00:00
|
|
|
|
@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
|
2025-06-10 04:04:24 +00:00
|
|
|
|
# language
|
2025-07-15 10:37:00 +00:00
|
|
|
|
# -1 null; 0 zh; 1 en
|
2025-06-25 20:31:40 +00:00
|
|
|
|
@export var language := 0
|
2025-06-27 18:41:37 +00:00
|
|
|
|
@export var caption := 0
|
2025-06-30 14:48:28 +00:00
|
|
|
|
# 最大范围为 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
|
2025-07-10 18:08:27 +00:00
|
|
|
|
# 绿色/主播模式
|
|
|
|
|
@export var streamer_mode := false:
|
|
|
|
|
set(val):
|
|
|
|
|
if streamer_mode != val:
|
|
|
|
|
streamer_mode = val
|
|
|
|
|
streamer_mode_updated.emit()
|
2025-07-16 11:56:21 +00:00
|
|
|
|
|
|
|
|
|
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]
|