2024-12-23 01:29:31 +00:00
|
|
|
|
extends Node
|
|
|
|
|
|
2025-06-27 14:52:46 +00:00
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 其他事件 #####
|
2025-01-13 08:09:57 +00:00
|
|
|
|
|
|
|
|
|
|
2025-06-17 05:01:19 +00:00
|
|
|
|
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])
|