优化 event 系统
This commit is contained in:
parent
57c381261f
commit
757b0493ba
@ -3,11 +3,15 @@ extends Node2D
|
|||||||
class_name Event2D
|
class_name Event2D
|
||||||
|
|
||||||
# 当前事件
|
# 当前事件
|
||||||
@export var event: StringName
|
@export_group("event")
|
||||||
@export var hide_if_on_stage: Array[int] = []
|
@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_group("pre_event")
|
||||||
@export var hide_if_pre_on_stage: Array[int] = []
|
@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("创建脚本") var create_script = _create_script
|
||||||
@export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter
|
@export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter
|
||||||
@export_tool_button("复制 setter") var copy_setter = _copy_setter
|
@export_tool_button("复制 setter") var copy_setter = _copy_setter
|
||||||
@ -18,20 +22,30 @@ var stage := 0
|
|||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# if event != &"":
|
# if event_name != &"":
|
||||||
# name = "Event_" + event
|
# name = "Event_" + event_name
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
if event == &"":
|
if event_name != "":
|
||||||
printerr("[Event2D] event is not set. continue processing...")
|
stage = EventManager.get_stage(event_name)
|
||||||
stage = EventManager.get_stage(event)
|
if pre_event_name != "":
|
||||||
|
prev_stage = EventManager.get_stage(pre_event_name)
|
||||||
refresh_visibility()
|
refresh_visibility()
|
||||||
SceneManager.ground_ready.connect(_on_ground_ready)
|
SceneManager.ground_ready.connect(_on_ground_ready)
|
||||||
EventManager.stage_updated.connect(_on_global_stage_updated)
|
EventManager.stage_updated.connect(_on_global_stage_updated)
|
||||||
|
|
||||||
|
|
||||||
|
# 前置允许显示了,后续才可以显示
|
||||||
func refresh_visibility() -> void:
|
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:
|
if visible != should_show:
|
||||||
visible = should_show
|
visible = should_show
|
||||||
|
|
||||||
@ -39,14 +53,16 @@ func refresh_visibility() -> void:
|
|||||||
func _on_global_stage_updated(e: StringName, s: int):
|
func _on_global_stage_updated(e: StringName, s: int):
|
||||||
var updated = false
|
var updated = false
|
||||||
var pre_updated = false
|
var pre_updated = false
|
||||||
if e == pre_event:
|
if e == pre_event_name:
|
||||||
pre_updated = prev_stage != s
|
pre_updated = prev_stage != s
|
||||||
prev_stage = s
|
prev_stage = s
|
||||||
print("[Event2D] Pre-event stage updated: %s, stage: %s" % [pre_event, prev_stage])
|
print(
|
||||||
elif e == event:
|
"[Event2D] Pre-event_name stage updated: %s, stage: %s" % [pre_event_name, prev_stage]
|
||||||
|
)
|
||||||
|
elif e == event_name:
|
||||||
updated = stage != s
|
updated = stage != s
|
||||||
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()
|
refresh_visibility()
|
||||||
if pre_updated:
|
if pre_updated:
|
||||||
_on_pre_stage_updated()
|
_on_pre_stage_updated()
|
||||||
@ -71,6 +87,7 @@ func _on_stage_updated():
|
|||||||
var script_template = preload("uid://bmxsei74o3pyw") as Script
|
var script_template = preload("uid://bmxsei74o3pyw") as Script
|
||||||
var script_root_dir = "res://scene/ground/script/"
|
var script_root_dir = "res://scene/ground/script/"
|
||||||
|
|
||||||
|
|
||||||
func _create_script():
|
func _create_script():
|
||||||
var script = script_template.duplicate(true) as Script
|
var script = script_template.duplicate(true) as Script
|
||||||
var ground = get_node("..")
|
var ground = get_node("..")
|
||||||
@ -96,17 +113,18 @@ func _create_script():
|
|||||||
|
|
||||||
|
|
||||||
func _copy_greater_setter():
|
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)
|
DisplayServer.clipboard_set(text)
|
||||||
print("Copied event greater setter: %s" % text)
|
print("Copied event greater setter: %s" % text)
|
||||||
|
|
||||||
|
|
||||||
func _copy_setter():
|
func _copy_setter():
|
||||||
var text = 'EventManager.set_stage(&"%s", 1)' % event
|
var text = 'EventManager.set_stage(&"%s", 1)' % event_name
|
||||||
DisplayServer.clipboard_set(text)
|
DisplayServer.clipboard_set(text)
|
||||||
print("Copied event setter: %s" % text)
|
print("Copied event setter: %s" % text)
|
||||||
|
|
||||||
|
|
||||||
func _copy_getter():
|
func _copy_getter():
|
||||||
var text = 'EventManager.get_stage(&"%s")' % event
|
var text = 'EventManager.get_stage(&"%s")' % event_name
|
||||||
DisplayServer.clipboard_set(text)
|
DisplayServer.clipboard_set(text)
|
||||||
print("Copied event getter: %s" % text)
|
print("Copied event getter: %s" % text)
|
||||||
|
@ -204,7 +204,7 @@ func _reset_archive() -> void:
|
|||||||
# setup
|
# setup
|
||||||
_setup_ground_data(debug_ground_data, ground)
|
_setup_ground_data(debug_ground_data, ground)
|
||||||
archive.ground_archives[ground.scene_name].data = debug_ground_data
|
archive.ground_archives[ground.scene_name].data = debug_ground_data
|
||||||
# 重置 event 状态
|
# 重置 event_name 状态
|
||||||
# EventManager.set_stage(&"xxx", 2)
|
# EventManager.set_stage(&"xxx", 2)
|
||||||
# EventManager.set_stage_if_greater(&"xxx", 5)
|
# EventManager.set_stage_if_greater(&"xxx", 5)
|
||||||
var event_setter_regx = RegEx.create_from_string(r'EventManager.set_stage\(.?"(.+)"') as RegEx
|
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():
|
for child in node.get_children():
|
||||||
if child is Event2D:
|
if child is Event2D:
|
||||||
print("Find Event2D: " + child.name)
|
print("Find Event2D: " + child.name)
|
||||||
if child.event != &"":
|
if child.event_name != &"":
|
||||||
events[child.event] = true
|
events[child.event_name] = true
|
||||||
print("Find event: " + child.event)
|
print("Find event_name: " + child.event_name)
|
||||||
if child.pre_event != &"":
|
if child.pre_event_name != &"":
|
||||||
events[child.pre_event] = true
|
events[child.pre_event_name] = true
|
||||||
print("Find pre_event: " + child.pre_event)
|
print("Find pre_event_name: " + child.pre_event_name)
|
||||||
elif child is EventBinder:
|
elif child is EventBinder:
|
||||||
print("Find EventBinder...")
|
print("Find EventBinder...")
|
||||||
if child.trigger_event != &"":
|
if child.trigger_event != &"":
|
||||||
|
@ -183,7 +183,7 @@ func eavesdrop() -> void:
|
|||||||
# 12 c00_吕萍_蹲下 13 c00_吕萍_蹲下呼吸 14 c00_吕萍_起立
|
# 12 c00_吕萍_蹲下 13 c00_吕萍_蹲下呼吸 14 c00_吕萍_起立
|
||||||
SceneManager.lock_player(0, 12)
|
SceneManager.lock_player(0, 12)
|
||||||
# play("eavesdrop")
|
# play("eavesdrop")
|
||||||
await Util.wait(1)
|
await SceneManager.get_player().animation_finished
|
||||||
SceneManager.player_action(13)
|
SceneManager.player_action(13)
|
||||||
# 对话
|
# 对话
|
||||||
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_04_李氏癞子")
|
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_04_李氏癞子")
|
||||||
|
@ -341,8 +341,8 @@ hook_os_key = "c02_院子_保卫科旁"
|
|||||||
[node name="Event2D_xchan_run_after_got_pliers" type="Node2D" parent="Ground/DeployLayer" index="3"]
|
[node name="Event2D_xchan_run_after_got_pliers" type="Node2D" parent="Ground/DeployLayer" index="3"]
|
||||||
position = Vector2(0, -1)
|
position = Vector2(0, -1)
|
||||||
script = ExtResource("11_lq23y")
|
script = ExtResource("11_lq23y")
|
||||||
event = &"c02_got_pliers"
|
event_name = &"c02_got_pliers"
|
||||||
hide_if_on_stage = Array[int]([0, 2])
|
event_stages = Array[int]([1])
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="Ambush老虎钳后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_after_got_pliers" instance=ExtResource("25_iyaiw")]
|
[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"]
|
[node name="Event2D小蝉哼歌" type="Node2D" parent="Ground/DeployLayer" index="16"]
|
||||||
position = Vector2(800, -173)
|
position = Vector2(800, -173)
|
||||||
script = ExtResource("26_o1qbs")
|
script = ExtResource("26_o1qbs")
|
||||||
event = &"c02_madman_interacted_stage"
|
event_name = &"c02_madman_interacted_stage"
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"]
|
[node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"]
|
||||||
|
@ -314,7 +314,7 @@ flip_h = true
|
|||||||
[node name="Event2D小蝉哼歌" type="Node2D" parent="Ground/DeployLayer" index="18"]
|
[node name="Event2D小蝉哼歌" type="Node2D" parent="Ground/DeployLayer" index="18"]
|
||||||
position = Vector2(92, 38)
|
position = Vector2(92, 38)
|
||||||
script = ExtResource("23_4c54f")
|
script = ExtResource("23_4c54f")
|
||||||
event = &"c02_madman_interacted_stage"
|
event_name = &"c02_madman_interacted_stage"
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"]
|
[node name="Sfx2D小蝉哼歌" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Event2D小蝉哼歌"]
|
||||||
|
@ -1288,8 +1288,8 @@ hook_method = "glimpse_hide_out"
|
|||||||
[node name="Event_小猫纸条" type="Node2D" parent="Ground/DeployLayer" index="20"]
|
[node name="Event_小猫纸条" type="Node2D" parent="Ground/DeployLayer" index="20"]
|
||||||
position = Vector2(164, 42)
|
position = Vector2(164, 42)
|
||||||
script = ExtResource("35_h3h1a")
|
script = ExtResource("35_h3h1a")
|
||||||
event = &"c02_ball_game_stage"
|
pre_event_name = &"c02_ball_game_stage"
|
||||||
hide_if_on_stage = Array[int]([0, 1, 2, 4])
|
pre_event_stages = Array[int]([3])
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event_小猫纸条"]
|
[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"]
|
[node name="Event2D_xchan_run_away" type="Node2D" parent="Ground/DeployLayer" index="22"]
|
||||||
position = Vector2(9, -4)
|
position = Vector2(9, -4)
|
||||||
script = ExtResource("39_t5e0j")
|
script = ExtResource("39_t5e0j")
|
||||||
event = &"c02_2f_xchan_run_away"
|
event_name = &"c02_2f_xchan_run_away"
|
||||||
hide_if_on_stage = Array[int]([0, 2])
|
event_stages = Array[int]([1])
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="Ambush走到尽头后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_away" instance=ExtResource("14_k01ve")]
|
[node name="Ambush走到尽头后小蝉跑" parent="Ground/DeployLayer/Event2D_xchan_run_away" instance=ExtResource("14_k01ve")]
|
||||||
|
@ -227,8 +227,8 @@ metadata/_custom_type_script = "uid://0wjaho6qkg6s"
|
|||||||
|
|
||||||
[node name="Event2D放肉后" type="Node2D" parent="Ground/DeployLayer" index="5"]
|
[node name="Event2D放肉后" type="Node2D" parent="Ground/DeployLayer" index="5"]
|
||||||
script = ExtResource("7_obrgj")
|
script = ExtResource("7_obrgj")
|
||||||
event = &"c03_s01_meat_put"
|
event_name = &"c03_s01_meat_put"
|
||||||
hide_if_on_stage = Array[int]([0, 2])
|
event_stages = Array[int]([1])
|
||||||
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
|
||||||
|
|
||||||
[node name="窗口闪动" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D放肉后"]
|
[node name="窗口闪动" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D放肉后"]
|
||||||
|
@ -34,5 +34,5 @@ func _on_stage_updated():
|
|||||||
SceneManager.pop_os_with_str("c02_铁门旁遇到小蝉")
|
SceneManager.pop_os_with_str("c02_铁门旁遇到小蝉")
|
||||||
await Util.wait(3.0)
|
await Util.wait(3.0)
|
||||||
SceneManager.unlock_player()
|
SceneManager.unlock_player()
|
||||||
EventManager.set_stage(event, 2)
|
EventManager.set_stage(event_name, 2)
|
||||||
)
|
)
|
||||||
|
@ -32,6 +32,6 @@ func _on_stage_updated():
|
|||||||
SceneManager.pop_os_with_str("c02_二楼小蝉跑掉")
|
SceneManager.pop_os_with_str("c02_二楼小蝉跑掉")
|
||||||
await Util.wait(3.0)
|
await Util.wait(3.0)
|
||||||
SceneManager.unlock_player()
|
SceneManager.unlock_player()
|
||||||
EventManager.set_stage(event, 2)
|
EventManager.set_stage(event_name, 2)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@ func _on_global_stage_updated(e: StringName, s: int):
|
|||||||
|
|
||||||
func _on_ground_ready(ground: Ground2D):
|
func _on_ground_ready(ground: Ground2D):
|
||||||
if $"Inspectable小猫纸条".icount > 0:
|
if $"Inspectable小猫纸条".icount > 0:
|
||||||
EventManager.set_stage(event, 4)
|
EventManager.set_stage_if_greater(pre_event_name, 4)
|
||||||
# else:
|
# 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():
|
func _on_pre_stage_updated():
|
||||||
|
Loading…
Reference in New Issue
Block a user