From aedf7d3896a37c6e2f24627fdd0d0d0545b66cd0 Mon Sep 17 00:00:00 2001 From: cakipaul Date: Tue, 15 Jul 2025 16:05:10 +0800 Subject: [PATCH] =?UTF-8?q?ambush=20=E5=8F=82=E6=95=B0=EF=BC=9Aenter=5Faff?= =?UTF-8?q?ected=5Fby=5Fvisibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/event_manager/event2d.gd | 24 ++++++++++++++++++------ scene/entity/ambush.gd | 6 ++++++ scene/ground/scene/c02/s06_二楼.tscn | 20 +++----------------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/manager/event_manager/event2d.gd b/manager/event_manager/event2d.gd index b831297a..7c64306f 100644 --- a/manager/event_manager/event2d.gd +++ b/manager/event_manager/event2d.gd @@ -9,7 +9,12 @@ class_name Event2D event_name = val if is_node_ready() and Engine.is_editor_hint(): _auto_memo() -@export_enum("none", "show", "hide") var event_mode := "show" +@export_enum("none", "show", "hide") var event_mode := "show": + set(val): + if event_mode != val: + event_mode = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() @export var event_stages: Array[int] = []: set(val): if event_stages != val: @@ -23,7 +28,12 @@ class_name Event2D pre_event_name = val if is_node_ready() and Engine.is_editor_hint(): _auto_memo() -@export_enum("none", "show", "hide") var pre_event_mode := "show" +@export_enum("none", "show", "hide") var pre_event_mode := "show": + set(val): + if pre_event_mode != val: + pre_event_mode = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() @export var pre_event_stages: Array[int] = []: set(val): if pre_event_stages != val: @@ -63,10 +73,12 @@ func refresh_visibility() -> void: 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 + # 只有在 pre_event should_show 后,才会检查 event + if should_show: + if 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 diff --git a/scene/entity/ambush.gd b/scene/entity/ambush.gd index 23ca19df..d3a3b6cd 100644 --- a/scene/entity/ambush.gd +++ b/scene/entity/ambush.gd @@ -20,6 +20,8 @@ signal sign_mark_offset_updated trigger_mode = val if is_node_ready(): _check_sign_status() +# enter or area_enter 时是否受可见性影响 +@export var enter_affected_by_visibility := false @export var collision_width_and_x := Vector2(20.0, 0): set(val): collision_width_and_x = val @@ -149,6 +151,8 @@ func _interacted(): func _entered(_body = null): if enabled and trigger_mode == "enter": + if enter_affected_by_visibility and not is_visible_in_tree(): + return # _entered 不需要 visible # if is_visible_in_tree(): _do_trigger() @@ -156,6 +160,8 @@ func _entered(_body = null): func _area_entered(_area = null): if enabled and trigger_mode == "area_enter": + if enter_affected_by_visibility and not is_visible_in_tree(): + return # _area_entered 不需要 visible # if is_visible_in_tree(): _do_trigger() diff --git a/scene/ground/scene/c02/s06_二楼.tscn b/scene/ground/scene/c02/s06_二楼.tscn index dbd9f123..f3301e33 100644 --- a/scene/ground/scene/c02/s06_二楼.tscn +++ b/scene/ground/scene/c02/s06_二楼.tscn @@ -980,29 +980,14 @@ texture = ExtResource("10_sqio2") position = Vector2(105, 2) script = ExtResource("10_qoe83") event_name = &"c03_f2_madman_runaway" -event_mode = "hide" -event_stages = Array[int]([1]) +event_stages = Array[int]([0]) pre_event_name = &"c03_invite_xchan_supper" pre_event_mode = "hide" pre_event_stages = Array[int]([0]) event_memo = "当前置事件[c03_invite_xchan_supper!=0:初始化] -并且当事件[c03_f2_madman_runaway!=1:跑开_纸人挡路]时显示该节点" +并且当事件[c03_f2_madman_runaway=0:初始化]时显示该节点" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" -[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/Event2D疯子跑开"] -visible = false -position = Vector2(69, 45) -color = Color(0.999971, 0.912551, 0.842208, 1) -blend_mode = 2 -texture = ExtResource("11_2rktm") -texture_scale = 0.6 - -[node name="小蜡烛" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D疯子跑开/小蜡烛PointLight2D"] -self_modulate = Color(0.611765, 0.611765, 0.611765, 1) -position = Vector2(0, 12.8172) -sprite_frames = SubResource("SpriteFrames_lipxo") -autoplay = "default" - [node name="Pro疯子慌张跑开" parent="Ground/DeployLayer/Event2D疯子跑开" instance=ExtResource("10_p6da7")] position = Vector2(102, 22) sprite_frames = ExtResource("12_sqio2") @@ -1025,6 +1010,7 @@ debug_mov_animation = "疯子_慌张跑开" [node name="Ambush疯子慌张跑开" parent="Ground/DeployLayer/Event2D疯子跑开" instance=ExtResource("14_k01ve")] position = Vector2(125, 46) +enter_affected_by_visibility = true [node name="楼梯蜡烛" type="Node2D" parent="Ground/DeployLayer" index="8"]