extends Node signal stage_updated(event_name: StringName, stage: int) func get_stage(event_name: StringName) -> int: if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null: printerr("[EventManager] Archive or event_stage is null.") return 0 var val = ArchiveManager.archive.event_stage.get(event_name, 0) return val # default 为 0,首次更新为 1 func set_stage(event_name: StringName, stage := 1) -> void: if not ArchiveManager.archive or ArchiveManager.archive.event_stage == null: printerr("[EventManager] Archive or event_stage is null.") return ArchiveManager.archive.event_stage[event_name] = stage # print before emit print("[EventManager] Stage updated: %s, stage: %s" % [event_name, stage]) stage_updated.emit(event_name, stage) # 如果是 handnote_stage,玩家进行记笔记动作 if event_name == "handnote_stage" and SceneManager.get_player().character.begins_with("吕萍"): SceneManager.freeze_player(1.0, 16, true) # 仅在设置的 stage > 当前 stage 时更新,相等或小于时不更新 func set_stage_if_greater(event_name: StringName, stage := 1) -> void: var current_stage = get_stage(event_name) if stage > current_stage: set_stage(event_name, stage) # 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) ##### 其他事件 ##### func prop_interacted(e_name, prop_key, interacted_times) -> void: print("Event: %s interacted with %s. total times: %s" % [e_name, prop_key, interacted_times])