140 lines
4.2 KiB
GDScript
140 lines
4.2 KiB
GDScript
class_name GlobalConfig extends Resource
|
||
|
||
signal streamer_mode_updated
|
||
|
||
static var DEBUG = false
|
||
# 影响事件的 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_SH", "zh_CN"], 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]
|