diff --git a/manager/event_manager/event2d.gd b/manager/event_manager/event2d.gd index 9a75366b..2d808318 100644 --- a/manager/event_manager/event2d.gd +++ b/manager/event_manager/event2d.gd @@ -3,11 +3,15 @@ extends Node2D class_name Event2D # 当前事件 -@export var event: StringName -@export var hide_if_on_stage: Array[int] = [] +@export_group("event") +@export var event_name: StringName +@export_enum("none", "show", "hide") var event_mode := "show" +@export var event_stages: Array[int] = [] # 前置依赖事件,为空时意味着无前置事件 -@export var pre_event: StringName -@export var hide_if_pre_on_stage: Array[int] = [] +@export_group("pre_event") +@export var pre_event_name: StringName +@export_enum("none", "show", "hide") var pre_event_mode := "show" +@export var pre_event_stages: Array[int] = [] @export_tool_button("创建脚本") var create_script = _create_script @export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter @export_tool_button("复制 setter") var copy_setter = _copy_setter @@ -18,20 +22,30 @@ var stage := 0 func _ready() -> void: - # if event != &"": - # name = "Event_" + event + # if event_name != &"": + # name = "Event_" + event_name if Engine.is_editor_hint(): return - if event == &"": - printerr("[Event2D] event is not set. continue processing...") - stage = EventManager.get_stage(event) + if event_name != "": + stage = EventManager.get_stage(event_name) + if pre_event_name != "": + prev_stage = EventManager.get_stage(pre_event_name) refresh_visibility() SceneManager.ground_ready.connect(_on_ground_ready) EventManager.stage_updated.connect(_on_global_stage_updated) +# 前置允许显示了,后续才可以显示 func refresh_visibility() -> void: - var should_show = not stage in hide_if_on_stage and not prev_stage in hide_if_pre_on_stage + var should_show = true + if pre_event_name != &"" and pre_event_mode != "none": + should_show = prev_stage in pre_event_stages + if pre_event_mode == "hide": + should_show = !should_show + if should_show and event_name != &"" and event_mode != "none": + should_show = stage in event_stages + if event_mode == "hide": + should_show = !should_show if visible != should_show: visible = should_show @@ -39,14 +53,16 @@ func refresh_visibility() -> void: func _on_global_stage_updated(e: StringName, s: int): var updated = false var pre_updated = false - if e == pre_event: + if e == pre_event_name: pre_updated = prev_stage != s prev_stage = s - print("[Event2D] Pre-event stage updated: %s, stage: %s" % [pre_event, prev_stage]) - elif e == event: + print( + "[Event2D] Pre-event_name stage updated: %s, stage: %s" % [pre_event_name, prev_stage] + ) + elif e == event_name: updated = stage != s stage = s - print("[Event2D] Event stage updated: %s, stage: %s" % [event, stage]) + print("[Event2D] Event stage updated: %s, stage: %s" % [event_name, stage]) refresh_visibility() if pre_updated: _on_pre_stage_updated() @@ -71,6 +87,7 @@ func _on_stage_updated(): var script_template = preload("uid://bmxsei74o3pyw") as Script var script_root_dir = "res://scene/ground/script/" + func _create_script(): var script = script_template.duplicate(true) as Script var ground = get_node("..") @@ -96,17 +113,18 @@ func _create_script(): func _copy_greater_setter(): - var text = 'EventManager.set_stage_if_greater(&"%s", 1)' % event + var text = 'EventManager.set_stage_if_greater(&"%s", 1)' % event_name DisplayServer.clipboard_set(text) print("Copied event greater setter: %s" % text) + func _copy_setter(): - var text = 'EventManager.set_stage(&"%s", 1)' % event + var text = 'EventManager.set_stage(&"%s", 1)' % event_name DisplayServer.clipboard_set(text) print("Copied event setter: %s" % text) func _copy_getter(): - var text = 'EventManager.get_stage(&"%s")' % event + var text = 'EventManager.get_stage(&"%s")' % event_name DisplayServer.clipboard_set(text) print("Copied event getter: %s" % text) diff --git a/scene/ground/scene/animation_root.gd b/scene/ground/scene/animation_root.gd index 7a8020bc..27ef4036 100644 --- a/scene/ground/scene/animation_root.gd +++ b/scene/ground/scene/animation_root.gd @@ -204,7 +204,7 @@ func _reset_archive() -> void: # setup _setup_ground_data(debug_ground_data, ground) archive.ground_archives[ground.scene_name].data = debug_ground_data - # 重置 event 状态 + # 重置 event_name 状态 # EventManager.set_stage(&"xxx", 2) # EventManager.set_stage_if_greater(&"xxx", 5) var event_setter_regx = RegEx.create_from_string(r'EventManager.set_stage\(.?"(.+)"') as RegEx @@ -301,12 +301,12 @@ func _find_event(events: Dictionary, node: Node) -> void: for child in node.get_children(): if child is Event2D: print("Find Event2D: " + child.name) - if child.event != &"": - events[child.event] = true - print("Find event: " + child.event) - if child.pre_event != &"": - events[child.pre_event] = true - print("Find pre_event: " + child.pre_event) + if child.event_name != &"": + events[child.event_name] = true + print("Find event_name: " + child.event_name) + if child.pre_event_name != &"": + events[child.pre_event_name] = true + print("Find pre_event_name: " + child.pre_event_name) elif child is EventBinder: print("Find EventBinder...") if child.trigger_event != &"": diff --git a/scene/ground/scene/c02/s03_院子.gd b/scene/ground/scene/c02/s03_院子.gd index 85f6bce1..0e529cf4 100644 --- a/scene/ground/scene/c02/s03_院子.gd +++ b/scene/ground/scene/c02/s03_院子.gd @@ -183,7 +183,7 @@ func eavesdrop() -> void: # 12 c00_吕萍_蹲下 13 c00_吕萍_蹲下呼吸 14 c00_吕萍_起立 SceneManager.lock_player(0, 12) # play("eavesdrop") - await Util.wait(1) + await SceneManager.get_player().animation_finished SceneManager.player_action(13) # 对话 DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_04_李氏癞子") diff --git a/scene/ground/scene/c02/s03_院子.tscn b/scene/ground/scene/c02/s03_院子.tscn index 063567da..2845c21a 100644 --- a/scene/ground/scene/c02/s03_院子.tscn +++ b/scene/ground/scene/c02/s03_院子.tscn @@ -341,8 +341,8 @@ hook_os_key = "c02_院子_保卫科旁" [node name="Event2D_xchan_run_after_got_pliers" type="Node2D" parent="Ground/DeployLayer" index="3"] position = Vector2(0, -1) script = ExtResource("11_lq23y") -event = &"c02_got_pliers" -hide_if_on_stage = Array[int]([0, 2]) +event_name = &"c02_got_pliers" +event_stages = Array[int]([1]) metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="Ambush老虎钳后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_after_got_pliers" instance=ExtResource("25_iyaiw")] @@ -544,7 +544,7 @@ texture = ExtResource("8_plfv5") [node name="Event2D小蝉哼歌" type="Node2D" parent="Ground/DeployLayer" index="16"] position = Vector2(800, -173) script = ExtResource("26_o1qbs") -event = &"c02_madman_interacted_stage" +event_name = &"c02_madman_interacted_stage" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"] diff --git a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn index 35d681c6..4cfd467d 100644 --- a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn +++ b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn @@ -314,7 +314,7 @@ flip_h = true [node name="Event2D小蝉哼歌" type="Node2D" parent="Ground/DeployLayer" index="18"] position = Vector2(92, 38) script = ExtResource("23_4c54f") -event = &"c02_madman_interacted_stage" +event_name = &"c02_madman_interacted_stage" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"] diff --git a/scene/ground/scene/c02/s06_二楼.tscn b/scene/ground/scene/c02/s06_二楼.tscn index 07c1c8d0..db1dc8ef 100644 --- a/scene/ground/scene/c02/s06_二楼.tscn +++ b/scene/ground/scene/c02/s06_二楼.tscn @@ -1288,8 +1288,8 @@ hook_method = "glimpse_hide_out" [node name="Event_小猫纸条" type="Node2D" parent="Ground/DeployLayer" index="20"] position = Vector2(164, 42) script = ExtResource("35_h3h1a") -event = &"c02_ball_game_stage" -hide_if_on_stage = Array[int]([0, 1, 2, 4]) +pre_event_name = &"c02_ball_game_stage" +pre_event_stages = Array[int]([3]) metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event_小猫纸条"] @@ -1312,8 +1312,8 @@ hook_method = "unlock_2floor_map" [node name="Event2D_xchan_run_away" type="Node2D" parent="Ground/DeployLayer" index="22"] position = Vector2(9, -4) script = ExtResource("39_t5e0j") -event = &"c02_2f_xchan_run_away" -hide_if_on_stage = Array[int]([0, 2]) +event_name = &"c02_2f_xchan_run_away" +event_stages = Array[int]([1]) metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="Ambush走到尽头后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_away" instance=ExtResource("14_k01ve")] diff --git a/scene/ground/scene/c03/s01_三楼.tscn b/scene/ground/scene/c03/s01_三楼.tscn index 234e10da..5036d538 100644 --- a/scene/ground/scene/c03/s01_三楼.tscn +++ b/scene/ground/scene/c03/s01_三楼.tscn @@ -227,8 +227,8 @@ metadata/_custom_type_script = "uid://0wjaho6qkg6s" [node name="Event2D放肉后" type="Node2D" parent="Ground/DeployLayer" index="5"] script = ExtResource("7_obrgj") -event = &"c03_s01_meat_put" -hide_if_on_stage = Array[int]([0, 2]) +event_name = &"c03_s01_meat_put" +event_stages = Array[int]([1]) metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="窗口闪动" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D放肉后"] diff --git a/scene/ground/script/c02/event_2d_xchan_run_after_got_pliers.gd b/scene/ground/script/c02/event_2d_xchan_run_after_got_pliers.gd index 0530425a..7682a793 100644 --- a/scene/ground/script/c02/event_2d_xchan_run_after_got_pliers.gd +++ b/scene/ground/script/c02/event_2d_xchan_run_after_got_pliers.gd @@ -34,5 +34,5 @@ func _on_stage_updated(): SceneManager.pop_os_with_str("c02_铁门旁遇到小蝉") await Util.wait(3.0) SceneManager.unlock_player() - EventManager.set_stage(event, 2) + EventManager.set_stage(event_name, 2) ) diff --git a/scene/ground/script/c02/event_2d_xchan_run_away.gd b/scene/ground/script/c02/event_2d_xchan_run_away.gd index 280c5cd0..2630db91 100644 --- a/scene/ground/script/c02/event_2d_xchan_run_away.gd +++ b/scene/ground/script/c02/event_2d_xchan_run_away.gd @@ -32,6 +32,6 @@ func _on_stage_updated(): SceneManager.pop_os_with_str("c02_二楼小蝉跑掉") await Util.wait(3.0) SceneManager.unlock_player() - EventManager.set_stage(event, 2) + EventManager.set_stage(event_name, 2) ) diff --git a/scene/ground/script/c02/event_2d叼纸小猫.gd b/scene/ground/script/c02/event_2d叼纸小猫.gd index c0701b67..b1b153c6 100644 --- a/scene/ground/script/c02/event_2d叼纸小猫.gd +++ b/scene/ground/script/c02/event_2d叼纸小猫.gd @@ -17,9 +17,9 @@ func _on_global_stage_updated(e: StringName, s: int): func _on_ground_ready(ground: Ground2D): if $"Inspectable小猫纸条".icount > 0: - EventManager.set_stage(event, 4) + EventManager.set_stage_if_greater(pre_event_name, 4) # else: - # $"Pickable小猫纸条".triggered.connect(EventManager.set_stage.bind(event, 4)) + # $"Pickable小猫纸条".triggered.connect(EventManager.set_stage.bind(event_name, 4)) func _on_pre_stage_updated():