插件新特性

This commit is contained in:
Reed 2026-01-07 18:33:34 +08:00
parent 5b95aee5d8
commit 5cb4d9f3d0
7 changed files with 46 additions and 3 deletions

View File

@ -1,9 +1,11 @@
[gd_scene load_steps=26 format=4 uid="uid://cd88ydqhdo28"]
[gd_scene load_steps=28 format=4 uid="uid://cd88ydqhdo28"]
[ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="1_20208"]
[ext_resource type="Script" uid="uid://bh066o84byplh" path="res://addons/reedscene/scene/ReedSceneID.gd" id="2_wkfms"]
[ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="3_rlimy"]
[ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="4_bq6n3"]
[ext_resource type="Script" uid="uid://ons77en82uls" path="res://addons/reedscene/scene/SceneTrigger.gd" id="4_wkfms"]
[ext_resource type="Resource" uid="uid://gmaitie4ys4h" path="res://_shared/QuickTriggerConfig/player_entered_act_1.tres" id="5_rlimy"]
[ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="5_ubvm0"]
[ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="6_r0e2c"]
[ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="7_hd3du"]
@ -62,6 +64,7 @@ script = ExtResource("2_wkfms")
[node name="SceneManager" type="Node" parent="."]
script = ExtResource("3_rlimy")
quick_trigger = Array[ExtResource("4_wkfms")]([ExtResource("5_rlimy")])
[node name="ActManager" type="Node" parent="."]
script = ExtResource("4_bq6n3")

View File

@ -6,7 +6,7 @@
[ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="4_10cyl"]
[ext_resource type="Script" uid="uid://ons77en82uls" path="res://addons/reedscene/scene/SceneTrigger.gd" id="4_qrebp"]
[ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="5_0xms0"]
[ext_resource type="Resource" uid="uid://cstjpy2eh8mck" path="res://_shared/QuickTriggerConfig/prop1_player_entered_act_1.tres" id="5_10cyl"]
[ext_resource type="Resource" uid="uid://gmaitie4ys4h" path="res://_shared/QuickTriggerConfig/player_entered_act_1.tres" id="5_qrebp"]
[ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="6_agny0"]
[ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="7_8ou3l"]
[ext_resource type="PackedScene" uid="uid://bflwr7cryd2l0" path="res://_shared/camera/CameraAnchor.tscn" id="8_dq7pn"]
@ -63,7 +63,7 @@ script = ExtResource("2_of0lw")
[node name="SceneManager" type="Node" parent="."]
script = ExtResource("3_32vl4")
quick_trigger = Array[ExtResource("4_qrebp")]([ExtResource("5_10cyl")])
quick_trigger = Array[ExtResource("4_qrebp")]([ExtResource("5_qrebp")])
[node name="ActManager" type="Node" parent="."]
script = ExtResource("4_10cyl")

View File

@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="NodePathSceneTrigger" load_steps=3 format=3 uid="uid://gmaitie4ys4h"]
[ext_resource type="Script" uid="uid://baamspwt4rm4r" path="res://addons/reedscene/scene/guard.gd" id="1_idvg7"]
[ext_resource type="Script" uid="uid://cvtkkcio4eeod" path="res://addons/reedscene/scene/NodePathSceneTrigger.gd" id="2_4sckh"]
[resource]
script = ExtResource("2_4sckh")
path = NodePath("../Props/PlayerTriggerVolumn")
target_act_id = 1
monitor_signal = &"player_entered"
metadata/_custom_type_script = "uid://cvtkkcio4eeod"

View File

@ -0,0 +1,3 @@
class_name NodePathSceneTrigger extends SceneTrigger
@export var path: NodePath

View File

@ -0,0 +1 @@
uid://cvtkkcio4eeod

View File

@ -36,7 +36,10 @@ func _bind_quick_trigger() -> void:
for qt in quick_trigger:
if qt is PropIDSceneTrigger:
_bind_prop_id_trigger(qt)
elif qt is NodePathSceneTrigger:
_bind_node_path_trigger(qt)
## 通过Prop id来绑定signal
func _bind_prop_id_trigger(trigger: PropIDSceneTrigger) -> void:
var prop : Node = _props.get(trigger.prop_id).get_parent()
if prop == null:
@ -53,6 +56,28 @@ func _bind_prop_id_trigger(trigger: PropIDSceneTrigger) -> void:
_on_trigger_fired(trigger, args)
)
## 通过NodePath来绑定signal
func _bind_node_path_trigger(trigger: NodePathSceneTrigger) -> void:
if trigger.path.is_empty():
return
var n : Node = self.get_node_or_null(trigger.path)
if n == null:
return
var s: StringName = trigger.monitor_signal
if not n.has_signal(s):
push_error("Prop has no signal: %s" % trigger.monitor_signal)
return
n.connect(
trigger.monitor_signal,
func(...args):
_on_trigger_fired(trigger, args)
)
## 当信号触发
func _on_trigger_fired(trigger: SceneTrigger, signal_args: Array) -> void:
if not trigger.can_trigger(signal_args):
return