event_manager 解耦 _on_stage_updated_for_handnote

This commit is contained in:
cakipaul 2025-07-15 14:54:13 +08:00
parent 90024f59f1
commit 9b0ecd4345

View File

@ -1,40 +1,69 @@
@tool @tool
extends Node extends Node
## 当任何事件的状态stage发生变化时发出此信号。
## 其他系统如UI、角色状态机等可以监听此信号来做出反应。
signal stage_updated(event_name: StringName, stage: int) signal stage_updated(event_name: StringName, stage: int)
# 节点初始化时,异步加载并解析事件规则。
func _ready() -> void:
stage_updated.connect(_on_stage_updated_for_handnote)
# --- 公共 API ---
func get_chapter_stage() -> int: func get_chapter_stage() -> int:
return get_stage("current_chapter_stage") return get_stage(&"current_chapter_stage")
func get_stage(event_name: StringName) -> int: func get_stage(event_name: StringName) -> int:
if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null: if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null:
printerr("[EventManager] Archive or event_stage is null.") printerr("[EventManager] Archive or event_stage is null. Cannot get stage for '", event_name, "'.")
return 0 return 0
var val = ArchiveManager.archive.event_stage.get(event_name, 0) return ArchiveManager.archive.event_stage.get(event_name, 0)
return val
# 核心的 stage 设置函数
# default 为 0首次更新为 1 # default 为 0首次更新为 1
func set_stage(event_name: StringName, stage := 1) -> void: func set_stage(event_name: StringName, stage := 1) -> void:
if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null: if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null:
printerr("[EventManager] Archive or event_stage is null.") printerr("[EventManager] Archive or event_stage is null. Cannot set stage for '", event_name, "'.")
return return
ArchiveManager.archive.event_stage[event_name] = stage ArchiveManager.archive.event_stage[event_name] = stage
# print before emit print("[EventManager] Stage updated: %s -> %s" % [event_name, stage])
print("[EventManager] Stage updated: %s, stage: %s" % [event_name, stage])
stage_updated.emit(event_name, stage) stage_updated.emit(event_name, stage)
# 如果是 handnote_ 事件,玩家进行记笔记动作
if (
# 仅当设置的 stage > 当前 stage 时更新
func set_stage_if_greater(event_name: StringName, stage: int) -> bool:
if stage > get_stage(event_name):
set_stage(event_name, stage)
return true
return false
# stage 最大 99999
func next_stage(event_name: StringName, stage_max := 99999) -> int:
var current_stage = get_stage(event_name)
if current_stage < stage_max:
var new_stage = current_stage + 1
set_stage(event_name, new_stage)
return new_stage
return stage_max
# --- 游戏特定逻辑 ---
func _on_stage_updated_for_handnote(event_name: StringName, stage: int) -> void:
# 检查条件是否满足
if not (
SceneManager.is_node_ready() SceneManager.is_node_ready()
and SceneManager.get_player() and SceneManager.get_player()
and SceneManager.get_player().character.begins_with("吕萍") and SceneManager.get_player().character.begins_with("吕萍")
): ):
if event_name == &"current_chapter_stage": return
# 章节更新
pass if event_name.begins_with("handnote_"):
elif event_name.begins_with("handnote_"):
# 笔记条目更新 # 笔记条目更新
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏 # 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
if stage == 1: if stage == 1:
@ -42,22 +71,6 @@ func set_stage(event_name: StringName, stage := 1) -> void:
SceneManager.pop_notification("ui_notify_note_update") SceneManager.pop_notification("ui_notify_note_update")
# 仅在设置的 stage > 当前 stage 时更新,相等或小于时不更新
func set_stage_if_greater(event_name: StringName, stage := 1) -> bool:
var current_stage = get_stage(event_name)
if stage > current_stage:
set_stage(event_name, stage)
return true
return false
# stage 最大 99999
func next_staged(event_name: StringName, stage_max := 99999) -> void:
var current_stage = get_stage(event_name)
if current_stage < stage_max:
set_stage(event_name, current_stage + 1)
##### 其他事件 ##### ##### 其他事件 #####