xiandie/manager/event_manager/event_manager.gd

47 lines
1.6 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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])