diff --git a/_game/LevelDemonstration.tscn1273541177.tmp b/_game/LevelDemonstration.tscn1273541177.tmp new file mode 100644 index 0000000..44de47d --- /dev/null +++ b/_game/LevelDemonstration.tscn1273541177.tmp @@ -0,0 +1,47 @@ +[gd_scene load_steps=12 format=3 uid="uid://bj2318o3y68x2"] + +[ext_resource type="Script" uid="uid://ds6jy3s0hhmwt" path="res://_game/DemoScript.gd" id="1_2tycc"] +[ext_resource type="PackedScene" uid="uid://cvqehvdjpoar4" path="res://_player/player_controller.tscn" id="2_gslp7"] +[ext_resource type="PackedScene" uid="uid://gwhff4qaouxy" path="res://_player/Avatar.tscn" id="3_6jw57"] +[ext_resource type="PackedScene" uid="uid://bt55vmoc83l6g" path="res://_game/scenes/l_1_s_1.tscn" id="4_6jw57"] +[ext_resource type="PackedScene" uid="uid://c6and5mqr3wv1" path="res://_game/scenes/l_1_s_2.tscn" id="5_2t6pm"] +[ext_resource type="PackedScene" uid="uid://0sivr6aig7gm" path="res://_game/scenes/l_1_s_3.tscn" id="6_xkd7q"] +[ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="6_xotud"] +[ext_resource type="Script" uid="uid://bh066o84byplh" path="res://addons/reedscene/scene/ReedSceneID.gd" id="7_2tycc"] +[ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="8_3ihdv"] +[ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="9_hc6q0"] +[ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="10_mwuv1"] + +[node name="Game" type="Node2D"] +script = ExtResource("1_2tycc") + +[node name="PlayerController" parent="." node_paths=PackedStringArray("auto_controlled_avatar") instance=ExtResource("2_gslp7")] +auto_controlled_avatar = NodePath("../Avatar") + +[node name="Avatar" parent="." instance=ExtResource("3_6jw57")] +position = Vector2(283, 253) +collision_mask = 4 + +[node name="l1_s1" parent="." instance=ExtResource("4_6jw57")] + +[node name="l1_s2" parent="." instance=ExtResource("5_2t6pm")] +debug_log = true + +[node name="l1_s3" parent="." instance=ExtResource("6_xkd7q")] +debug_log = true + +[node name="ReedScene" type="Node2D" parent="."] +script = ExtResource("6_xotud") +metadata/_custom_type_script = "uid://5e157vdk6175" + +[node name="[Invalid!]" type="Node" parent="ReedScene"] +script = ExtResource("7_2tycc") + +[node name="SceneManager" type="Node" parent="ReedScene"] +script = ExtResource("8_3ihdv") + +[node name="ActManager" type="Node" parent="ReedScene"] +script = ExtResource("9_hc6q0") + +[node name="Props" type="Node2D" parent="ReedScene"] +script = ExtResource("10_mwuv1") diff --git a/_game/scenes/l_1_s_1.tscn b/_game/scenes/l_1_s_1.tscn index 6311870..02f57ab 100644 --- a/_game/scenes/l_1_s_1.tscn +++ b/_game/scenes/l_1_s_1.tscn @@ -222,7 +222,7 @@ script = ExtResource("9_648qh") state_id = 1 effects = Array[ExtResource("12_fyfyw")]([SubResource("Resource_1vufk")]) -[node name="l1_s1_tile" parent="." instance=ExtResource("10_25twt")] +[node name="l1_s1_tile" parent="." groups=["GRAPABLE"] instance=ExtResource("10_25twt")] tile_map_data = PackedByteArray("AAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABQAAAAAAAAAAAAAABUAAAAAAAAAAAAAABYAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAABAAsAAAAAAAAAAAABAAwAAAAAAAAAAAABABQAAAAAAAAAAAABABUAAAAAAAAAAAABABYAAAAAAAAAAAACABQAAAAAAAAAAAACABUAAAAAAAAAAAACABYAAAAAAAAAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADABQAAAAAAAAAAAADABUAAAAAAAAAAAADABYAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEABQAAAAAAAAAAAAEABUAAAAAAAAAAAAEABYAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFABQAAAAAAAAAAAAFABUAAAAAAAAAAAAFABYAAAAAAAAAAAAGABQAAAAAAAAAAAAGABUAAAAAAAAAAAAGABYAAAAAAAAAAAAHABQAAAAAAAAAAAAHABUAAAAAAAAAAAAHABYAAAAAAAAAAAAIABQAAAAAAAAAAAAIABUAAAAAAAAAAAAIABYAAAAAAAAAAAAJABQAAAAAAAAAAAAJABUAAAAAAAAAAAAJABYAAAAAAAAAAAAKABQAAAAAAAAAAAAKABUAAAAAAAAAAAAKABYAAAAAAAAAAAALABQAAAAAAAAAAAALABUAAAAAAAAAAAALABYAAAAAAAAAAAAMABQAAAAAAAAAAAAMABUAAAAAAAAAAAAMABYAAAAAAAAAAAANABQAAAAAAAAAAAANABUAAAAAAAAAAAANABYAAAAAAAAAAAAOABQAAAAAAAAAAAAOABUAAAAAAAAAAAAOABYAAAAAAAAAAAAPABQAAAAAAAAAAAAPABUAAAAAAAAAAAAPABYAAAAAAAAAAAAQABQAAAAAAAAAAAAQABUAAAAAAAAAAAAQABYAAAAAAAAAAAARABQAAAAAAAAAAAARABUAAAAAAAAAAAARABYAAAAAAAAAAAASABQAAAAAAAAAAAASABUAAAAAAAAAAAASABYAAAAAAAAAAAATABQAAAAAAAAAAAATABUAAAAAAAAAAAATABYAAAAAAAAAAAAUABQAAAAAAAAAAAAUABUAAAAAAAAAAAAUABYAAAAAAAAAAAAVABQAAAAAAAAAAAAVABUAAAAAAAAAAAAVABYAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAIAAAAAAAAAAAAHAAAAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAIAAAAAAAAAAAAJAAAAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAKAAAAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAIAAAAAAAAAAAALAAAAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAIAAAAAAAAAAAANAAAAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAAOAAAAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAcABQAAAAAAAAAAAAcABUAAAAAAAAAAAAcABYAAAAAAAAAAAAdABQAAAAAAAAAAAAdABUAAAAAAAAAAAAdABYAAAAAAAAAAAAeABQAAAAAAAAAAAAeABUAAAAAAAAAAAAeABYAAAAAAAAAAAAfABQAAAAAAAAAAAAfABUAAAAAAAAAAAAfABYAAAAAAAAAAAAgABQAAAAAAAAAAAAgABUAAAAAAAAAAAAgABYAAAAAAAAAAAAhABQAAAAAAAAAAAAhABUAAAAAAAAAAAAhABYAAAAAAAAAAAAiABQAAAAAAAAAAAAiABUAAAAAAAAAAAAiABYAAAAAAAAAAAAjABQAAAAAAAAAAAAjABUAAAAAAAAAAAAjABYAAAAAAAAAAAAkABQAAAAAAAAAAAAkABUAAAAAAAAAAAAkABYAAAAAAAAAAAAlABQAAAAAAAAAAAAlABUAAAAAAAAAAAAlABYAAAAAAAAAAAAmABQAAAAAAAAAAAAmABUAAAAAAAAAAAAmABYAAAAAAAAAAAAnABQAAAAAAAAAAAAnABUAAAAAAAAAAAAnABYAAAAAAAAAAAAoABQAAAAAAAAAAAAoABUAAAAAAAAAAAAoABYAAAAAAAAAAAApABQAAAAAAAAAAAApABUAAAAAAAAAAAApABYAAAAAAAAAAAAWABQAAAAAAAAAAAAWABUAAAAAAAAAAAAWABYAAAAAAAAAAAAbABQAAAAAAAAAAAAbABUAAAAAAAAAAAAbABYAAAAAAAAAAAAXABQAAAAAAAAAAAAXABUAAAAAAAAAAAAXABYAAAAAAAAAAAAYABQAAAAAAAAAAAAYABUAAAAAAAAAAAAYABYAAAAAAAAAAAAZABQAAAAAAAAAAAAZABUAAAAAAAAAAAAZABYAAAAAAAAAAAAaABQAAAAAAAAAAAAaABUAAAAAAAAAAAAaABYAAAAAAAAAAAAPAAAAAAAAAAAAAAAPAAEAAAAAAAAAAAAPAAIAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAIAAAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAAAAAAAAAARAAIAAAAAAAAAAAASAAAAAAAAAAAAAAASAAEAAAAAAAAAAAASAAIAAAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAIAAAAAAAAAAAAVAAAAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAIAAAAAAAAAAAAWAAAAAAAAAAAAAAAWAAEAAAAAAAAAAAAWAAIAAAAAAAAAAAAXAAAAAAAAAAAAAAAXAAEAAAAAAAAAAAAXAAIAAAAAAAAAAAAYAAAAAAAAAAAAAAAYAAEAAAAAAAAAAAAYAAIAAAAAAAAAAAAZAAAAAAAAAAAAAAAZAAEAAAAAAAAAAAAZAAIAAAAAAAAAAAAaAAAAAAAAAAAAAAAaAAEAAAAAAAAAAAAaAAIAAAAAAAAAAAAbAAAAAAAAAAAAAAAbAAEAAAAAAAAAAAAbAAIAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAEAAAAAAAAAAAAcAAIAAAAAAAAAAAAdAAAAAAAAAAAAAAAdAAEAAAAAAAAAAAAdAAIAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAEAAAAAAAAAAAAeAAIAAAAAAAAAAAAfAAAAAAAAAAAAAAAfAAEAAAAAAAAAAAAfAAIAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAEAAAAAAAAAAAAgAAIAAAAAAAAAAAAhAAAAAAAAAAAAAAAhAAEAAAAAAAAAAAAhAAIAAAAAAAAAAAAiAAAAAAAAAAAAAAAiAAEAAAAAAAAAAAAiAAIAAAAAAAAAAAAjAAAAAAAAAAAAAAAjAAEAAAAAAAAAAAAjAAIAAAAAAAAAAAAkAAAAAAAAAAAAAAAkAAEAAAAAAAAAAAAkAAIAAAAAAAAAAAAlAAAAAAAAAAAAAAAlAAEAAAAAAAAAAAAlAAIAAAAAAAAAAAAmAAAAAAAAAAAAAAAmAAEAAAAAAAAAAAAmAAIAAAAAAAAAAAAnAAAAAAAAAAAAAAAnAAEAAAAAAAAAAAAnAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAoAAEAAAAAAAAAAAAoAAIAAAAAAAAAAAApAAAAAAAAAAAAAAApAAEAAAAAAAAAAAApAAIAAAAAAAAAAAAoAAMAAAAAAAAAAAAoAAQAAAAAAAAAAAAoAAUAAAAAAAAAAAAoAAYAAAAAAAAAAAAoAAcAAAAAAAAAAAAoAAgAAAAAAAAAAAAoAAkAAAAAAAAAAAAoAAoAAAAAAAAAAAAoAAsAAAAAAAAAAAAoAAwAAAAAAAAAAAApAAMAAAAAAAAAAAApAAQAAAAAAAAAAAApAAUAAAAAAAAAAAApAAYAAAAAAAAAAAApAAcAAAAAAAAAAAApAAgAAAAAAAAAAAApAAkAAAAAAAAAAAApAAoAAAAAAAAAAAApAAsAAAAAAAAAAAApAAwAAAAAAAAAAAA=") [node name="Coin" parent="." instance=ExtResource("11_1t0dx")] diff --git a/_game/scenes/l_1_s_2.tscn b/_game/scenes/l_1_s_2.tscn index 785e9f0..5b0fec3 100644 --- a/_game/scenes/l_1_s_2.tscn +++ b/_game/scenes/l_1_s_2.tscn @@ -183,6 +183,7 @@ metadata/_custom_type_script = "uid://jeybblac0kg2" [node name="SceneStaticCamera" parent="Props" instance=ExtResource("14_5navl")] position = Vector2(981, 183) +draw_limits = true [node name="[Prop_0001]" type="Node" parent="Props/SceneStaticCamera"] script = ExtResource("7_5navl") @@ -201,7 +202,7 @@ script = ExtResource("9_meuxg") state_id = 1 effects = Array[ExtResource("12_jhhb1")]([SubResource("Resource_1vufk")]) -[node name="l1_s2_tile" parent="." instance=ExtResource("10_xs4uh")] +[node name="l1_s2_tile" parent="." groups=["GRAPABLE"] instance=ExtResource("10_xs4uh")] tile_map_data = PackedByteArray("AAApABQAAAAAAAAAAAApABUAAAAAAAAAAAApABYAAAAAAAAAAAAqABQAAAAAAAAAAAAqABUAAAAAAAAAAAAqABYAAAAAAAAAAAArAAwAAAAAAAAAAAArABQAAAAAAAAAAAArABUAAAAAAAAAAAArABYAAAAAAAAAAAAsAAkAAAAAAAAAAAAsAAoAAAAAAAAAAAAsAAsAAAAAAAAAAAAsAAwAAAAAAAAAAAAsABQAAAAAAAAAAAAsABUAAAAAAAAAAAAsABYAAAAAAAAAAAAtAAkAAAAAAAAAAAAtAAoAAAAAAAAAAAAtAAsAAAAAAAAAAAAtAAwAAAAAAAAAAAAtABQAAAAAAAAAAAAtABUAAAAAAAAAAAAtABYAAAAAAAAAAAAuAAkAAAAAAAAAAAAuAAoAAAAAAAAAAAAuAAsAAAAAAAAAAAAuAAwAAAAAAAAAAAAuABQAAAAAAAAAAAAuABUAAAAAAAAAAAAuABYAAAAAAAAAAAAvABQAAAAAAAAAAAAvABUAAAAAAAAAAAAvABYAAAAAAAAAAAAwABQAAAAAAAAAAAAwABUAAAAAAAAAAAAwABYAAAAAAAAAAAAxABQAAAAAAAAAAAAxABUAAAAAAAAAAAAxABYAAAAAAAAAAAAyABQAAAAAAAAAAAAyABUAAAAAAAAAAAAyABYAAAAAAAAAAAAzABQAAAAAAAAAAAAzABUAAAAAAAAAAAAzABYAAAAAAAAAAAArAAsAAAAAAAAAAAAqAAwAAAAAAAAAAABQABMAAAAAAAAAAABQABQAAAAAAAAAAABQABUAAAAAAAAAAABQABYAAAAAAAAAAABRABMAAAAAAAAAAABRABQAAAAAAAAAAABRABUAAAAAAAAAAABRABYAAAAAAAAAAAA0ABQAAAAAAAAAAAA0ABUAAAAAAAAAAAA0ABYAAAAAAAAAAAA1ABQAAAAAAAAAAAA1ABUAAAAAAAAAAAA1ABYAAAAAAAAAAAA2ABQAAAAAAAAAAAA2ABUAAAAAAAAAAAA2ABYAAAAAAAAAAAA3ABQAAAAAAAAAAAA3ABUAAAAAAAAAAAA3ABYAAAAAAAAAAAA4ABQAAAAAAAAAAAA4ABUAAAAAAAAAAAA4ABYAAAAAAAAAAAA5ABQAAAAAAAAAAAA5ABUAAAAAAAAAAAA5ABYAAAAAAAAAAAA6ABQAAAAAAAAAAAA6ABUAAAAAAAAAAAA6ABYAAAAAAAAAAAA7ABQAAAAAAAAAAAA7ABUAAAAAAAAAAAA7ABYAAAAAAAAAAAA8ABQAAAAAAAAAAAA8ABUAAAAAAAAAAAA8ABYAAAAAAAAAAAA9ABQAAAAAAAAAAAA9ABUAAAAAAAAAAAA9ABYAAAAAAAAAAAA+ABQAAAAAAAAAAAA+ABUAAAAAAAAAAAA+ABYAAAAAAAAAAAA/ABQAAAAAAAAAAAA/ABUAAAAAAAAAAAA/ABYAAAAAAAAAAABAABQAAAAAAAAAAABAABUAAAAAAAAAAABAABYAAAAAAAAAAABBABQAAAAAAAAAAABBABUAAAAAAAAAAABBABYAAAAAAAAAAAApAAAAAAAAAAAAAAApAAEAAAAAAAAAAAApAAIAAAAAAAAAAAApAAMAAAAAAAAAAAApAAQAAAAAAAAAAAApAAUAAAAAAAAAAAApAAYAAAAAAAAAAAApAAcAAAAAAAAAAAApAAgAAAAAAAAAAAApAAkAAAAAAAAAAAApAAoAAAAAAAAAAAApAAsAAAAAAAAAAAApAAwAAAAAAAAAAABCABQAAAAAAAAAAABCABUAAAAAAAAAAABCABYAAAAAAAAAAABDABQAAAAAAAAAAABDABUAAAAAAAAAAABDABYAAAAAAAAAAABEABQAAAAAAAAAAABEABUAAAAAAAAAAABEABYAAAAAAAAAAABFABQAAAAAAAAAAABFABUAAAAAAAAAAABFABYAAAAAAAAAAABGABQAAAAAAAAAAABGABUAAAAAAAAAAABGABYAAAAAAAAAAABHABQAAAAAAAAAAABHABUAAAAAAAAAAABHABYAAAAAAAAAAABIABQAAAAAAAAAAABIABUAAAAAAAAAAABIABYAAAAAAAAAAABJABQAAAAAAAAAAABJABUAAAAAAAAAAABJABYAAAAAAAAAAABKABQAAAAAAAAAAABKABUAAAAAAAAAAABKABYAAAAAAAAAAABLABQAAAAAAAAAAABLABUAAAAAAAAAAABLABYAAAAAAAAAAABMABQAAAAAAAAAAABMABUAAAAAAAAAAABMABYAAAAAAAAAAABNABQAAAAAAAAAAABNABUAAAAAAAAAAABNABYAAAAAAAAAAABOABQAAAAAAAAAAABOABUAAAAAAAAAAABOABYAAAAAAAAAAABCAA0AAAAAAAAAAABCAA4AAAAAAAAAAABCAA8AAAAAAAAAAAAqAAAAAAAAAAAAAAAqAAEAAAAAAAAAAAAqAAIAAAAAAAAAAAAqAAMAAAAAAAAAAAAqAAQAAAAAAAAAAAAqAAUAAAAAAAAAAAAqAAYAAAAAAAAAAAAqAAcAAAAAAAAAAAAqAAgAAAAAAAAAAAAqAAkAAAAAAAAAAAAqAAoAAAAAAAAAAAAqAAsAAAAAAAAAAAArAAAAAAAAAAAAAAArAAEAAAAAAAAAAAArAAIAAAAAAAAAAAArAAMAAAAAAAAAAAArAAQAAAAAAAAAAAArAAUAAAAAAAAAAAArAAYAAAAAAAAAAAArAAcAAAAAAAAAAAArAAgAAAAAAAAAAAArAAkAAAAAAAAAAAArAAoAAAAAAAAAAAAsAAAAAAAAAAAAAAAsAAEAAAAAAAAAAAAsAAIAAAAAAAAAAAAsAAMAAAAAAAAAAAAsAAQAAAAAAAAAAAAsAAUAAAAAAAAAAAAsAAYAAAAAAAAAAAAsAAcAAAAAAAAAAAAsAAgAAAAAAAAAAAAtAAAAAAAAAAAAAAAtAAEAAAAAAAAAAAAtAAIAAAAAAAAAAAAtAAMAAAAAAAAAAAAtAAQAAAAAAAAAAAAtAAUAAAAAAAAAAAAtAAYAAAAAAAAAAAAtAAcAAAAAAAAAAAAtAAgAAAAAAAAAAAAuAAAAAAAAAAAAAAAuAAEAAAAAAAAAAAAuAAIAAAAAAAAAAAAuAAMAAAAAAAAAAAAuAAQAAAAAAAAAAAAuAAUAAAAAAAAAAAAuAAYAAAAAAAAAAAAuAAcAAAAAAAAAAAAuAAgAAAAAAAAAAAAvAAAAAAAAAAAAAAAvAAEAAAAAAAAAAAAvAAIAAAAAAAAAAAAvAAMAAAAAAAAAAAAvAAQAAAAAAAAAAAAvAAUAAAAAAAAAAAAvAAYAAAAAAAAAAAAvAAcAAAAAAAAAAAAvAAgAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAEAAAAAAAAAAAAwAAIAAAAAAAAAAAAwAAMAAAAAAAAAAAAwAAQAAAAAAAAAAAAwAAUAAAAAAAAAAAAwAAYAAAAAAAAAAAAwAAcAAAAAAAAAAAAwAAgAAAAAAAAAAAAxAAAAAAAAAAAAAAAxAAEAAAAAAAAAAAAxAAIAAAAAAAAAAAAxAAMAAAAAAAAAAAAxAAQAAAAAAAAAAAAxAAUAAAAAAAAAAAAxAAYAAAAAAAAAAAAxAAcAAAAAAAAAAAAxAAgAAAAAAAAAAAAyAAAAAAAAAAAAAAAyAAEAAAAAAAAAAAAyAAIAAAAAAAAAAAAyAAMAAAAAAAAAAAAyAAQAAAAAAAAAAAAyAAUAAAAAAAAAAAAzAAAAAAAAAAAAAAAzAAEAAAAAAAAAAAAzAAIAAAAAAAAAAAAzAAMAAAAAAAAAAAAzAAQAAAAAAAAAAAAzAAUAAAAAAAAAAAA0AAAAAAAAAAAAAAA0AAEAAAAAAAAAAAA0AAIAAAAAAAAAAAA0AAMAAAAAAAAAAAA0AAQAAAAAAAAAAAA0AAUAAAAAAAAAAAA1AAAAAAAAAAAAAAA1AAEAAAAAAAAAAAA1AAIAAAAAAAAAAAA1AAMAAAAAAAAAAAA1AAQAAAAAAAAAAAA1AAUAAAAAAAAAAAA/AAAAAAAAAAAAAAA/AAEAAAAAAAAAAAA/AAIAAAAAAAAAAAA/AAMAAAAAAAAAAAA/AAQAAAAAAAAAAABAAAAAAAAAAAAAAABAAAEAAAAAAAAAAABAAAIAAAAAAAAAAABAAAMAAAAAAAAAAABAAAQAAAAAAAAAAABBAAAAAAAAAAAAAABBAAEAAAAAAAAAAABBAAIAAAAAAAAAAABBAAMAAAAAAAAAAABBAAQAAAAAAAAAAABCAAAAAAAAAAAAAABCAAEAAAAAAAAAAABCAAIAAAAAAAAAAABCAAMAAAAAAAAAAABCAAQAAAAAAAAAAABDAAAAAAAAAAAAAABDAAEAAAAAAAAAAABDAAIAAAAAAAAAAABDAAMAAAAAAAAAAABDAAQAAAAAAAAAAABEAAAAAAAAAAAAAABEAAEAAAAAAAAAAABEAAIAAAAAAAAAAABEAAMAAAAAAAAAAABEAAQAAAAAAAAAAABFAAAAAAAAAAAAAABFAAEAAAAAAAAAAABFAAIAAAAAAAAAAABFAAMAAAAAAAAAAABFAAQAAAAAAAAAAABGAAAAAAAAAAAAAABGAAEAAAAAAAAAAABGAAIAAAAAAAAAAABGAAMAAAAAAAAAAABGAAQAAAAAAAAAAABHAAAAAAAAAAAAAABHAAEAAAAAAAAAAABHAAIAAAAAAAAAAABHAAMAAAAAAAAAAABHAAQAAAAAAAAAAABIAAAAAAAAAAAAAABIAAEAAAAAAAAAAABIAAIAAAAAAAAAAABIAAMAAAAAAAAAAABIAAQAAAAAAAAAAABJAAAAAAAAAAAAAABJAAEAAAAAAAAAAABJAAIAAAAAAAAAAABJAAMAAAAAAAAAAABJAAQAAAAAAAAAAABKAAAAAAAAAAAAAABKAAEAAAAAAAAAAABKAAIAAAAAAAAAAABKAAMAAAAAAAAAAABKAAQAAAAAAAAAAABLAAAAAAAAAAAAAABLAAEAAAAAAAAAAABLAAIAAAAAAAAAAABLAAMAAAAAAAAAAABLAAQAAAAAAAAAAABMAAAAAAAAAAAAAABMAAEAAAAAAAAAAABMAAIAAAAAAAAAAABMAAMAAAAAAAAAAABMAAQAAAAAAAAAAABNAAAAAAAAAAAAAABNAAEAAAAAAAAAAABNAAIAAAAAAAAAAABNAAMAAAAAAAAAAABNAAQAAAAAAAAAAABOAAAAAAAAAAAAAABOAAEAAAAAAAAAAABOAAIAAAAAAAAAAABOAAMAAAAAAAAAAABOAAQAAAAAAAAAAABPAAAAAAAAAAAAAABPAAEAAAAAAAAAAABPAAIAAAAAAAAAAABPAAMAAAAAAAAAAABPAAQAAAAAAAAAAABQAAAAAAAAAAAAAABQAAEAAAAAAAAAAABQAAIAAAAAAAAAAABQAAMAAAAAAAAAAABQAAQAAAAAAAAAAABRAAAAAAAAAAAAAABRAAEAAAAAAAAAAABRAAIAAAAAAAAAAABRAAMAAAAAAAAAAABRAAQAAAAAAAAAAABPAAUAAAAAAAAAAABPAAYAAAAAAAAAAABPAAcAAAAAAAAAAABPAAgAAAAAAAAAAABPAAkAAAAAAAAAAABPAAoAAAAAAAAAAABPAAsAAAAAAAAAAABPAAwAAAAAAAAAAABPAA0AAAAAAAAAAABPAA4AAAAAAAAAAABPAA8AAAAAAAAAAABPABAAAAAAAAAAAABPABEAAAAAAAAAAABPABIAAAAAAAAAAABPABMAAAAAAAAAAABPABQAAAAAAAAAAABPABUAAAAAAAAAAABPABYAAAAAAAAAAABQAAUAAAAAAAAAAABQAAYAAAAAAAAAAABQAAcAAAAAAAAAAABQAAgAAAAAAAAAAABQAAkAAAAAAAAAAABQAAoAAAAAAAAAAABQAAsAAAAAAAAAAABQAAwAAAAAAAAAAABQAA0AAAAAAAAAAABQAA4AAAAAAAAAAABQAA8AAAAAAAAAAABQABAAAAAAAAAAAABQABEAAAAAAAAAAABQABIAAAAAAAAAAABRAAUAAAAAAAAAAABRAAYAAAAAAAAAAABRAAcAAAAAAAAAAABRAAgAAAAAAAAAAABRAAkAAAAAAAAAAABRAAoAAAAAAAAAAABRAAsAAAAAAAAAAABRAAwAAAAAAAAAAABRAA0AAAAAAAAAAABRAA4AAAAAAAAAAABRAA8AAAAAAAAAAABRABAAAAAAAAAAAABRABEAAAAAAAAAAABRABIAAAAAAAAAAABDAA0AAAAAAAAAAABDAA4AAAAAAAAAAABDAA8AAAAAAAAAAABEAA0AAAAAAAAAAABEAA4AAAAAAAAAAABEAA8AAAAAAAAAAABFAA0AAAAAAAAAAABFAA4AAAAAAAAAAABFAA8AAAAAAAAAAAA+AAAAAAAAAAAAAAA+AAEAAAAAAAAAAAA+AAIAAAAAAAAAAAA+AAMAAAAAAAAAAAA+AAQAAAAAAAAAAAA2AAsAAAAAAAAAAAA2AAwAAAAAAAAAAAA3AAsAAAAAAAAAAAA3AAwAAAAAAAAAAAA4AAsAAAAAAAAAAAA4AAwAAAAAAAAAAAA5AAsAAAAAAAAAAAA5AAwAAAAAAAAAAAA6AAsAAAAAAAAAAAA6AAwAAAAAAAAAAAA7AAsAAAAAAAAAAAA7AAwAAAAAAAAAAAA8AAsAAAAAAAAAAAA8AAwAAAAAAAAAAAA9AAsAAAAAAAAAAAA9AAwAAAAAAAAAAAA+AAsAAAAAAAAAAAA+AAwAAAAAAAAAAAA/AAsAAAAAAAAAAAA/AAwAAAAAAAAAAABAAAsAAAAAAAAAAABAAAwAAAAAAAAAAABBAAsAAAAAAAAAAABBAAwAAAAAAAAAAAA/AA0AAAAAAAAAAABAAA0AAAAAAAAAAABBAA0AAAAAAAAAAABAAA4AAAAAAAAAAABBAA4AAAAAAAAAAAA/AA4AAAAAAAAAAAA=") [node name="Coin" parent="." instance=ExtResource("11_61x7c")] diff --git a/_player/Avatar.tscn b/_player/Avatar.tscn index 1a65800..e3bcb5f 100644 --- a/_player/Avatar.tscn +++ b/_player/Avatar.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=40 format=3 uid="uid://gwhff4qaouxy"] +[gd_scene load_steps=41 format=3 uid="uid://gwhff4qaouxy"] [ext_resource type="Script" uid="uid://dq1g1qp66chwy" path="res://_player/avatar.gd" id="1_rkqpu"] [ext_resource type="Script" uid="uid://isu8onknb75o" path="res://_player/states/character_state_machine.gd" id="1_wvs5h"] @@ -36,6 +36,9 @@ [ext_resource type="Script" uid="uid://bhexx6mj1xv3q" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="32_u7cua"] [ext_resource type="Script" uid="uid://bueehfgv5vnc0" path="res://_player/extra/camera_priority_locker.gd" id="34_1a1t3"] +[sub_resource type="CircleShape2D" id="CircleShape2D_1a1t3"] +radius = 3.0 + [sub_resource type="RectangleShape2D" id="RectangleShape2D_qnulu"] size = Vector2(9, 23) @@ -52,9 +55,20 @@ size = Vector2(10, 25) [node name="Avatar" type="CharacterBody2D" groups=["PLAYER"]] collision_layer = 2 collision_mask = 0 +floor_snap_length = 4.0 platform_wall_layers = 4 script = ExtResource("1_rkqpu") +[node name="GroundCompanion" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(0, 11) +collision_layer = 0 +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="GroundCompanion"] +shape = SubResource("CircleShape2D_1a1t3") +debug_color = Color(0, 0.6363917, 0.4093975, 0.41960785) + [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("RectangleShape2D_qnulu") @@ -146,17 +160,17 @@ dash_speed = 400.0 end_dash_speed = 190.0 climb_hop_velocity_x = 180.0 climb_hop_velocity_y = 334.0 -jump_force = 290.0 -jump_hold_maxium_time = 0.135 +jump_force = 296.0 +jump_hold_maxium_time = 0.125 jump_horizontal_Boost = 265.0 -light_gravity_threshold = 120.0 +light_gravity_threshold = 135.0 light_gravity_mult = 0.6 wall_jump_base_force_x = 260.0 wall_jump_base_force_y = 220.0 fall_maxium_speed = 430.0 air_control_mult = 0.85 -run_accel = 2100.0 -run_reduce = 420.0 +run_accel = 1100.0 +run_reduce = 2400.0 move_speed_max = 192.0 [node name="WallDetector" parent="LocomotionComponent" instance=ExtResource("20_air0b")] @@ -165,15 +179,11 @@ unique_name_in_owner = true [node name="MidRayCast2D" parent="LocomotionComponent/WallDetector" index="1"] position = Vector2(0, 3) -[node name="SpawnHookComponet" type="Node" parent="." node_paths=PackedStringArray("binded_hook_ray_cast_2d")] +[node name="SpawnHookComponet" type="Node" parent="."] script = ExtResource("21_p14kj") -binded_hook_ray_cast_2d = NodePath("HookCheckRayer") binded_hook_move_input_property_name = &"m_input_intent_direction" metadata/_custom_type_script = "uid://bkkkyugppu7sl" -[node name="HookCheckRayer" type="RayCast2D" parent="SpawnHookComponet"] -collision_mask = 4 - [node name="ReedSFXMananger" type="Node" parent="."] script = ExtResource("24_x5g5e") bindings = Array[ExtResource("25_rjd7i")]([ExtResource("26_256x0")]) @@ -207,14 +217,6 @@ debug_color = Color(0.95815283, 0, 0.5313341, 0.41960785) [node name="RemotePositionSetting" type="Node2D" parent="."] -[node name="Remotor[HookCheckRayer]" type="RemoteTransform2D" parent="RemotePositionSetting"] -remote_path = NodePath("../../SpawnHookComponet/HookCheckRayer") -update_rotation = false -update_scale = false -script = ExtResource("28_mxt3b") -observed_remote_path = NodePath("../../SpawnHookComponet/HookCheckRayer") -metadata/_custom_type_script = "uid://bijoqygv6tncj" - [node name="Remotor[WallDetector]" type="RemoteTransform2D" parent="RemotePositionSetting"] remote_path = NodePath("../../LocomotionComponent/WallDetector") update_rotation = false diff --git a/_player/avatar.gd b/_player/avatar.gd index de639e8..540bed5 100644 --- a/_player/avatar.gd +++ b/_player/avatar.gd @@ -7,6 +7,8 @@ class_name Player extends CharacterBody2D @onready var spawn_hook_comp: SpawnHookComponet = $SpawnHookComponet @onready var foot_pos_marker: Marker2D = %FootPosMarker +@onready var ground_companion: Area2D = %GroundCompanion + enum Direction{LEFT,RIGHT} var direction: Direction = Direction.RIGHT: set = _player_direction_changed @@ -49,6 +51,7 @@ func _draw() -> void: draw_string(ThemeDB.fallback_font,Vector2.ZERO,str(get_wall_normal())) func _process(delta: float) -> void: + print(self.is_on_floor()) queue_redraw() @@ -58,6 +61,10 @@ func set_move_input(dir: Vector2) -> void: func get_move_input() -> Vector2: return m_input_intent_direction +## 更宽泛的floor检测 +func get_is_on_floor() -> bool: + return self.is_on_floor() or ground_companion.has_overlapping_areas() or ground_companion.has_overlapping_bodies() + #func _physics_process(delta: float) -> void: # ###用於更新輸入的朝向 diff --git a/_player/player_controller.gd b/_player/player_controller.gd index af67003..4a4c8d3 100644 --- a/_player/player_controller.gd +++ b/_player/player_controller.gd @@ -54,8 +54,8 @@ func _unhandled_input(event: InputEvent) -> void: elif event.is_action_released(&"jump"): _controlled_avatar.release_jump() - if event.is_action_pressed(&"dash"): - _controlled_avatar.press_dash() + #if event.is_action_pressed(&"dash"): + #_controlled_avatar.press_dash() if event.is_action_pressed(&"climb"): _controlled_avatar.press_climb() diff --git a/_player/states/airbone.gd b/_player/states/airbone.gd index ac866d6..ad6edf5 100644 --- a/_player/states/airbone.gd +++ b/_player/states/airbone.gd @@ -24,6 +24,8 @@ func _setup() -> void: self.add_event_handler(&"trigger_jump",_handler_trigger_jump) func _enter() -> void: + + ## 进入时,只要want to jump == true,则会触发跳跃而不是fall var want_to_jump = blackboard.get_var(&"want_to_jump",false) initial_state = root.fall_state @@ -36,8 +38,9 @@ func _enter() -> void: func _update(delta: float) -> void: if auto_jump_timer > 0: auto_jump_timer -= delta + print("允许自动跳") - if agent.is_on_floor() && agent.velocity.y >= 0: + if agent.get_is_on_floor() && agent.velocity.y >= 0: #自动跳 if auto_jump_timer > 0: auto_jump_timer = 0 diff --git a/_player/states/character_state_machine.gd b/_player/states/character_state_machine.gd index 98cacc8..213e070 100644 --- a/_player/states/character_state_machine.gd +++ b/_player/states/character_state_machine.gd @@ -44,6 +44,7 @@ func _init_trans() -> void: self.add_transition(ANYSTATE,grap_hook_state,&"want_to_grap_hook",_has_move_input) self.add_transition(grap_hook_state,airbone_state,&"exit_on_ground") self.add_transition(grap_hook_state,ground_state,&"exit_on_air") + self.add_transition(grap_hook_state,airbone_state,&"hook_to_jump") func _update(delta: float) -> void: diff --git a/_player/states/grap_hook.gd b/_player/states/grap_hook.gd index c696d98..c1764fd 100644 --- a/_player/states/grap_hook.gd +++ b/_player/states/grap_hook.gd @@ -2,13 +2,35 @@ extends LimboHSM @onready var root: Normal = %Normal +@export var jump_grace_time: float = .13 + +var _jump_grace_timer: float + func _setup() -> void: - self.add_transition(root.hook_shooting_state,root.grapping_state,root.hook_shooting_state.EVENT_FINISHED) + self.add_transition( + root.hook_shooting_state, + root.grapping_state, + root.hook_shooting_state.EVENT_FINISHED, + _can_enter_grapping_state + ) + self.add_event_handler(&"trigger_jump",_handle_trigger_jump) func _enter() -> void: + _jump_grace_timer = 0 get_root().blackboard.set_var(&"is_hooking",true) ##BB里锁住Dash状态 +func _update(delta: float) -> void: + if _jump_grace_timer > 0: + _jump_grace_timer -= delta + func _exit() -> void: get_root().blackboard.set_var(&"is_hooking",false) ##BB里锁住Dash状态 agent.locomotion_comp.enable_movement() + +func _handle_trigger_jump() -> bool: + _jump_grace_timer = jump_grace_time + return false + +func _can_enter_grapping_state() -> bool: + return agent.spawn_hook_comp.has_hook_anchor() diff --git a/_player/states/grapping.gd b/_player/states/grapping.gd index 079f90f..050f503 100644 --- a/_player/states/grapping.gd +++ b/_player/states/grapping.gd @@ -1,24 +1,34 @@ extends LimboState +@onready var root: Normal = %Normal + @export_category("Hook Pull Release") @export var release_distance: float = 12.0 @export var release_dot_threshold: float = 0.0 -@export var min_pull_time: float = 0.08 +@export var min_pull_timer: float = 0.08 -var _pull_time := 0.0 +var _pull_timer := 0.0 var _anchor + + +func _setup() -> void: + self.add_event_handler(&"trigger_jump",_handle_trigger_jump) + func _enter() -> void: - _pull_time = 0.0 + if root.grap_hook_state._jump_grace_timer > 0: + _hook_to_jump() + + _pull_timer = 0.0 _anchor = agent.spawn_hook_comp.get_current_hook_anchor() if _anchor and is_instance_valid(_anchor): agent.locomotion_comp._custom_move_to(_anchor) func _update(delta: float) -> void: - _pull_time += delta + _pull_timer += delta - if _pull_time < min_pull_time: + if _pull_timer < min_pull_timer: return if not _anchor or not is_instance_valid(_anchor): @@ -45,6 +55,16 @@ func _update(delta: float) -> void: func _exit() -> void: agent.locomotion_comp.stop_custom_move(false) _anchor = null + + agent.spawn_hook_comp.release_cached_hook() + +func _handle_trigger_jump() -> bool: + _hook_to_jump() + return false + +func _hook_to_jump() -> void: + get_root().blackboard.set_var(&"want_to_jump",true) + self.dispatch(&"hook_to_jump") func _force_release() -> void: agent.locomotion_comp.stop_custom_move(false) diff --git a/_player/states/grounded.gd b/_player/states/grounded.gd index e4a8bfb..74a0264 100644 --- a/_player/states/grounded.gd +++ b/_player/states/grounded.gd @@ -19,7 +19,7 @@ func _update(delta: float) -> void: dispatch(self.EVENT_FINISHED) func _handler_trigger_jump() -> bool: - self.blackboard.set_var(&"want_to_jump",true) + get_root().blackboard.set_var(&"want_to_jump",true) self.dispatch(self.EVENT_FINISHED) return true diff --git a/_player/states/hook_shooting.gd b/_player/states/hook_shooting.gd index 540eb01..f8787d7 100644 --- a/_player/states/hook_shooting.gd +++ b/_player/states/hook_shooting.gd @@ -24,16 +24,25 @@ func _exit() -> void: func _handle_hook_input_completed() -> bool: agent.spawn_hook_comp.suspend_hook_stretching(false) + + ##如果鈎爪沒有找到任何錨點,則直接退出 + if not agent.spawn_hook_comp.has_hook_anchor(): + _exit_with_no_anchor() return true func _handle_hook_stretching_end(reach_end: bool,Anchor:Node2D) -> void: ##如果鈎爪沒有找到任何錨點,則直接退出 - if not Anchor: - if agent.is_on_floor(): - self.dispatch(&"exit_on_ground") - else: - self.dispatch(&"exit_on_air") - return + if not agent.spawn_hook_comp.has_hook_anchor(): + _exit_with_no_anchor() self.dispatch(self.EVENT_FINISHED) + +func _exit_with_no_anchor() -> void: + if agent.is_on_floor(): + self.dispatch(&"exit_on_ground") + else: + self.dispatch(&"exit_on_air") + + agent.spawn_hook_comp.release_cached_hook() + return diff --git a/_props/_prefabs/door.tscn b/_props/_prefabs/door.tscn index faeab24..fa7027b 100644 --- a/_props/_prefabs/door.tscn +++ b/_props/_prefabs/door.tscn @@ -6,7 +6,7 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_g1m3x"] size = Vector2(20, 128) -[node name="Door" type="AnimatableBody2D"] +[node name="Door" type="AnimatableBody2D" groups=["GRAPABLE"]] collision_layer = 4 collision_mask = 0 script = ExtResource("1_gt1uq") diff --git a/addons/reedcomponent/grap_hook/spawn_hook_component.gd b/addons/reedcomponent/grap_hook/spawn_hook_component.gd index 851e5ea..600a8c6 100644 --- a/addons/reedcomponent/grap_hook/spawn_hook_component.gd +++ b/addons/reedcomponent/grap_hook/spawn_hook_component.gd @@ -1,7 +1,5 @@ class_name SpawnHookComponet extends ComponentBase -##SpawnHookComponent必须绑定一个相关的RayCast2D,用来控制射线想要检测的位置。 -@export var binded_hook_ray_cast_2d : RayCast2D ##可以通過在這裏添加一個ComponentOwner默認的字段名來讀取輸入方向,默認是為空的。 @export var binded_hook_move_input_property_name: StringName @@ -26,7 +24,8 @@ func spawn_grap_hook_inst(dir: Vector2) -> Hook: return _current_grap_hook_inst func release_cached_hook() -> void: - _current_grap_hook_inst.release_hook() + if _current_grap_hook_inst: + _current_grap_hook_inst.release_hook() ##尝试关闭hook的延长 func suspend_hook_stretching(force_suspend: bool = false) -> bool: @@ -41,6 +40,10 @@ func _on_hook_stretching_end(reach_limit,anchor:Node2D) -> void: func get_current_hook_anchor() -> Node2D: return _current_grap_hook_inst._anchor +##是否存在anchor +func has_hook_anchor() -> bool: + return _current_grap_hook_inst and _current_grap_hook_inst._anchor + ##初始化組件 func _init_component() -> void: pass diff --git a/addons/reedcomponent/locomotion/jump_locomotion.gd b/addons/reedcomponent/locomotion/jump_locomotion.gd index a52112f..76e4556 100644 --- a/addons/reedcomponent/locomotion/jump_locomotion.gd +++ b/addons/reedcomponent/locomotion/jump_locomotion.gd @@ -39,8 +39,12 @@ var _is_wall_jumping: bool = false func jump() -> bool: if _is_jumping : return false + ##如果是同方向的,则 + if sign(characterbody.velocity.x) * sign(_movement_input) > 0: #给与一个跳跃的补正速度 - characterbody.velocity.x = _movement_input * jump_horizontal_Boost # 跳跃的水平补正速度 + characterbody.velocity.x += _movement_input * jump_horizontal_Boost * .7 + else: + characterbody.velocity.x = _movement_input * jump_horizontal_Boost # 跳跃的水平补正速度 _jump_timer = jump_hold_maxium_time _is_jumping = true diff --git a/addons/reedcomponent/locomotion/locomotion_component.gd b/addons/reedcomponent/locomotion/locomotion_component.gd index 524abef..5aa5f03 100644 --- a/addons/reedcomponent/locomotion/locomotion_component.gd +++ b/addons/reedcomponent/locomotion/locomotion_component.gd @@ -105,12 +105,12 @@ func _update_gravity(delta: float) -> void: func _update_movement(delta : float) -> void: var input_dir = sign(_movement_input) as float - var current_dir = characterbody.velocity.normalized().x as float + var current_dir = sign(characterbody.velocity.x) as float var accel: float - if abs(characterbody.velocity.x) > move_speed_max and input_dir * current_dir > 0: - accel = run_reduce + if abs(characterbody.velocity.x) > move_speed_max and input_dir * current_dir <= 0 and input_dir != 0: + accel = run_reduce #如果移动方向和当前的速度方向不同向,且不是起步,那么apply 减速的加速度。 else: - accel = run_accel + accel = run_accel #其他case都是加速的加速度 #如果检测到当前速度和加速度方向不同,则发送移动方向更改event if current_dir * input_dir < 0 and not _in_pivoting: diff --git a/addons/reedscene/act/StateDrapSlot.tscn b/addons/reedscene/act/StateDrapSlot.tscn index 6b1d4d7..495c3eb 100644 --- a/addons/reedscene/act/StateDrapSlot.tscn +++ b/addons/reedscene/act/StateDrapSlot.tscn @@ -39,7 +39,7 @@ layout_mode = 2 [node name="DropArea" type="PanelContainer" parent="MarginContainer/HBC_Main/VBoxContainer/HBC_Drop"] unique_name_in_owner = true -custom_minimum_size = Vector2(30, 30) +custom_minimum_size = Vector2(18, 18) layout_mode = 2 mouse_filter = 1 script = ExtResource("2_stte8") @@ -48,8 +48,8 @@ script = ExtResource("2_stte8") layout_mode = 2 mouse_filter = 2 texture = ExtResource("2_lwr2w") -expand_mode = 1 -stretch_mode = 5 +expand_mode = 2 +stretch_mode = 4 [node name="MarginContainer" type="MarginContainer" parent="MarginContainer/HBC_Main/VBoxContainer/HBC_Drop"] layout_mode = 2 diff --git a/addons/reedscene/act/StateDropArea.gd b/addons/reedscene/act/StateDropArea.gd index e093186..d960a8e 100644 --- a/addons/reedscene/act/StateDropArea.gd +++ b/addons/reedscene/act/StateDropArea.gd @@ -14,8 +14,8 @@ const COLOR_CHECKED: Color = Color.GREEN ## 設置Locker的時候自更新一次State var vaild: bool = false: set(value): - _set_state(3) vaild = value + _set_state(0) var _icon: TextureRect var _state := 0 # 0 idle, 1 can, 2 cannot diff --git a/addons/reedscene/act/StateDropSlot.gd b/addons/reedscene/act/StateDropSlot.gd index af10fe6..eb3cca7 100644 --- a/addons/reedscene/act/StateDropSlot.gd +++ b/addons/reedscene/act/StateDropSlot.gd @@ -30,8 +30,12 @@ const COLOR_CHECKED_1: Color = Color.GREEN const COLOR_CHECKED_2: Color = Color.YELLOW const COLOR_CHECKED_3: Color = Color.ORANGE_RED +signal prop_info_cached(info: Dictionary,slot:StateDrapSlot) +signal prop_info_released(id:int, slot:StateDrapSlot) func _ready() -> void: + _btn_init() + _reset_to_default() _reset_cb_use_trans() @@ -48,34 +52,32 @@ func _set_state(new_state: int) -> void: match _state: 0: ## 初始狀態,什麽都沒有 - pass + _reset_to_default() 1: ## vaild 狀態,可以插入了 - pass + drop_area.vaild = true + _update_context() + prop_info_cached.emit(_cached_info,self) func _btn_init() -> void: clear_button.pressed.connect(_on_clear_pressed) func _on_clear_pressed() -> void: - _clear_cached_act() + _set_state(0) func init(index: int) -> void: self.index.text = str(index) func _on_node_path_dropped(path: NodePath) -> void: - - ## 如果已經可以插入但是重新被插入了一個State,先clear再插入。 - if get_ready_to_insert(): - _clear_cached_act() + if _state == 1: + _set_state(0) var state := StateResolveUtils.get_state_node_from_path(path) if state == null: - _clear_cached_act() _reset_to_default() return var info := StateResolveUtils.resolve_state_display_info(state) if info == null: - _clear_cached_act() _reset_to_default() return @@ -90,9 +92,7 @@ func _on_node_path_dropped(path: NodePath) -> void: _cached_prop_id = int(info.prop_id) - _update_context(info) - - drop_area.vaild = true + _set_state(1) func _on_drap_area_state_change(state:int) -> void: pass @@ -117,11 +117,13 @@ func _resolve_state_from_path(path: NodePath) -> ReedPropState: ## 重置回默认 func _reset_to_default() ->void: + _clear_cached_act() state_label.text = NORMAL_STATE_LABLE state_label.modulate = COLOR_IDLE context.text = NORMAL_CONTEXT context.modulate = COLOR_IDLE + drop_area.vaild = false ## 初始化use trans 的 check box @@ -146,12 +148,14 @@ func _build_cached_act(state: ReedPropState, info: Dictionary) -> void: ## 清空Cached Act func _clear_cached_act() -> void: + ##如果清除前存在CahcedInfo,就释放信号 + if _cached_info.has("prop_id"): + var id = _cached_info.prop_id + prop_info_released.emit(id, self) + _cached_single_act = null _cached_prop_id = -1 _cached_info = {} - - drop_area.vaild = false - _update_context() ## 设置文本 func _update_context(info:Dictionary = {}) ->void: @@ -159,6 +163,7 @@ func _update_context(info:Dictionary = {}) ->void: ## TODO:这里后续应该有一个报错的Message if info == {} : if _cached_info == {}: + _reset_to_default() return else: info = _cached_info diff --git a/addons/reedscene/act/StateQuickConfigPanel.gd b/addons/reedscene/act/StateQuickConfigPanel.gd index 8c066c0..7c8a9e2 100644 --- a/addons/reedscene/act/StateQuickConfigPanel.gd +++ b/addons/reedscene/act/StateQuickConfigPanel.gd @@ -19,6 +19,8 @@ const DEFAULT_CONTEXT: Dictionary = { var _inited: bool = false var _max_length: int = -1 +var _cached_prop_id: Array[int] + ## 默认的Slot const SLOT: PackedScene = preload("res://addons/reedscene/act/StateDrapSlot.tscn") @@ -67,12 +69,23 @@ func _add_slot() -> void: return var slot := SLOT.instantiate() + slot.prop_info_cached.connect(_on_slot_prop_cached) vbc_spawn_slot_root.add_child(slot) slot.owner = get_tree().edited_scene_root # 编辑器可保存 slot.init(vbc_spawn_slot_root.get_children().size()) _update_b_remove_state() +func _on_slot_prop_cached(info:Dictionary,slot:StateDrapSlot) -> void: + if not info.has("prop_id"): + return + + var id : int = info.prop_id + if _cached_prop_id.has(id): + slot._set_state(0) + else: + _cached_prop_id.append(id) + ## 移除一個Slot,最少不能為0 func _remove_slot() -> void: var count := vbc_spawn_slot_root.get_child_count() diff --git a/addons/reedscene/act/StateResolveUtils.gd b/addons/reedscene/act/StateResolveUtils.gd index 2f416c5..b5dad54 100644 --- a/addons/reedscene/act/StateResolveUtils.gd +++ b/addons/reedscene/act/StateResolveUtils.gd @@ -51,9 +51,9 @@ static func get_state_node_from_path(path: NodePath) -> ReedPropState: static func resolve_state_display_info(state: ReedPropState) -> Dictionary: var result := { "prop_name": "", - "prop_id": "", + "prop_id": -1, "state_name": "", - "state_id": "" + "state_id": -1 } if state == null: diff --git a/addons/reedscene/prop/PropComponent.gd b/addons/reedscene/prop/PropComponent.gd index 0aa6684..ec7a003 100644 --- a/addons/reedscene/prop/PropComponent.gd +++ b/addons/reedscene/prop/PropComponent.gd @@ -99,44 +99,6 @@ func _init_states() -> void: push_error("[PropComponent:%s] State init failed: %s" % [prop_id, s.name]) - - -## ============================== -## Act Sync Entry -## ============================== -#func sync_to_state(state_id: int, act_id: int, instant := false) -> bool: - #var ctx := { - #"reason": "ACT_SYNC", - #"act_id": act_id, - #"instant": instant - #} - #return change_state(state_id, false ,ctx) - -## ============================== -## Editor Tool -## ============================== -#func _editor_ensure_states_root() -> void: - #var states := get_node_or_null(STATES_ROOT_NAME) - #if states != null: - #return -# - ## 创建 StateManager 而不是普通 Node - #states = ReedPropStateManager.new() - #states.name = STATES_ROOT_NAME - #add_child(states) -# - ## 让其成为 Scene 的一部分(非常重要) - #states.owner = get_tree().edited_scene_root -# - ## 自动添加一个默认 State - #var default_state := ReedPropState.new() - #default_state.name = "Default" - #states.add_child(default_state) - #default_state.owner = get_tree().edited_scene_root -# - #if debug_log: - #print("[PropComponent] Created States(StateManager) + Default State") - ## 引擎層預知一個工具節點給予到State及其子節點。 func _editor_ensure_states_root() -> void: var states := get_node_or_null(STATES_ROOT_NAME) diff --git a/addons/reedscene/reedscene.gd b/addons/reedscene/reedscene.gd index 468b316..cfb8cd4 100644 --- a/addons/reedscene/reedscene.gd +++ b/addons/reedscene/reedscene.gd @@ -40,13 +40,15 @@ func _exit_tree() -> void: ## 注冊Inspector func _register_inspectors() -> void: + + #TODO: 临时禁用Act的Inspector,后续如果有需求再迭代。 # Inspector 1:ActManager - var act_inspector := preload( - ACT_INSPECTOR_SCENE_PATH - ).new() - - add_inspector_plugin(act_inspector) - inspector_plugins.append(act_inspector) + #var act_inspector := preload( + #ACT_INSPECTOR_SCENE_PATH + #).new() +# + #add_inspector_plugin(act_inspector) + #inspector_plugins.append(act_inspector) # Inspector 2:ReedSceneID var scene_id_inspector := preload( diff --git a/project.godot b/project.godot index 5ae1e94..dc39d2a 100644 --- a/project.godot +++ b/project.godot @@ -70,11 +70,6 @@ jump={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":74,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null) ] } -dash={ -"deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"location":0,"echo":false,"script":null) -] -} climb={ "deadzone": 0.2, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) @@ -86,7 +81,7 @@ move={ } grap_hook={ "deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"location":0,"echo":false,"script":null) ] }