Merge remote-tracking branch 'origin/demo'
This commit is contained in:
commit
e2dcdb0512
@ -1,51 +1,43 @@
|
|||||||
@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 (
|
|
||||||
SceneManager.is_node_ready()
|
|
||||||
and SceneManager.get_player()
|
|
||||||
and SceneManager.get_player().character.begins_with("吕萍")
|
|
||||||
):
|
|
||||||
if event_name == &"current_chapter_stage":
|
|
||||||
# 章节更新
|
|
||||||
pass
|
|
||||||
elif event_name.begins_with("handnote_"):
|
|
||||||
# 笔记条目更新
|
|
||||||
# 0 初始化隐藏,1 开始显示,2 划掉,3 结束隐藏
|
|
||||||
if stage == 1:
|
|
||||||
SceneManager.lock_player(3.0, 16, true)
|
|
||||||
SceneManager.pop_notification("ui_notify_note_update")
|
|
||||||
|
|
||||||
|
|
||||||
# 仅在设置的 stage > 当前 stage 时更新,相等或小于时不更新
|
# 仅当设置的 stage > 当前 stage 时更新
|
||||||
func set_stage_if_greater(event_name: StringName, stage := 1) -> bool:
|
func set_stage_if_greater(event_name: StringName, stage: int) -> bool:
|
||||||
var current_stage = get_stage(event_name)
|
if stage > get_stage(event_name):
|
||||||
if stage > current_stage:
|
|
||||||
set_stage(event_name, stage)
|
set_stage(event_name, stage)
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
@ -55,12 +47,31 @@ func set_stage_if_greater(event_name: StringName, stage := 1) -> bool:
|
|||||||
func next_stage(event_name: StringName, stage_max := 99999) -> int:
|
func next_stage(event_name: StringName, stage_max := 99999) -> int:
|
||||||
var current_stage = get_stage(event_name)
|
var current_stage = get_stage(event_name)
|
||||||
if current_stage < stage_max:
|
if current_stage < stage_max:
|
||||||
var stage = current_stage + 1
|
var new_stage = current_stage + 1
|
||||||
set_stage(event_name, stage)
|
set_stage(event_name, new_stage)
|
||||||
return stage
|
return new_stage
|
||||||
return stage_max
|
return stage_max
|
||||||
|
|
||||||
|
|
||||||
|
# --- 游戏特定逻辑 ---
|
||||||
|
func _on_stage_updated_for_handnote(event_name: StringName, stage: int) -> void:
|
||||||
|
# 检查条件是否满足
|
||||||
|
if not (
|
||||||
|
SceneManager.is_node_ready()
|
||||||
|
and SceneManager.get_player()
|
||||||
|
and SceneManager.get_player().character.begins_with("吕萍")
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
if event_name.begins_with("handnote_"):
|
||||||
|
# 笔记条目更新
|
||||||
|
# 0 初始化隐藏,1 开始显示,2 划掉,3 结束隐藏
|
||||||
|
if stage == 1:
|
||||||
|
SceneManager.lock_player(3.0, 16, true)
|
||||||
|
SceneManager.pop_notification("ui_notify_note_update")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 其他事件 #####
|
##### 其他事件 #####
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user