diff --git a/_game/game.gd b/_game/game.gd index 31f5fa9..d8b774f 100644 --- a/_game/game.gd +++ b/_game/game.gd @@ -1,8 +1,8 @@ extends Node2D func _ready() -> void: - #$L0_S0.switch_act_by_id(1) - $L1_S1.switch_act_by_id(1) + $L0_S0.switch_act_by_id(1) + #$L1_S1.switch_act_by_id(1) #$L1_S2.switch_act_by_id(1) #$L1_S3.switch_act_by_id(1) #$L1_S4.switch_act_by_id(1) diff --git a/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd new file mode 100644 index 0000000..ff62cdc --- /dev/null +++ b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd @@ -0,0 +1,23 @@ +extends SceneGuard + +##如果为-1,则不检查from_id,只检查to id +@export var from_id: int = -1 +##如果为-1,不检查,如果不为-1,则如果act manager的act changed的to act是此id,此guard通过。 +@export var to_id: int = -1 + +func check(signal_args: Array) -> bool: + if to_id < 0: + return true + + var has_from : bool = false + if from_id >= 0: + has_from = true + + if has_from: + if signal_args[0] == from_id and signal_args[1] == to_id: + return true + else: + if signal_args[1] == to_id: + return true + + return false diff --git a/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd.uid b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd.uid new file mode 100644 index 0000000..82ee042 --- /dev/null +++ b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd.uid @@ -0,0 +1 @@ +uid://dhs40v68rpfxr diff --git a/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.tres b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.tres new file mode 100644 index 0000000..d9e527e --- /dev/null +++ b/_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.tres @@ -0,0 +1,7 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://c7gm32jjs8wop"] + +[ext_resource type="Script" uid="uid://dhs40v68rpfxr" path="res://_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.gd" id="1_ae5sw"] + +[resource] +script = ExtResource("1_ae5sw") +to_id = 1 diff --git a/_scene/level1/l0_s0.tscn b/_scene/level1/l0_s0.tscn index 12c1031..80a0a7a 100644 --- a/_scene/level1/l0_s0.tscn +++ b/_scene/level1/l0_s0.tscn @@ -1,15 +1,21 @@ -[gd_scene load_steps=39 format=4 uid="uid://sursemsbf1lg"] +[gd_scene load_steps=50 format=4 uid="uid://sursemsbf1lg"] [ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="1_oyljl"] [ext_resource type="Script" uid="uid://bh066o84byplh" path="res://addons/reedscene/scene/ReedSceneID.gd" id="2_ggwu1"] [ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="3_7btev"] [ext_resource type="Script" uid="uid://ons77en82uls" path="res://addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd" id="4_pkqns"] [ext_resource type="Resource" uid="uid://bym4pb0ellj7b" path="res://_scene/scene_trigger_resource/default_switch.tres" id="5_wiv8n"] +[ext_resource type="Resource" uid="uid://c7gm32jjs8wop" path="res://_scene/guard/ActIDChanged/Guard_ActIDChangedCheck.tres" id="6_j5iwd"] +[ext_resource type="Script" uid="uid://dxj5vimigc651" path="res://addons/reedscene/scene/scene_trigger/base/SceneTriggerEffectPair.gd" id="7_0m4o0"] [ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="7_mu7ca"] [ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="8_0m4o0"] +[ext_resource type="Script" uid="uid://b1bgmb71bapws" path="res://addons/reedscene/scene/scene_trigger/base/SceneTriggerEffect.gd" id="8_1oohu"] [ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="9_1oohu"] +[ext_resource type="Script" uid="uid://bjstkg23cq6vq" path="res://addons/reedscene/scene/scene_trigger/STE_SwitchAct.gd" id="9_g4f48"] [ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="10_g4f48"] +[ext_resource type="Script" uid="uid://cwxwsfl1mx7kc" path="res://addons/reedscene/scene/scene_trigger/STT_Autoload.gd" id="10_o5yb1"] [ext_resource type="PackedScene" uid="uid://bflwr7cryd2l0" path="res://_camera/CameraAnchor.tscn" id="11_o5yb1"] +[ext_resource type="Script" uid="uid://cdprpen0jyr6d" path="res://addons/reedscene/scene/scene_trigger/STR_NodePath.gd" id="11_vhd7q"] [ext_resource type="Script" uid="uid://b4menkyub4ce7" path="res://addons/reedscene/prop/PropComponent.gd" id="12_vhd7q"] [ext_resource type="Script" uid="uid://di41kt2tj34c2" path="res://addons/reedscene/prop/StateManager.gd" id="13_5fsuc"] [ext_resource type="Script" uid="uid://7lml6d1t5xtq" path="res://addons/reedscene/prop/PropState.gd" id="14_rxcsc"] @@ -24,6 +30,35 @@ [ext_resource type="Script" uid="uid://8cqs3i8sr8b1" path="res://addons/reedscene/prop/Effect/ETT_Owner.gd" id="23_5h6d2"] [ext_resource type="TileSet" uid="uid://doepkfp83k0lb" path="res://_tileset/test.tres" id="24_uiy5k"] +[sub_resource type="Resource" id="Resource_5fsuc"] +script = ExtResource("9_g4f48") +func_name = &"player_follow_camera" +metadata/_custom_type_script = "uid://bjstkg23cq6vq" + +[sub_resource type="Resource" id="Resource_rxcsc"] +script = ExtResource("10_o5yb1") +autoload_name = &"GlobalEvent" +metadata/_custom_type_script = "uid://cwxwsfl1mx7kc" + +[sub_resource type="Resource" id="Resource_xtmay"] +script = ExtResource("7_0m4o0") +target = SubResource("Resource_rxcsc") +effect = Array[ExtResource("8_1oohu")]([SubResource("Resource_5fsuc")]) +metadata/_custom_type_script = "uid://dxj5vimigc651" + +[sub_resource type="Resource" id="Resource_vjg7j"] +script = ExtResource("11_vhd7q") +node_path = NodePath("../ActManager") +monitor_signal = &"act_changed" +metadata/_custom_type_script = "uid://cdprpen0jyr6d" + +[sub_resource type="Resource" id="Resource_j2lfw"] +script = ExtResource("4_pkqns") +trigger_register_conifg = SubResource("Resource_vjg7j") +guard = ExtResource("6_j5iwd") +trigger_effect_pairs = Array[ExtResource("7_0m4o0")]([SubResource("Resource_xtmay")]) +metadata/_custom_type_script = "uid://ons77en82uls" + [sub_resource type="Resource" id="Resource_hd3du"] script = ExtResource("9_1oohu") @@ -104,7 +139,7 @@ script = ExtResource("2_ggwu1") [node name="SceneManager" type="Node" parent="."] script = ExtResource("3_7btev") -quick_trigger = Array[ExtResource("4_pkqns")]([ExtResource("5_wiv8n")]) +quick_trigger = Array[ExtResource("4_pkqns")]([ExtResource("5_wiv8n"), SubResource("Resource_j2lfw")]) [node name="ActManager" type="Node" parent="."] script = ExtResource("7_mu7ca") diff --git a/_scene/level1/l1_s1_new.tscn b/_scene/level1/l1_s1_new.tscn new file mode 100644 index 0000000..334d65f --- /dev/null +++ b/_scene/level1/l1_s1_new.tscn @@ -0,0 +1,187 @@ +[gd_scene load_steps=39 format=4 uid="uid://d3x8beboy1e6y"] + +[ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="1_r2xfa"] +[ext_resource type="Script" uid="uid://bh066o84byplh" path="res://addons/reedscene/scene/ReedSceneID.gd" id="2_ddhjn"] +[ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="3_goq33"] +[ext_resource type="Script" uid="uid://ons77en82uls" path="res://addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd" id="4_2omg7"] +[ext_resource type="Resource" uid="uid://bym4pb0ellj7b" path="res://_scene/scene_trigger_resource/default_switch.tres" id="5_w8hrc"] +[ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="6_cs6a7"] +[ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="7_jnpq4"] +[ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="8_wm5n7"] +[ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="9_2a42s"] +[ext_resource type="PackedScene" uid="uid://bflwr7cryd2l0" path="res://_camera/CameraAnchor.tscn" id="10_vruw8"] +[ext_resource type="Script" uid="uid://b4menkyub4ce7" path="res://addons/reedscene/prop/PropComponent.gd" id="11_0uyop"] +[ext_resource type="Script" uid="uid://di41kt2tj34c2" path="res://addons/reedscene/prop/StateManager.gd" id="12_b7s42"] +[ext_resource type="Script" uid="uid://7lml6d1t5xtq" path="res://addons/reedscene/prop/PropState.gd" id="13_v43r7"] +[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/Effect/ReedPropEffect.gd" id="14_37hpe"] +[ext_resource type="Resource" uid="uid://bjjxh7g7iosla" path="res://_props/_camera/camera_anchor_disable.tres" id="15_k37mo"] +[ext_resource type="Resource" uid="uid://458r8rf7x02p" path="res://_props/_camera/camera_anchor_enable.tres" id="16_moktn"] +[ext_resource type="PackedScene" uid="uid://bonrls3iuhdqb" path="res://_props/_prefabs/player/player_trigger_volumn.tscn" id="17_lv0yi"] +[ext_resource type="Resource" uid="uid://dd4df6yjkeifa" path="res://_props/_prefabs/player/effect/player_trigger_volumn_disable.tres" id="18_ap5vp"] +[ext_resource type="Resource" uid="uid://b6iglvt36pm55" path="res://_props/_prefabs/player/effect/player_trigger_volumn_enable.tres" id="19_xbhm6"] +[ext_resource type="PackedScene" uid="uid://cxgcmdxlbwwjh" path="res://_props/_prefabs/player/player_respawn_point.tscn" id="20_kwhuh"] +[ext_resource type="Script" uid="uid://bf1qlvdbf8qdp" path="res://addons/reedscene/prop/Effect/EAT_CallFunc.gd" id="21_6kox0"] +[ext_resource type="Script" uid="uid://8cqs3i8sr8b1" path="res://addons/reedscene/prop/Effect/ETT_Owner.gd" id="22_ywu8v"] +[ext_resource type="TileSet" uid="uid://cup1q1upvp18h" path="res://_tileset/level1.tres" id="23_r2xfa"] + +[sub_resource type="Resource" id="Resource_hd3du"] +script = ExtResource("8_wm5n7") + +[sub_resource type="Resource" id="Resource_rpkwp"] +script = ExtResource("8_wm5n7") + +[sub_resource type="Resource" id="Resource_c5n0b"] +script = ExtResource("8_wm5n7") + +[sub_resource type="Resource" id="Resource_viktm"] +script = ExtResource("7_jnpq4") +prop_state_map = Dictionary[int, ExtResource("8_wm5n7")]({ +0: SubResource("Resource_hd3du"), +1: SubResource("Resource_rpkwp"), +2: SubResource("Resource_c5n0b") +}) + +[sub_resource type="Resource" id="Resource_4ake0"] +script = ExtResource("8_wm5n7") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_vb6ml"] +script = ExtResource("8_wm5n7") +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_vjpkl"] +script = ExtResource("8_wm5n7") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_a1vfv"] +script = ExtResource("7_jnpq4") +prop_state_map = Dictionary[int, ExtResource("8_wm5n7")]({ +0: SubResource("Resource_4ake0"), +1: SubResource("Resource_vb6ml"), +2: SubResource("Resource_vjpkl") +}) +metadata/_custom_type_script = "uid://fxpk2ot6otfh" + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_knjgm"] +size = Vector2(751, 408.5) + +[sub_resource type="Resource" id="Resource_ctwrc"] +script = ExtResource("21_6kox0") +func_name = &"pop_respawner" +metadata/_custom_type_script = "uid://bf1qlvdbf8qdp" + +[sub_resource type="Resource" id="Resource_0u6xi"] +script = ExtResource("22_ywu8v") + +[sub_resource type="Resource" id="Resource_r0e2c"] +script = ExtResource("14_37hpe") +effect_target_type = SubResource("Resource_0u6xi") +effect_apply_type = SubResource("Resource_ctwrc") +metadata/_custom_type_script = "uid://cdvgq0xqdbagk" + +[sub_resource type="Resource" id="Resource_hatj6"] +script = ExtResource("21_6kox0") +func_name = &"push_respawner" +metadata/_custom_type_script = "uid://bf1qlvdbf8qdp" + +[sub_resource type="Resource" id="Resource_o2v7x"] +script = ExtResource("22_ywu8v") + +[sub_resource type="Resource" id="Resource_ubvm0"] +script = ExtResource("14_37hpe") +effect_target_type = SubResource("Resource_o2v7x") +effect_apply_type = SubResource("Resource_hatj6") +metadata/_custom_type_script = "uid://cdvgq0xqdbagk" + +[node name="ReedScene" type="Node2D"] +script = ExtResource("1_r2xfa") +metadata/_custom_type_script = "uid://5e157vdk6175" + +[node name="[Invalid!]" type="Node" parent="."] +script = ExtResource("2_ddhjn") + +[node name="SceneManager" type="Node" parent="."] +script = ExtResource("3_goq33") +quick_trigger = Array[ExtResource("4_2omg7")]([ExtResource("5_w8hrc")]) + +[node name="ActManager" type="Node" parent="."] +script = ExtResource("6_cs6a7") +prop_state_map = Dictionary[int, ExtResource("7_jnpq4")]({ +0: SubResource("Resource_viktm"), +1: SubResource("Resource_a1vfv") +}) +init_act_id = 0 + +[node name="Props" type="Node2D" parent="."] +script = ExtResource("9_2a42s") + +[node name="CameraAnchor" parent="Props" instance=ExtResource("10_vruw8")] +position = Vector2(-41, 0) + +[node name="[Prop_0000]" type="Node" parent="Props/CameraAnchor"] +script = ExtResource("11_0uyop") +prop_id = 0 + +[node name="States" type="Node" parent="Props/CameraAnchor/[Prop_0000]"] +script = ExtResource("12_b7s42") + +[node name="[ID_0] Disable" type="Node" parent="Props/CameraAnchor/[Prop_0000]/States"] +script = ExtResource("13_v43r7") +state_id = 0 +effects = Array[ExtResource("14_37hpe")]([ExtResource("15_k37mo")]) + +[node name="[ID_1] Enable" type="Node" parent="Props/CameraAnchor/[Prop_0000]/States"] +script = ExtResource("13_v43r7") +state_id = 1 +effects = Array[ExtResource("14_37hpe")]([ExtResource("16_moktn")]) + +[node name="PlayerTriggerVolumn" parent="Props" instance=ExtResource("17_lv0yi")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Props/PlayerTriggerVolumn"] +position = Vector2(-39.5, 10.25) +shape = SubResource("RectangleShape2D_knjgm") +debug_color = Color(0.70308036, 0.46053094, 0.46591634, 0.41960785) + +[node name="[Prop_0001]" type="Node" parent="Props/PlayerTriggerVolumn"] +script = ExtResource("11_0uyop") +prop_id = 1 + +[node name="States" type="Node" parent="Props/PlayerTriggerVolumn/[Prop_0001]"] +script = ExtResource("12_b7s42") + +[node name="[ID_0] Disable" type="Node" parent="Props/PlayerTriggerVolumn/[Prop_0001]/States"] +script = ExtResource("13_v43r7") +state_id = 0 +effects = Array[ExtResource("14_37hpe")]([ExtResource("18_ap5vp")]) + +[node name="[ID_1] Enable" type="Node" parent="Props/PlayerTriggerVolumn/[Prop_0001]/States"] +script = ExtResource("13_v43r7") +state_id = 1 +effects = Array[ExtResource("14_37hpe")]([ExtResource("19_xbhm6")]) + +[node name="PlayerRespawnPoint" parent="Props" instance=ExtResource("20_kwhuh")] +position = Vector2(-339, 96) + +[node name="[Prop_0002]" type="Node" parent="Props/PlayerRespawnPoint"] +script = ExtResource("11_0uyop") +prop_id = 2 + +[node name="States" type="Node" parent="Props/PlayerRespawnPoint/[Prop_0002]"] +script = ExtResource("12_b7s42") + +[node name="[ID_0] Disable" type="Node" parent="Props/PlayerRespawnPoint/[Prop_0002]/States"] +script = ExtResource("13_v43r7") +state_id = 0 +effects = Array[ExtResource("14_37hpe")]([SubResource("Resource_r0e2c")]) + +[node name="[ID_1] Enable" type="Node" parent="Props/PlayerRespawnPoint/[Prop_0002]/States"] +script = ExtResource("13_v43r7") +state_id = 1 +effects = Array[ExtResource("14_37hpe")]([SubResource("Resource_ubvm0")]) + +[node name="TileMapLayer" type="TileMapLayer" parent="." groups=["GRAPABLE"]] +texture_filter = 1 +tile_map_data = PackedByteArray("AAD7/wIAAAAGAAMAAAD8/wIAAAACAAIAAAD9/wIAAAACAAIAAAD+/wIAAAACAAIAAAD//wIAAAACAAIAAAAAAAIAAAACAAIAAAABAAIAAAACAAIAAAACAAIAAAACAAIAAAADAAIAAAACAAIAAAD7//v/AAACAAIAAAD7//z/AAADAAIAAAD7//3/AAADAAIAAAD7//7/AAADAAIAAAD7////AAADAAIAAAD7/wAAAAADAAIAAAD7/wEAAAADAAIAAAD8//n/AAACAAIAAAD8//r/AAACAAIAAAD8//v/AAACAAIAAAD9//n/AAACAAIAAAD9//r/AAACAAIAAADu//H/AAACAAIAAADu//L/AAACAAIAAADu//P/AAACAAIAAADu//T/AAACAAIAAADu//X/AAACAAIAAADu//b/AAACAAIAAADu//f/AAACAAIAAADu//j/AAACAAIAAADu//n/AAACAAIAAADu//r/AAACAAIAAADu//v/AAACAAIAAADu//z/AAACAAIAAADu//3/AAACAAIAAADu//7/AAACAAIAAADu////AAACAAIAAADu/wAAAAACAAIAAADu/wEAAAACAAIAAADu/wIAAAACAAIAAADu/wMAAAACAAIAAADu/wQAAAACAAIAAADu/wUAAAACAAIAAADv//H/AAACAAIAAADv//L/AAACAAIAAADv//P/AAACAAIAAADv//T/AAACAAIAAADv//X/AAACAAIAAADv//b/AAACAAIAAADv//f/AAACAAIAAADv//j/AAACAAIAAADv//n/AAACAAIAAADv//r/AAACAAIAAADv//v/AAACAAIAAADv//z/AAACAAIAAADv//3/AAACAAIAAADv//7/AAACAAIAAADv////AAACAAIAAADv/wAAAAACAAIAAADv/wEAAAACAAIAAADv/wIAAAACAAIAAADv/wMAAAACAAIAAADv/wQAAAACAAIAAADv/wUAAAACAAIAAADw//H/AAACAAIAAADw//L/AAACAAIAAADw//P/AAACAAIAAADw//T/AAACAAIAAADw//X/AAACAAIAAADw//b/AAACAAIAAADw//f/AAACAAIAAADw//j/AAACAAIAAADw//n/AAACAAIAAADw//r/AAACAAIAAADw//v/AAACAAIAAADw//z/AAACAAIAAADw//3/AAACAAIAAADw//7/AAACAAIAAADw////AAACAAIAAADw/wAAAAACAAIAAADw/wEAAAACAAIAAADw/wIAAAACAAIAAADw/wMAAAACAAIAAADw/wQAAAACAAIAAADw/wUAAAACAAIAAADx//H/AAACAAIAAADx//L/AAACAAIAAADx//P/AAACAAIAAADx//T/AAACAAIAAADx//X/AAACAAIAAADx//b/AAACAAIAAADx//f/AAACAAIAAADx//j/AAACAAIAAADx//n/AAACAAIAAADx//r/AAACAAIAAADx//v/AAACAAIAAADx//z/AAACAAIAAADx//3/AAACAAIAAADx//7/AAACAAIAAADx////AAACAAIAAADx/wAAAAACAAIAAADx/wEAAAACAAIAAADx/wIAAAACAAIAAADx/wMAAAACAAIAAADx/wQAAAACAAIAAADx/wUAAAACAAIAAADy//H/AAACAAIAAADy//L/AAACAAIAAADy//P/AAACAAIAAADy//T/AAACAAIAAADy//X/AAACAAIAAADy//b/AAACAAIAAADy//f/AAACAAIAAADy//j/AAACAAIAAADy//n/AAACAAIAAADy//r/AAACAAIAAADy//v/AAACAAIAAADy//z/AAACAAIAAADy//3/AAACAAIAAADy//7/AAACAAIAAADy////AAACAAIAAADy/wAAAAACAAIAAADy/wEAAAACAAIAAADy/wIAAAACAAIAAADy/wMAAAACAAIAAADy/wQAAAACAAIAAADy/wUAAAACAAIAAADz//H/AAACAAIAAADz//L/AAACAAIAAADz//P/AAACAAIAAADz//T/AAACAAIAAADz//X/AAACAAIAAADz//b/AAACAAIAAADz//f/AAACAAIAAADz//j/AAACAAIAAADz//n/AAACAAIAAADz//r/AAACAAIAAADz//v/AAACAAIAAADz//z/AAACAAIAAADz//3/AAACAAIAAADz//7/AAACAAIAAADz////AAACAAIAAADz/wAAAAACAAIAAADz/wEAAAACAAIAAADz/wIAAAACAAIAAADz/wMAAAACAAIAAADz/wQAAAACAAIAAADz/wUAAAACAAIAAAD0//H/AAACAAIAAAD0//L/AAACAAIAAAD0//P/AAACAAIAAAD0//T/AAACAAIAAAD0//X/AAACAAIAAAD0//b/AAACAAIAAAD0//f/AAACAAIAAAD0//j/AAACAAIAAAD0//n/AAACAAIAAAD0//r/AAACAAIAAAD0//v/AAACAAIAAAD0//z/AAACAAIAAAD0//3/AAACAAIAAAD0//7/AAACAAIAAAD0////AAACAAIAAAD0/wAAAAACAAIAAAD0/wEAAAACAAIAAAD0/wIAAAACAAIAAAD0/wMAAAACAAIAAAD0/wQAAAACAAIAAAD0/wUAAAACAAIAAAD1//H/AAACAAIAAAD1//L/AAACAAIAAAD1//P/AAACAAIAAAD1//T/AAACAAIAAAD1//X/AAACAAIAAAD1//b/AAACAAIAAAD1//f/AAACAAIAAAD1//j/AAACAAIAAAD1//n/AAACAAIAAAD1//r/AAACAAIAAAD1//v/AAACAAIAAAD1//z/AAACAAIAAAD1//3/AAACAAIAAAD1//7/AAACAAIAAAD1////AAACAAIAAAD1/wAAAAACAAIAAAD1/wEAAAACAAIAAAD1/wIAAAACAAIAAAD1/wMAAAACAAIAAAD1/wQAAAACAAIAAAD1/wUAAAACAAIAAAD2//H/AAACAAIAAAD2//L/AAACAAIAAAD2//P/AAACAAIAAAD2//T/AAACAAIAAAD2//X/AAACAAIAAAD2//b/AAACAAIAAAD2//f/AAACAAIAAAD2//j/AAACAAIAAAD2//n/AAACAAIAAAD2//r/AAACAAIAAAD2//v/AAACAAIAAAD2//z/AAACAAIAAAD2//3/AAACAAIAAAD2//7/AAACAAIAAAD2////AAACAAIAAAD2/wAAAAACAAIAAAD2/wEAAAACAAIAAAD2/wIAAAACAAIAAAD2/wMAAAACAAIAAAD2/wQAAAACAAIAAAD2/wUAAAACAAIAAAD3//H/AAACAAIAAAD3//L/AAACAAIAAAD3//P/AAACAAIAAAD3//T/AAACAAIAAAD3//X/AAACAAIAAAD3//b/AAACAAIAAAD3//f/AAACAAIAAAD3//j/AAACAAIAAAD3//n/AAACAAIAAAD3//r/AAACAAIAAAD3//v/AAACAAIAAAD3//z/AAACAAIAAAD3//3/AAACAAIAAAD3//7/AAACAAIAAAD3////AAACAAIAAAD3/wAAAAACAAIAAAD3/wEAAAACAAIAAAD3/wIAAAACAAIAAAD3/wMAAAACAAIAAAD3/wQAAAACAAIAAAD3/wUAAAACAAIAAAD4//H/AAACAAIAAAD4//L/AAACAAIAAAD4//P/AAACAAIAAAD4//T/AAACAAIAAAD4//X/AAACAAIAAAD4//b/AAACAAIAAAD4//f/AAACAAIAAAD4//j/AAACAAIAAAD4//n/AAACAAIAAAD4//r/AAACAAIAAAD4//v/AAACAAIAAAD4//z/AAACAAIAAAD4//3/AAACAAIAAAD4//7/AAACAAIAAAD4////AAACAAIAAAD4/wAAAAACAAIAAAD4/wEAAAACAAIAAAD4/wIAAAACAAIAAAD4/wMAAAACAAIAAAD4/wQAAAACAAIAAAD4/wUAAAACAAIAAAD5//H/AAACAAIAAAD5//L/AAACAAIAAAD5//P/AAACAAIAAAD5//T/AAACAAIAAAD5//X/AAACAAIAAAD5//b/AAACAAIAAAD5//f/AAACAAIAAAD5//j/AAACAAIAAAD5//n/AAACAAIAAAD5//r/AAACAAIAAAD5//v/AAACAAIAAAD5//z/AAACAAIAAAD5//3/AAACAAIAAAD5//7/AAACAAIAAAD5////AAACAAIAAAD5/wAAAAACAAIAAAD5/wEAAAACAAIAAAD5/wIAAAACAAIAAAD5/wMAAAACAAIAAAD5/wQAAAACAAIAAAD5/wUAAAACAAIAAAD6//H/AAACAAIAAAD6//L/AAACAAIAAAD6//P/AAACAAIAAAD6//T/AAACAAIAAAD6//X/AAACAAIAAAD6//b/AAACAAIAAAD6//f/AAACAAIAAAD6//j/AAACAAIAAAD6//n/AAACAAIAAAD6//r/AAACAAIAAAD6//v/AAACAAIAAAD6//z/AAACAAIAAAD6//3/AAACAAIAAAD6//7/AAACAAIAAAD6////AAACAAIAAAD6/wAAAAACAAIAAAD6/wEAAAACAAIAAAD6/wIAAAACAAIAAAD6/wMAAAACAAIAAAD6/wQAAAACAAIAAAD6/wUAAAACAAIAAAD7/wMAAAACAAIAAAD7/wQAAAACAAIAAAD7/wUAAAACAAIAAAD7/wYAAAACAAIAAAD8/wMAAAACAAIAAAD8/wQAAAACAAIAAAD8/wUAAAACAAIAAAD8/wYAAAACAAIAAAD9/wMAAAACAAIAAAD9/wQAAAACAAIAAAD9/wUAAAACAAIAAAD9/wYAAAACAAIAAAD+/wMAAAACAAIAAAD+/wQAAAACAAIAAAD+/wUAAAACAAIAAAD+/wYAAAACAAIAAAD//wMAAAACAAIAAAD//wQAAAACAAIAAAD//wUAAAACAAIAAAD//wYAAAACAAIAAAAAAAMAAAACAAIAAAAAAAQAAAACAAIAAAAAAAUAAAACAAIAAAAAAAYAAAACAAIAAAABAAMAAAACAAIAAAABAAQAAAACAAIAAAABAAUAAAACAAIAAAABAAYAAAACAAIAAAACAAMAAAACAAIAAAACAAQAAAACAAIAAAACAAUAAAACAAIAAAACAAYAAAACAAIAAAADAAMAAAACAAIAAAADAAQAAAACAAIAAAADAAUAAAACAAIAAAADAAYAAAACAAIAAADy/wYAAAACAAIAAADy/wcAAAACAAIAAADy/wgAAAACAAIAAADy/wkAAAACAAIAAADy/woAAAACAAIAAADy/wsAAAACAAIAAADz/wYAAAACAAIAAADz/wcAAAACAAIAAADz/wgAAAACAAIAAADz/wkAAAACAAIAAADz/woAAAACAAIAAADz/wsAAAACAAIAAAD0/wYAAAACAAIAAAD0/wcAAAACAAIAAAD0/wgAAAACAAIAAAD0/wkAAAACAAIAAAD0/woAAAACAAIAAAD0/wsAAAACAAIAAAD1/wYAAAACAAIAAAD1/wcAAAACAAIAAAD1/wgAAAACAAIAAAD1/wkAAAACAAIAAAD1/woAAAACAAIAAAD1/wsAAAACAAIAAAD2/wYAAAACAAIAAAD2/wcAAAACAAIAAAD2/wgAAAACAAIAAAD2/wkAAAACAAIAAAD2/woAAAACAAIAAAD2/wsAAAACAAIAAAD3/wYAAAACAAIAAAD3/wcAAAACAAIAAAD3/wgAAAACAAIAAAD3/wkAAAACAAIAAAD3/woAAAACAAIAAAD3/wsAAAACAAIAAAD4/wYAAAACAAIAAAD4/wcAAAACAAIAAAD4/wgAAAACAAIAAAD4/wkAAAACAAIAAAD4/woAAAACAAIAAAD4/wsAAAACAAIAAAD5/wYAAAACAAIAAAD5/wcAAAACAAIAAAD5/wgAAAACAAIAAAD5/wkAAAACAAIAAAD5/woAAAACAAIAAAD5/wsAAAACAAIAAAD6/wYAAAACAAIAAAD6/wcAAAACAAIAAAD6/wgAAAACAAIAAAD6/wkAAAACAAIAAAD6/woAAAACAAIAAAD6/wsAAAACAAIAAAD7/wcAAAACAAIAAAD7/wgAAAACAAIAAAD7/wkAAAACAAIAAAD7/woAAAACAAIAAAD7/wsAAAACAAIAAAD8/wcAAAACAAIAAAD8/wgAAAACAAIAAAD8/wkAAAACAAIAAAD8/woAAAACAAIAAAD8/wsAAAACAAIAAAD9/wcAAAACAAIAAAD9/wgAAAACAAIAAAD9/wkAAAACAAIAAAD9/woAAAACAAIAAAD9/wsAAAACAAIAAAD+/wcAAAACAAIAAAD+/wgAAAACAAIAAAD+/wkAAAACAAIAAAD+/woAAAACAAIAAAD+/wsAAAACAAIAAAD//wcAAAACAAIAAAD//wgAAAACAAIAAAD//wkAAAACAAIAAAD//woAAAACAAIAAAD//wsAAAACAAIAAAAAAAcAAAACAAIAAAAAAAgAAAACAAIAAAAAAAkAAAACAAIAAAAAAAoAAAACAAIAAAAAAAsAAAACAAIAAAABAAcAAAACAAIAAAABAAgAAAACAAIAAAABAAkAAAACAAIAAAABAAoAAAACAAIAAAABAAsAAAACAAIAAAACAAcAAAACAAIAAAACAAgAAAACAAIAAAACAAkAAAACAAIAAAACAAoAAAACAAIAAAACAAsAAAACAAIAAAADAAcAAAACAAIAAAADAAgAAAACAAIAAAADAAkAAAACAAIAAAADAAoAAAACAAIAAAADAAsAAAACAAIAAAD7/+7/AAACAAIAAAD7/+//AAACAAIAAAD7//D/AAACAAIAAAD7//H/AAACAAIAAAD7//L/AAACAAIAAAD7//P/AAACAAIAAAD7//T/AAACAAIAAAD7//X/AAACAAIAAAD7//b/AAACAAIAAAD7//f/AAACAAIAAAD7//j/AAACAAIAAAD7//n/AAACAAIAAAD7//r/AAACAAIAAAD8/+7/AAACAAIAAAD8/+//AAACAAIAAAD8//D/AAACAAIAAAD8//H/AAACAAIAAAD8//L/AAACAAIAAAD8//P/AAACAAIAAAD8//T/AAACAAIAAAD8//X/AAACAAIAAAD8//b/AAACAAIAAAD8//f/AAACAAIAAAD8//j/AAACAAIAAAD9/+7/AAACAAIAAAD9/+//AAACAAIAAAD9//D/AAACAAIAAAD9//H/AAACAAIAAAD9//L/AAACAAIAAAD9//P/AAACAAIAAAD9//T/AAACAAIAAAD9//X/AAACAAIAAAD9//b/AAACAAIAAAD9//f/AAACAAIAAAD9//j/AAACAAIAAAA=") +tile_set = ExtResource("23_r2xfa") diff --git a/_scene/scene_trigger_resource/default_switch.tres b/_scene/scene_trigger_resource/default_switch.tres index b1957b6..8fad92c 100644 --- a/_scene/scene_trigger_resource/default_switch.tres +++ b/_scene/scene_trigger_resource/default_switch.tres @@ -1,6 +1,5 @@ -[gd_resource type="Resource" script_class="SceneTrigger" load_steps=20 format=3 uid="uid://bym4pb0ellj7b"] +[gd_resource type="Resource" script_class="SceneTrigger" load_steps=19 format=3 uid="uid://bym4pb0ellj7b"] -[ext_resource type="Script" uid="uid://baamspwt4rm4r" path="res://addons/reedscene/scene/guard.gd" id="1_ebfhi"] [ext_resource type="Script" uid="uid://ons77en82uls" path="res://addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd" id="2_cq8o1"] [ext_resource type="Script" uid="uid://dxj5vimigc651" path="res://addons/reedscene/scene/scene_trigger/base/SceneTriggerEffectPair.gd" id="3_m0qh3"] [ext_resource type="Script" uid="uid://b1bgmb71bapws" path="res://addons/reedscene/scene/scene_trigger/base/SceneTriggerEffect.gd" id="4_g7ixm"] diff --git a/_shared/GlobalEvent.gd b/_shared/GlobalEvent.gd index 698bc24..094edf9 100644 --- a/_shared/GlobalEvent.gd +++ b/_shared/GlobalEvent.gd @@ -35,26 +35,21 @@ func get_player_controller() -> PlayerController: return _cached_player_controller func player_follow_camera() -> void: - if not _cached_player:return - var cam := ReedCameraSystem.get_current_camera_pointer() as CameraPointer if not cam:return var follower := cam.get_tool_by_type(CameraPointer.ToolType.FOLLOWER) if not follower:return - follower.register_follower(_cached_player) _camera_follower = follower + + if not _cached_player:return + follower.register_follower(_cached_player) func player_unfollow_camera() -> void: - var cam := ReedCameraSystem.get_current_camera_pointer() as CameraPointer - if not cam:return - - var follower := cam.get_tool_by_type(CameraPointer.ToolType.FOLLOWER) - if not follower:return - - follower.unregister_follower() - _camera_follower = null + if _camera_follower: + _camera_follower.unregister_follower() + _camera_follower = null ## 外部用于监听Player死亡 func boradcast_player_dead_event(player:Player) -> void: diff --git a/_tileset/level1.tres b/_tileset/level1.tres new file mode 100644 index 0000000..6ff6488 --- /dev/null +++ b/_tileset/level1.tres @@ -0,0 +1,79 @@ +[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://cup1q1upvp18h"] + +[ext_resource type="Texture2D" uid="uid://cew1x7g5aaa3j" path="res://_asset/ksw/basicTile.png" id="1_ln1fl"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ln1fl"] +texture = ExtResource("1_ln1fl") +texture_region_size = Vector2i(96, 96) +1:1/0 = 0 +2:1/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +3:3/0 = 0 +3:1/0 = 0 +1:2/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +8:1/0 = 0 +8:2/0 = 0 +8:3/0 = 0 +7:3/0 = 0 +6:3/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +12:1/0 = 0 +9:5/0 = 0 +10:6/0 = 0 +11:5/0 = 0 +10:5/0 = 0 +9:6/0 = 0 +11:6/0 = 0 +7:5/0 = 0 +7:6/0 = 0 +6:6/0 = 0 +6:5/0 = 0 +3:5/0 = 0 +3:6/0 = 0 +4:6/0 = 0 +4:5/0 = 0 +1:5/0 = 0 +1:6/0 = 0 +1:7/0 = 0 +1:9/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +2:9/0 = 0 +1:8/0 = 0 +4:9/0 = 0 +4:10/0 = 0 +5:10/0 = 0 +5:9/0 = 0 +5:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +8:9/0 = 0 +8:10/0 = 0 +7:9/0 = 0 +6:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +11:10/0 = 0 +10:10/0 = 0 +9:9/0 = 0 +9:10/0 = 0 +10:8/0 = 0 +11:8/0 = 0 +8:5/0 = 0 +9:4/0 = 0 +11:4/0 = 0 +7:4/0 = 0 +3:4/0 = 0 +1:4/0 = 0 + +[resource] +tile_size = Vector2i(96, 96) +sources/0 = SubResource("TileSetAtlasSource_ln1fl") diff --git a/addons/limboai/bin/~liblimboai.windows.editor.x86_64.dll b/addons/limboai/bin/~liblimboai.windows.editor.x86_64.dll new file mode 100644 index 0000000..7131bab Binary files /dev/null and b/addons/limboai/bin/~liblimboai.windows.editor.x86_64.dll differ diff --git a/addons/reedcamera/scripts/camera_tools/CameraFollowController.gd b/addons/reedcamera/scripts/camera_tools/CameraFollowController.gd index 1e5e31f..b21c3ea 100644 --- a/addons/reedcamera/scripts/camera_tools/CameraFollowController.gd +++ b/addons/reedcamera/scripts/camera_tools/CameraFollowController.gd @@ -11,6 +11,10 @@ const _DEBUG_TOOL := preload("res://addons/reedcamera/scripts/camera_tools/DeadZ @export var enabled_follow: bool = true @export var follow_speed: float = 600.0 # 世界单位 / 秒 @export var follow_lerp := 0.12 # 0~1,越大越“跟手”,越小越“蔚蓝感”的滞后 +@export_subgroup("Follow Dynamic Speed") +@export var min_speed_scale := 0.4 # 贴近死区时 +@export var max_speed_scale := 2.0 # 远离死区时 +@export var max_offset_ratio := 1.0 # offset 达到 1 个 dead_zone 时为最大速率 ##TODO:后续添加一下Runtime的修改逻辑 @export_group("Debug") @@ -110,9 +114,20 @@ func update_follow(delta: float) -> void: _current_state = State.CHASING + #var move_dir := offset.normalized() + #var world_velocity := (move_dir * follow_speed) / cam.zoom + + var offset_len := offset.length() + var dead_len := dead_half.length() + + # 0~1 的距离比例 + var t := clamp(offset_len / (dead_len * max_offset_ratio), 0.0, 1.0) + + # 距离越远,速度越快 + var speed_scale := lerp(min_speed_scale, max_speed_scale, t) + var move_dir := offset.normalized() - var world_velocity := (move_dir * follow_speed) / cam.zoom - ##如果存在move_dir,则我们认为相机需要chasing player + var world_velocity : Vector2 = (move_dir * follow_speed * speed_scale) / cam.zoom var desired_pos := _final_position + world_velocity * delta diff --git a/addons/reedscene/scene/SceneManager.gd b/addons/reedscene/scene/SceneManager.gd index a4ce4b0..0d96369 100644 --- a/addons/reedscene/scene/SceneManager.gd +++ b/addons/reedscene/scene/SceneManager.gd @@ -54,48 +54,6 @@ func _bind_quick_trigger() -> void: func(...args): _on_trigger_fired(st, args) ) - #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: - #return -# - #var s: StringName = trigger.monitor_signal - #if not prop.has_signal(s): - #push_error("Prop has no signal: %s" % trigger.monitor_signal) - #return -# - #prop.connect( - #trigger.monitor_signal, - #func(...args): - #_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: @@ -115,13 +73,6 @@ func _on_trigger_fired(trigger: SceneTrigger, signal_args: Array) -> void: for j in exs: var ex := j as SceneTriggerEffect ex.apply_effect(t) - #var target_act_id: int = trigger.target_act_id - #var trans_overwrite: int = trigger.trans_overwrite - # - #if target_act_id < 0: - #return - # - #_act_manager.switch_act_with_id(target_act_id,trans_overwrite) func switch_act_with_id(id: int,trans_overwrite:int = 0) -> void: _act_manager.switch_act_with_id(id,trans_overwrite) diff --git a/addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd b/addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd index ca3e191..fa7f76d 100644 --- a/addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd +++ b/addons/reedscene/scene/scene_trigger/base/SceneTrigger.gd @@ -3,15 +3,13 @@ class_name SceneTrigger extends Resource ##绑定哪个Node的哪个函数作为此Trigger的Register。 @export var trigger_register_conifg: SceneTriggerRegister ##Guard是一个保护项,如果某个Trigger触发后但因为某些条件并不想被执行,可以使用guard进行保护 -@export var guards: Array[SceneGuard] +@export var guard: SceneGuard ##当某个Trigger被激活时,可以应用任意多个Effect,Effect会按序执行列 @export var trigger_effect_pairs: Array[SceneTriggerEffectPair] var _owner: Node func can_trigger(args: Array) -> bool: - for g in guards: - if not g.check(args): - return false - + if not guard.check(args): + return false return true