From c17031e0292c4167e03ce45e02627ada57d50033 Mon Sep 17 00:00:00 2001 From: Reed Date: Thu, 15 Jan 2026 13:01:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=97=E7=89=A9=E8=B4=A8=E7=90=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _game/game.gd | 4 +- _player/Avatar.tscn | 1 + _player/states/character_state_machine.gd | 13 +++- .../player/player_trigger_volumn.tscn | 1 + _props/coin/coin.tscn | 16 ----- .../dark_material_ball/dark_material_ball.gd | 64 +++++++++++++++++++ .../dark_material_ball.gd.uid | 1 + .../dark_material_ball.tscn | 44 +++++++++++++ _scene/level1/l0_s0.tscn | 15 ++++- _tileset/level1.tres | 15 ++++- .../grap_hook/garpping_hook_v2.tscn | 2 +- .../grap_hook/garpping_hook_v_2.gd | 28 +++++--- project.godot | 4 +- 13 files changed, 174 insertions(+), 34 deletions(-) delete mode 100644 _props/coin/coin.tscn create mode 100644 _props/dark_material_ball/dark_material_ball.gd create mode 100644 _props/dark_material_ball/dark_material_ball.gd.uid create mode 100644 _props/dark_material_ball/dark_material_ball.tscn diff --git a/_game/game.gd b/_game/game.gd index 048c9da..d8b774f 100644 --- a/_game/game.gd +++ b/_game/game.gd @@ -1,11 +1,11 @@ extends Node2D func _ready() -> void: - #$L0_S0.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) + #$L1_S4.switch_act_by_id(1) #$L1_S5.switch_act_by_id(1) #$L1_S6.switch_act_by_id(1) #$L1_S7.switch_act_by_id(1) diff --git a/_player/Avatar.tscn b/_player/Avatar.tscn index 8e8b1b5..4b6c715 100644 --- a/_player/Avatar.tscn +++ b/_player/Avatar.tscn @@ -152,6 +152,7 @@ release_distance = 20.0 [node name="Dash" type="LimboState" parent="PlayerHSM/Normal"] unique_name_in_owner = true script = ExtResource("12_8nsdm") +dash_time = 1.0 [node name="Dead" type="LimboState" parent="PlayerHSM"] unique_name_in_owner = true diff --git a/_player/states/character_state_machine.gd b/_player/states/character_state_machine.gd index 648a0a7..62341e8 100644 --- a/_player/states/character_state_machine.gd +++ b/_player/states/character_state_machine.gd @@ -27,6 +27,7 @@ func _setup() -> void: func _init_handler() -> void: self.add_event_handler(&"trigger_dash",_handler_trigger_dash) ##处理Dash输入 + self.add_event_handler(&"trigger_external_dash",_handler_trigger_external_dash) ##处理外部触发的Dash self.add_event_handler(&"trigger_climb",_handler_trigger_climb) ##处理瞬时的climb self.add_event_handler(&"trigger_grap_hook",_handler_grap_hook) ##处理grap hook 的輸入 @@ -65,10 +66,18 @@ func _handler_trigger_dash() -> bool: #如果当前无法Dash,则返回 if not agent.locomotion_comp.get_can_dash(): return false - + if get_root().blackboard.get_var(&"is_dashing",false): return false - + + self.dispatch(&"want_to_dash") + return true + +##处理外部触发的Dash(如道具触发) +func _handler_trigger_external_dash() -> bool: + if get_root().blackboard.get_var(&"is_dashing",false): + return false + self.dispatch(&"want_to_dash") return true diff --git a/_props/_prefabs/player/player_trigger_volumn.tscn b/_props/_prefabs/player/player_trigger_volumn.tscn index 2801dba..70cd775 100644 --- a/_props/_prefabs/player/player_trigger_volumn.tscn +++ b/_props/_prefabs/player/player_trigger_volumn.tscn @@ -8,3 +8,4 @@ editor_description = "此类在检测到玩家时会发出signal,可以与其 collision_layer = 0 collision_mask = 2 script = ExtResource("1_qrafk") +debug_print = true diff --git a/_props/coin/coin.tscn b/_props/coin/coin.tscn deleted file mode 100644 index 2008b0a..0000000 --- a/_props/coin/coin.tscn +++ /dev/null @@ -1,16 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://c3mievyfhx6ni"] - -[ext_resource type="PackedScene" uid="uid://d20u8tfktepxg" path="res://_props/_prefabs/collection/collection_prefab.tscn" id="1_r0qyb"] -[ext_resource type="Texture2D" uid="uid://c673bap4b12fx" path="res://icon.svg" id="2_igeyo"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_r0qyb"] -radius = 23.0 - -[node name="Coin" instance=ExtResource("1_r0qyb")] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="0"] -shape = SubResource("CircleShape2D_r0qyb") - -[node name="Sprite2D" type="Sprite2D" parent="." index="1"] -scale = Vector2(0.33, 0.33) -texture = ExtResource("2_igeyo") diff --git a/_props/dark_material_ball/dark_material_ball.gd b/_props/dark_material_ball/dark_material_ball.gd new file mode 100644 index 0000000..a0daf5b --- /dev/null +++ b/_props/dark_material_ball/dark_material_ball.gd @@ -0,0 +1,64 @@ +extends CharacterBody2D + +@onready var player_collectable_volumn: PlayerTriggerVolumn = %PlayerCollectableVolumn +@onready var hook_attract_volumn: Area2D = %HookAttractVolumn + +enum State { + IDLE, + PULLED_BY_HOOK, + COLLECTED +} + +var _current_state: State = State.IDLE + +## 拉回速度 +@export var pull_speed: float = 800.0 +## 拉回目标(玩家) +var _pull_target: Node2D + +func _ready() -> void: + player_collectable_volumn.player_entered.connect(_on_player_collected) + +##状态管理函数 +func change_state(in_state: State) -> void: + if in_state == _current_state: + return + + ## 退出State的逻辑 + match _current_state: + State.IDLE: + pass + State.PULLED_BY_HOOK: + pass + State.COLLECTED: + pass + + _current_state = in_state + + ## 进入State的逻辑 + match in_state: + State.IDLE: + pass + State.PULLED_BY_HOOK: + pass + State.COLLECTED: + queue_free() + +## 钩爪击中时调用(hit_pos 是击中点,hook 是钩爪实例) +func on_hook_hit(hit_pos: Vector2, hook: Hook) -> void: + # 通过钩爪组件获取发射者(玩家) + _pull_target = hook._binded_hook_comp.owner as Node2D + if _pull_target: + change_state(State.PULLED_BY_HOOK) + +func _physics_process(delta: float) -> void: + if _current_state == State.PULLED_BY_HOOK and _pull_target: + var direction := (_pull_target.global_position - global_position).normalized() + velocity = direction * pull_speed + move_and_slide() + +##如果玩家进入收集区域,则切换为已收集状态。 +func _on_player_collected(body:CharacterBody2D) -> void: + if body is Player: + body.hsm.dispatch(&"trigger_external_dash") + change_state(State.COLLECTED) diff --git a/_props/dark_material_ball/dark_material_ball.gd.uid b/_props/dark_material_ball/dark_material_ball.gd.uid new file mode 100644 index 0000000..6154e4f --- /dev/null +++ b/_props/dark_material_ball/dark_material_ball.gd.uid @@ -0,0 +1 @@ +uid://c8a7gs0h2h6vn diff --git a/_props/dark_material_ball/dark_material_ball.tscn b/_props/dark_material_ball/dark_material_ball.tscn new file mode 100644 index 0000000..f3b1b31 --- /dev/null +++ b/_props/dark_material_ball/dark_material_ball.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=7 format=3 uid="uid://degt1t2y08udg"] + +[ext_resource type="Script" uid="uid://c8a7gs0h2h6vn" path="res://_props/dark_material_ball/dark_material_ball.gd" id="1_8vsnl"] +[ext_resource type="Texture2D" uid="uid://c673bap4b12fx" path="res://icon.svg" id="2_ts6gp"] +[ext_resource type="PackedScene" uid="uid://bonrls3iuhdqb" path="res://_props/_prefabs/player/player_trigger_volumn.tscn" id="3_rtv51"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_62vs1"] +radius = 7.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_j8xbm"] +radius = 10.049875 + +[sub_resource type="CircleShape2D" id="CircleShape2D_8vsnl"] +radius = 34.0147 + +[node name="DarkMaterialBall" type="CharacterBody2D" groups=["GRAPABLE"]] +collision_layer = 16 +collision_mask = 2 +script = ExtResource("1_8vsnl") + +[node name="Sprite2D" type="Sprite2D" parent="."] +unique_name_in_owner = true +scale = Vector2(0.135, 0.135) +texture = ExtResource("2_ts6gp") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_62vs1") + +[node name="PlayerCollectableVolumn" parent="." instance=ExtResource("3_rtv51")] +unique_name_in_owner = true +debug_print = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerCollectableVolumn"] +shape = SubResource("CircleShape2D_j8xbm") +debug_color = Color(0.19215687, 0.6431373, 0, 0) + +[node name="HookAttractVolumn" type="Area2D" parent="."] +unique_name_in_owner = true +collision_layer = 16 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HookAttractVolumn"] +shape = SubResource("CircleShape2D_8vsnl") +debug_color = Color(1, 0, 0.14509805, 0) diff --git a/_scene/level1/l0_s0.tscn b/_scene/level1/l0_s0.tscn index 80a0a7a..042dd1f 100644 --- a/_scene/level1/l0_s0.tscn +++ b/_scene/level1/l0_s0.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=50 format=4 uid="uid://sursemsbf1lg"] +[gd_scene load_steps=51 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"] @@ -29,6 +29,7 @@ [ext_resource type="Script" uid="uid://bf1qlvdbf8qdp" path="res://addons/reedscene/prop/Effect/EAT_CallFunc.gd" id="22_k5pwp"] [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"] +[ext_resource type="PackedScene" uid="uid://degt1t2y08udg" path="res://_props/dark_material_ball/dark_material_ball.tscn" id="30_mu7ca"] [sub_resource type="Resource" id="Resource_5fsuc"] script = ExtResource("9_g4f48") @@ -221,3 +222,15 @@ effects = Array[ExtResource("15_xtmay")]([SubResource("Resource_ubvm0")]) texture_filter = 1 tile_map_data = PackedByteArray("AADg/zcAAAAAAAAAAADg/zgAAAAAAAAAAADg/zkAAAAAAAAAAADg/zoAAAAAAAAAAADg/zsAAAAAAAAAAADg/zwAAAAAAAAAAADg/z0AAAAAAAAAAADg/z4AAAAAAAAAAADg/z8AAAAAAAAAAADg/0AAAAAAAAAAAADg/0EAAAAAAAAAAADg/0IAAAAAAAAAAADg/0MAAAAAAAAAAADg/0QAAAAAAAAAAADg/0UAAAAAAAAAAADg/0YAAAAAAAAAAADg/0cAAAAAAAAAAADg/0gAAAAAAAAAAADg/0kAAAAAAAAAAADg/0oAAAAAAAAAAADg/0sAAAAAAAAAAADg/0wAAAAAAAAAAADg/00AAAAAAAAAAADg/04AAAAAAAAAAADg/08AAAAAAAAAAADg/1AAAAAAAAAAAADg/1EAAAAAAAAAAADg/1IAAAAAAAAAAADg/1MAAAAAAAAAAADg/1QAAAAAAAAAAADg/1UAAAAAAAAAAADg/1YAAAAAAAAAAADg/1cAAAAAAAAAAADg/1gAAAAAAAAAAADg/1kAAAAAAAAAAADg/1oAAAAAAAAAAADg/1sAAAAAAAAAAADh/zcAAAAAAAAAAADh/zgAAAAAAAAAAADh/zkAAAAAAAAAAADh/zoAAAAAAAAAAADh/zsAAAAAAAAAAADh/zwAAAAAAAAAAADh/z0AAAAAAAAAAADh/z4AAAAAAAAAAADh/z8AAAAAAAAAAADh/0AAAAAAAAAAAADh/0EAAAAAAAAAAADh/0IAAAAAAAAAAADh/0MAAAAAAAAAAADh/0QAAAAAAAAAAADh/0UAAAAAAAAAAADh/0YAAAAAAAAAAADh/0cAAAAAAAAAAADh/0gAAAAAAAAAAADh/0kAAAAAAAAAAADh/0oAAAAAAAAAAADh/0sAAAAAAAAAAADh/0wAAAAAAAAAAADh/00AAAAAAAAAAADh/04AAAAAAAAAAADh/08AAAAAAAAAAADh/1AAAAAAAAAAAADh/1EAAAAAAAAAAADh/1IAAAAAAAAAAADh/1MAAAAAAAAAAADh/1QAAAAAAAAAAADh/1UAAAAAAAAAAADh/1YAAAAAAAAAAADh/1cAAAAAAAAAAADh/1gAAAAAAAAAAADh/1kAAAAAAAAAAADh/1oAAAAAAAAAAADh/1sAAAAAAAAAAADi/zcAAAAAAAAAAADi/zgAAAAAAAAAAADi/zkAAAAAAAAAAADi/zoAAAAAAAAAAADi/zsAAAAAAAAAAADi/zwAAAAAAAAAAADi/z0AAAAAAAAAAADi/z4AAAAAAAAAAADi/z8AAAAAAAAAAADi/0AAAAAAAAAAAADi/0EAAAAAAAAAAADi/0IAAAAAAAAAAADi/0MAAAAAAAAAAADi/0QAAAAAAAAAAADi/0UAAAAAAAAAAADi/0YAAAAAAAAAAADi/0cAAAAAAAAAAADi/0gAAAAAAAAAAADi/0kAAAAAAAAAAADi/0oAAAAAAAAAAADi/0sAAAAAAAAAAADi/0wAAAAAAAAAAADi/00AAAAAAAAAAADi/04AAAAAAAAAAADi/08AAAAAAAAAAADi/1AAAAAAAAAAAADi/1EAAAAAAAAAAADi/1IAAAAAAAAAAADi/1MAAAAAAAAAAADi/1QAAAAAAAAAAADi/1UAAAAAAAAAAADi/1YAAAAAAAAAAADi/1cAAAAAAAAAAADi/1gAAAAAAAAAAADi/1kAAAAAAAAAAADi/1oAAAAAAAAAAADi/1sAAAAAAAAAAADj/zcAAAAAAAAAAADj/zgAAAAAAAAAAADj/zkAAAAAAAAAAADj/zoAAAAAAAAAAADj/zsAAAAAAAAAAADj/zwAAAAAAAAAAADj/z0AAAAAAAAAAADj/z4AAAAAAAAAAADj/z8AAAAAAAAAAADj/0AAAAAAAAAAAADj/0EAAAAAAAAAAADj/0IAAAAAAAAAAADj/0MAAAAAAAAAAADj/0QAAAAAAAAAAADj/0UAAAAAAAAAAADj/0YAAAAAAAAAAADj/0cAAAAAAAAAAADj/0gAAAAAAAAAAADj/0kAAAAAAAAAAADj/0oAAAAAAAAAAADj/0sAAAAAAAAAAADj/0wAAAAAAAAAAADj/00AAAAAAAAAAADj/04AAAAAAAAAAADj/08AAAAAAAAAAADj/1AAAAAAAAAAAADj/1EAAAAAAAAAAADj/1IAAAAAAAAAAADj/1MAAAAAAAAAAADj/1QAAAAAAAAAAADj/1UAAAAAAAAAAADj/1YAAAAAAAAAAADj/1cAAAAAAAAAAADj/1gAAAAAAAAAAADj/1kAAAAAAAAAAADj/1oAAAAAAAAAAADj/1sAAAAAAAAAAADk/zcAAAAAAAAAAADk/zgAAAAAAAAAAADk/zkAAAAAAAAAAADk/zoAAAAAAAAAAADk/zsAAAAAAAAAAADk/zwAAAAAAAAAAADk/z0AAAAAAAAAAADk/z4AAAAAAAAAAADk/z8AAAAAAAAAAADk/0AAAAAAAAAAAADk/0EAAAAAAAAAAADk/0IAAAAAAAAAAADk/0MAAAAAAAAAAADk/0QAAAAAAAAAAADk/0UAAAAAAAAAAADk/0YAAAAAAAAAAADk/0cAAAAAAAAAAADk/0gAAAAAAAAAAADk/0kAAAAAAAAAAADk/0oAAAAAAAAAAADk/0sAAAAAAAAAAADk/0wAAAAAAAAAAADk/00AAAAAAAAAAADk/04AAAAAAAAAAADk/08AAAAAAAAAAADk/1AAAAAAAAAAAADk/1EAAAAAAAAAAADk/1IAAAAAAAAAAADk/1MAAAAAAAAAAADk/1QAAAAAAAAAAADk/1UAAAAAAAAAAADk/1YAAAAAAAAAAADk/1cAAAAAAAAAAADk/1gAAAAAAAAAAADk/1kAAAAAAAAAAADk/1oAAAAAAAAAAADk/1sAAAAAAAAAAADl/zcAAAAAAAAAAADl/zgAAAAAAAAAAADl/zkAAAAAAAAAAADl/zoAAAAAAAAAAADl/zsAAAAAAAAAAADl/zwAAAAAAAAAAADl/z0AAAAAAAAAAADl/z4AAAAAAAAAAADl/z8AAAAAAAAAAADl/0AAAAAAAAAAAADl/0EAAAAAAAAAAADl/0IAAAAAAAAAAADl/0MAAAAAAAAAAADl/0QAAAAAAAAAAADl/0UAAAAAAAAAAADl/0YAAAAAAAAAAADl/0cAAAAAAAAAAADl/0gAAAAAAAAAAADl/0kAAAAAAAAAAADl/0oAAAAAAAAAAADl/0sAAAAAAAAAAADl/0wAAAAAAAAAAADl/00AAAAAAAAAAADl/04AAAAAAAAAAADl/08AAAAAAAAAAADl/1AAAAAAAAAAAADl/1EAAAAAAAAAAADl/1IAAAAAAAAAAADl/1MAAAAAAAAAAADl/1QAAAAAAAAAAADl/1UAAAAAAAAAAADl/1YAAAAAAAAAAADl/1cAAAAAAAAAAADl/1gAAAAAAAAAAADl/1kAAAAAAAAAAADl/1oAAAAAAAAAAADl/1sAAAAAAAAAAADm/zcAAAAAAAAAAADm/zgAAAAAAAAAAADm/zkAAAAAAAAAAADm/zoAAAAAAAAAAADm/zsAAAAAAAAAAADm/zwAAAAAAAAAAADm/z0AAAAAAAAAAADm/z4AAAAAAAAAAADm/z8AAAAAAAAAAADm/0AAAAAAAAAAAADm/0EAAAAAAAAAAADm/0IAAAAAAAAAAADm/0MAAAAAAAAAAADm/0QAAAAAAAAAAADm/0UAAAAAAAAAAADm/0YAAAAAAAAAAADm/0cAAAAAAAAAAADm/0gAAAAAAAAAAADm/0kAAAAAAAAAAADm/0oAAAAAAAAAAADm/0sAAAAAAAAAAADm/0wAAAAAAAAAAADm/00AAAAAAAAAAADm/04AAAAAAAAAAADm/08AAAAAAAAAAADm/1AAAAAAAAAAAADm/1EAAAAAAAAAAADm/1IAAAAAAAAAAADm/1MAAAAAAAAAAADm/1QAAAAAAAAAAADm/1UAAAAAAAAAAADm/1YAAAAAAAAAAADm/1cAAAAAAAAAAADm/1gAAAAAAAAAAADm/1kAAAAAAAAAAADm/1oAAAAAAAAAAADm/1sAAAAAAAAAAADn/zcAAAAAAAAAAADn/zgAAAAAAAAAAADn/zkAAAAAAAAAAADn/zoAAAAAAAAAAADn/zsAAAAAAAAAAADn/zwAAAAAAAAAAADo/zcAAAAAAAAAAADo/zgAAAAAAAAAAADo/zkAAAAAAAAAAADo/zoAAAAAAAAAAADo/zsAAAAAAAAAAADo/zwAAAAAAAAAAADp/zcAAAAAAAAAAADp/zgAAAAAAAAAAADp/zkAAAAAAAAAAADp/zoAAAAAAAAAAADp/zsAAAAAAAAAAADp/zwAAAAAAAAAAADq/zcAAAAAAAAAAADq/zgAAAAAAAAAAADq/zkAAAAAAAAAAADq/zoAAAAAAAAAAADq/zsAAAAAAAAAAADq/zwAAAAAAAAAAADr/zcAAAAAAAAAAADr/zgAAAAAAAAAAADr/zkAAAAAAAAAAADr/zoAAAAAAAAAAADr/zsAAAAAAAAAAADr/zwAAAAAAAAAAADs/zcAAAAAAAAAAADs/zgAAAAAAAAAAADs/zkAAAAAAAAAAADs/zoAAAAAAAAAAADs/zsAAAAAAAAAAADs/zwAAAAAAAAAAADt/zcAAAAAAAAAAADt/zgAAAAAAAAAAADt/zkAAAAAAAAAAADt/zoAAAAAAAAAAADt/zsAAAAAAAAAAADt/zwAAAAAAAAAAADu/zcAAAAAAAAAAADu/zgAAAAAAAAAAADu/zkAAAAAAAAAAADu/zoAAAAAAAAAAADu/zsAAAAAAAAAAADu/zwAAAAAAAAAAADv/zcAAAAAAAAAAADv/zgAAAAAAAAAAADv/zkAAAAAAAAAAADv/zoAAAAAAAAAAADv/zsAAAAAAAAAAADv/zwAAAAAAAAAAADw/zcAAAAAAAAAAADw/zgAAAAAAAAAAADw/zkAAAAAAAAAAADw/zoAAAAAAAAAAADw/zsAAAAAAAAAAADw/zwAAAAAAAAAAADx/zcAAAAAAAAAAADx/zgAAAAAAAAAAADx/zkAAAAAAAAAAADx/zoAAAAAAAAAAADx/zsAAAAAAAAAAADx/zwAAAAAAAAAAADy/zcAAAAAAAAAAADy/zgAAAAAAAAAAADy/zkAAAAAAAAAAADy/zoAAAAAAAAAAADy/zsAAAAAAAAAAADy/zwAAAAAAAAAAADz/zcAAAAAAAAAAADz/zgAAAAAAAAAAADz/zkAAAAAAAAAAADz/zoAAAAAAAAAAADz/zsAAAAAAAAAAADz/zwAAAAAAAAAAAD0/zcAAAAAAAAAAAD0/zgAAAAAAAAAAAD0/zkAAAAAAAAAAAD0/zoAAAAAAAAAAAD0/zsAAAAAAAAAAAD0/zwAAAAAAAAAAAD1/zcAAAAAAAAAAAD1/zgAAAAAAAAAAAD1/zkAAAAAAAAAAAD1/zoAAAAAAAAAAAD1/zsAAAAAAAAAAAD1/zwAAAAAAAAAAAD2/zcAAAAAAAAAAAD2/zgAAAAAAAAAAAD2/zkAAAAAAAAAAAD2/zoAAAAAAAAAAAD2/zsAAAAAAAAAAAD2/zwAAAAAAAAAAAD3/zcAAAAAAAAAAAD3/zgAAAAAAAAAAAD3/zkAAAAAAAAAAAD3/zoAAAAAAAAAAAD3/zsAAAAAAAAAAAD3/zwAAAAAAAAAAAD4/zcAAAAAAAAAAAD4/zgAAAAAAAAAAAD4/zkAAAAAAAAAAAD4/zoAAAAAAAAAAAD4/zsAAAAAAAAAAAD4/zwAAAAAAAAAAAD5/zcAAAAAAAAAAAD5/zgAAAAAAAAAAAD5/zkAAAAAAAAAAAD5/zoAAAAAAAAAAAD5/zsAAAAAAAAAAAD5/zwAAAAAAAAAAAD6/zcAAAAAAAAAAAD6/zgAAAAAAAAAAAD6/zkAAAAAAAAAAAD6/zoAAAAAAAAAAAD6/zsAAAAAAAAAAAD6/zwAAAAAAAAAAAD7/zcAAAAAAAAAAAD7/zgAAAAAAAAAAAD7/zkAAAAAAAAAAAD7/zoAAAAAAAAAAAD7/zsAAAAAAAAAAAD7/zwAAAAAAAAAAAD8/zcAAAAAAAAAAAD8/zgAAAAAAAAAAAD8/zkAAAAAAAAAAAD8/zoAAAAAAAAAAAD8/zsAAAAAAAAAAAD8/zwAAAAAAAAAAAD9/zcAAAAAAAAAAAD9/zgAAAAAAAAAAAD9/zkAAAAAAAAAAAD9/zoAAAAAAAAAAAD9/zsAAAAAAAAAAAD9/zwAAAAAAAAAAAD+/zcAAAAAAAAAAAD+/zgAAAAAAAAAAAD+/zkAAAAAAAAAAAD+/zoAAAAAAAAAAAD+/zsAAAAAAAAAAAD+/zwAAAAAAAAAAAD//zcAAAAAAAAAAAD//zgAAAAAAAAAAAD//zkAAAAAAAAAAAD//zoAAAAAAAAAAAD//zsAAAAAAAAAAAD//zwAAAAAAAAAAAAAADcAAAAAAAAAAAAAADgAAAAAAAAAAAAAADkAAAAAAAAAAAAAADoAAAAAAAAAAAAAADsAAAAAAAAAAAAAADwAAAAAAAAAAAABADcAAAAAAAAAAAABADgAAAAAAAAAAAABADkAAAAAAAAAAAABADoAAAAAAAAAAAABADsAAAAAAAAAAAABADwAAAAAAAAAAAACADcAAAAAAAAAAAACADgAAAAAAAAAAAACADkAAAAAAAAAAAACADoAAAAAAAAAAAACADsAAAAAAAAAAAACADwAAAAAAAAAAAADADcAAAAAAAAAAAADADgAAAAAAAAAAAADADkAAAAAAAAAAAADADoAAAAAAAAAAAADADsAAAAAAAAAAAADADwAAAAAAAAAAAAEADcAAAAAAAAAAAAEADgAAAAAAAAAAAAEADkAAAAAAAAAAAAEADoAAAAAAAAAAAAEADsAAAAAAAAAAAAEADwAAAAAAAAAAAAFADcAAAAAAAAAAAAFADgAAAAAAAAAAAAFADkAAAAAAAAAAAAFADoAAAAAAAAAAAAFADsAAAAAAAAAAAAFADwAAAAAAAAAAAAGADcAAAAAAAAAAAAGADgAAAAAAAAAAAAGADkAAAAAAAAAAAAGADoAAAAAAAAAAAAGADsAAAAAAAAAAAAGADwAAAAAAAAAAAAHADcAAAAAAAAAAAAHADgAAAAAAAAAAAAHADkAAAAAAAAAAAAHADoAAAAAAAAAAAAHADsAAAAAAAAAAAAHADwAAAAAAAAAAAAIADcAAAAAAAAAAAAIADgAAAAAAAAAAAAIADkAAAAAAAAAAAAIADoAAAAAAAAAAAAIADsAAAAAAAAAAAAIADwAAAAAAAAAAAAJADcAAAAAAAAAAAAJADgAAAAAAAAAAAAJADkAAAAAAAAAAAAJADoAAAAAAAAAAAAJADsAAAAAAAAAAAAJADwAAAAAAAAAAAAKADcAAAAAAAAAAAAKADgAAAAAAAAAAAAKADkAAAAAAAAAAAAKADoAAAAAAAAAAAAKADsAAAAAAAAAAAAKADwAAAAAAAAAAAALADcAAAAAAAAAAAALADgAAAAAAAAAAAALADkAAAAAAAAAAAALADoAAAAAAAAAAAALADsAAAAAAAAAAAALADwAAAAAAAAAAAAMADcAAAAAAAAAAAAMADgAAAAAAAAAAAAMADkAAAAAAAAAAAAMADoAAAAAAAAAAAAMADsAAAAAAAAAAAAMADwAAAAAAAAAAAANADcAAAAAAAAAAAANADgAAAAAAAAAAAANADkAAAAAAAAAAAANADoAAAAAAAAAAAANADsAAAAAAAAAAAANADwAAAAAAAAAAAAOADcAAAAAAAAAAAAOADgAAAAAAAAAAAAOADkAAAAAAAAAAAAOADoAAAAAAAAAAAAOADsAAAAAAAAAAAAOADwAAAAAAAAAAAAPADcAAAAAAAAAAAAPADgAAAAAAAAAAAAPADkAAAAAAAAAAAAPADoAAAAAAAAAAAAPADsAAAAAAAAAAAAPADwAAAAAAAAAAAAQADcAAAAAAAAAAAAQADgAAAAAAAAAAAAQADkAAAAAAAAAAAAQADoAAAAAAAAAAAAQADsAAAAAAAAAAAAQADwAAAAAAAAAAAARADcAAAAAAAAAAAARADgAAAAAAAAAAAARADkAAAAAAAAAAAARADoAAAAAAAAAAAARADsAAAAAAAAAAAARADwAAAAAAAAAAAASADcAAAAAAAAAAAASADgAAAAAAAAAAAASADkAAAAAAAAAAAASADoAAAAAAAAAAAASADsAAAAAAAAAAAASADwAAAAAAAAAAAATADcAAAAAAAAAAAATADgAAAAAAAAAAAATADkAAAAAAAAAAAATADoAAAAAAAAAAAATADsAAAAAAAAAAAATADwAAAAAAAAAAAAUADcAAAAAAAAAAAAUADgAAAAAAAAAAAAUADkAAAAAAAAAAAAUADoAAAAAAAAAAAAUADsAAAAAAAAAAAAUADwAAAAAAAAAAAAVADcAAAAAAAAAAAAVADgAAAAAAAAAAAAVADkAAAAAAAAAAAAVADoAAAAAAAAAAAAVADsAAAAAAAAAAAAVADwAAAAAAAAAAAAWADcAAAAAAAAAAAAWADgAAAAAAAAAAAAWADkAAAAAAAAAAAAWADoAAAAAAAAAAAAWADsAAAAAAAAAAAAWADwAAAAAAAAAAAAXADcAAAAAAAAAAAAXADgAAAAAAAAAAAAXADkAAAAAAAAAAAAXADoAAAAAAAAAAAAXADsAAAAAAAAAAAAXADwAAAAAAAAAAAAYADcAAAAAAAAAAAAYADgAAAAAAAAAAAAYADkAAAAAAAAAAAAYADoAAAAAAAAAAAAYADsAAAAAAAAAAAAYADwAAAAAAAAAAAAVAD0AAAAAAAAAAAAVAD4AAAAAAAAAAAAVAD8AAAAAAAAAAAAVAEAAAAAAAAAAAAAVAEEAAAAAAAAAAAAVAEIAAAAAAAAAAAAVAEMAAAAAAAAAAAAVAEQAAAAAAAAAAAAVAEUAAAAAAAAAAAAVAEYAAAAAAAAAAAAVAEcAAAAAAAAAAAAVAEgAAAAAAAAAAAAVAEkAAAAAAAAAAAAVAEoAAAAAAAAAAAAVAEsAAAAAAAAAAAAVAEwAAAAAAAAAAAAVAE0AAAAAAAAAAAAVAE4AAAAAAAAAAAAVAE8AAAAAAAAAAAAVAFAAAAAAAAAAAAAVAFEAAAAAAAAAAAAVAFIAAAAAAAAAAAAVAFMAAAAAAAAAAAAVAFQAAAAAAAAAAAAVAFUAAAAAAAAAAAAVAFYAAAAAAAAAAAAVAFcAAAAAAAAAAAAVAFgAAAAAAAAAAAAVAFkAAAAAAAAAAAAVAFoAAAAAAAAAAAAVAFsAAAAAAAAAAAAWAD0AAAAAAAAAAAAWAD4AAAAAAAAAAAAWAD8AAAAAAAAAAAAWAEAAAAAAAAAAAAAWAEEAAAAAAAAAAAAWAEIAAAAAAAAAAAAWAEMAAAAAAAAAAAAWAEQAAAAAAAAAAAAWAEUAAAAAAAAAAAAWAEYAAAAAAAAAAAAWAEcAAAAAAAAAAAAWAEgAAAAAAAAAAAAWAEkAAAAAAAAAAAAWAEoAAAAAAAAAAAAWAEsAAAAAAAAAAAAWAEwAAAAAAAAAAAAWAE0AAAAAAAAAAAAWAE4AAAAAAAAAAAAWAE8AAAAAAAAAAAAWAFAAAAAAAAAAAAAWAFEAAAAAAAAAAAAWAFIAAAAAAAAAAAAWAFMAAAAAAAAAAAAWAFQAAAAAAAAAAAAWAFUAAAAAAAAAAAAWAFYAAAAAAAAAAAAWAFcAAAAAAAAAAAAWAFgAAAAAAAAAAAAWAFkAAAAAAAAAAAAWAFoAAAAAAAAAAAAWAFsAAAAAAAAAAAAXAD0AAAAAAAAAAAAXAD4AAAAAAAAAAAAXAD8AAAAAAAAAAAAXAEAAAAAAAAAAAAAXAEEAAAAAAAAAAAAXAEIAAAAAAAAAAAAXAEMAAAAAAAAAAAAXAEQAAAAAAAAAAAAXAEUAAAAAAAAAAAAXAEYAAAAAAAAAAAAXAEcAAAAAAAAAAAAXAEgAAAAAAAAAAAAXAEkAAAAAAAAAAAAXAEoAAAAAAAAAAAAXAEsAAAAAAAAAAAAXAEwAAAAAAAAAAAAXAE0AAAAAAAAAAAAXAE4AAAAAAAAAAAAXAE8AAAAAAAAAAAAXAFAAAAAAAAAAAAAXAFEAAAAAAAAAAAAXAFIAAAAAAAAAAAAXAFMAAAAAAAAAAAAXAFQAAAAAAAAAAAAXAFUAAAAAAAAAAAAXAFYAAAAAAAAAAAAXAFcAAAAAAAAAAAAXAFgAAAAAAAAAAAAXAFkAAAAAAAAAAAAXAFoAAAAAAAAAAAAXAFsAAAAAAAAAAAAYAD0AAAAAAAAAAAAYAD4AAAAAAAAAAAAYAD8AAAAAAAAAAAAYAEAAAAAAAAAAAAAYAEEAAAAAAAAAAAAYAEIAAAAAAAAAAAAYAEMAAAAAAAAAAAAYAEQAAAAAAAAAAAAYAEUAAAAAAAAAAAAYAEYAAAAAAAAAAAAYAEcAAAAAAAAAAAAYAEgAAAAAAAAAAAAYAEkAAAAAAAAAAAAYAEoAAAAAAAAAAAAYAEsAAAAAAAAAAAAYAEwAAAAAAAAAAAAYAE0AAAAAAAAAAAAYAE4AAAAAAAAAAAAYAE8AAAAAAAAAAAAYAFAAAAAAAAAAAAAYAFEAAAAAAAAAAAAYAFIAAAAAAAAAAAAYAFMAAAAAAAAAAAAYAFQAAAAAAAAAAAAYAFUAAAAAAAAAAAAYAFYAAAAAAAAAAAAYAFcAAAAAAAAAAAAYAFgAAAAAAAAAAAAYAFkAAAAAAAAAAAAYAFoAAAAAAAAAAAAYAFsAAAAAAAAAAADn/1kAAAAAAAAAAADn/1oAAAAAAAAAAADn/1sAAAAAAAAAAADo/1kAAAAAAAAAAADo/1oAAAAAAAAAAADo/1sAAAAAAAAAAADp/1kAAAAAAAAAAADp/1oAAAAAAAAAAADp/1sAAAAAAAAAAADq/1kAAAAAAAAAAADq/1oAAAAAAAAAAADq/1sAAAAAAAAAAADr/1kAAAAAAAAAAADr/1oAAAAAAAAAAADr/1sAAAAAAAAAAADs/1kAAAAAAAAAAADs/1oAAAAAAAAAAADs/1sAAAAAAAAAAADt/1kAAAAAAAAAAADt/1oAAAAAAAAAAADt/1sAAAAAAAAAAADu/1kAAAAAAAAAAADu/1oAAAAAAAAAAADu/1sAAAAAAAAAAADv/1kAAAAAAAAAAADv/1oAAAAAAAAAAADv/1sAAAAAAAAAAADw/1kAAAAAAAAAAADw/1oAAAAAAAAAAADw/1sAAAAAAAAAAADx/1kAAAAAAAAAAADx/1oAAAAAAAAAAADx/1sAAAAAAAAAAADy/1kAAAAAAAAAAADy/1oAAAAAAAAAAADy/1sAAAAAAAAAAADz/1kAAAAAAAAAAADz/1oAAAAAAAAAAADz/1sAAAAAAAAAAAD0/1kAAAAAAAAAAAD0/1oAAAAAAAAAAAD0/1sAAAAAAAAAAAD1/1kAAAAAAAAAAAD1/1oAAAAAAAAAAAD1/1sAAAAAAAAAAAD2/1kAAAAAAAAAAAD2/1oAAAAAAAAAAAD2/1sAAAAAAAAAAAD3/1kAAAAAAAAAAAD3/1oAAAAAAAAAAAD3/1sAAAAAAAAAAAD4/1kAAAAAAAAAAAD4/1oAAAAAAAAAAAD4/1sAAAAAAAAAAAD5/1kAAAAAAAAAAAD5/1oAAAAAAAAAAAD5/1sAAAAAAAAAAAD6/1kAAAAAAAAAAAD6/1oAAAAAAAAAAAD6/1sAAAAAAAAAAAD7/1kAAAAAAAAAAAD7/1oAAAAAAAAAAAD7/1sAAAAAAAAAAAD8/1kAAAAAAAAAAAD8/1oAAAAAAAAAAAD8/1sAAAAAAAAAAAD9/1kAAAAAAAAAAAD9/1oAAAAAAAAAAAD9/1sAAAAAAAAAAAD+/1kAAAAAAAAAAAD+/1oAAAAAAAAAAAD+/1sAAAAAAAAAAAD//1kAAAAAAAAAAAD//1oAAAAAAAAAAAD//1sAAAAAAAAAAAAAAFkAAAAAAAAAAAAAAFoAAAAAAAAAAAAAAFsAAAAAAAAAAAABAFkAAAAAAAAAAAABAFoAAAAAAAAAAAABAFsAAAAAAAAAAAACAFkAAAAAAAAAAAACAFoAAAAAAAAAAAACAFsAAAAAAAAAAAADAFkAAAAAAAAAAAADAFoAAAAAAAAAAAADAFsAAAAAAAAAAAAEAFkAAAAAAAAAAAAEAFoAAAAAAAAAAAAEAFsAAAAAAAAAAAAFAFkAAAAAAAAAAAAFAFoAAAAAAAAAAAAFAFsAAAAAAAAAAAAGAFkAAAAAAAAAAAAGAFoAAAAAAAAAAAAGAFsAAAAAAAAAAAAHAFkAAAAAAAAAAAAHAFoAAAAAAAAAAAAHAFsAAAAAAAAAAAAIAFkAAAAAAAAAAAAIAFoAAAAAAAAAAAAIAFsAAAAAAAAAAAAJAFkAAAAAAAAAAAAJAFoAAAAAAAAAAAAJAFsAAAAAAAAAAAAKAFkAAAAAAAAAAAAKAFoAAAAAAAAAAAAKAFsAAAAAAAAAAAALAFkAAAAAAAAAAAALAFoAAAAAAAAAAAALAFsAAAAAAAAAAAAMAFkAAAAAAAAAAAAMAFoAAAAAAAAAAAAMAFsAAAAAAAAAAAANAFkAAAAAAAAAAAANAFoAAAAAAAAAAAANAFsAAAAAAAAAAAAOAFkAAAAAAAAAAAAOAFoAAAAAAAAAAAAOAFsAAAAAAAAAAAAPAFkAAAAAAAAAAAAPAFoAAAAAAAAAAAAPAFsAAAAAAAAAAAAQAFkAAAAAAAAAAAAQAFoAAAAAAAAAAAAQAFsAAAAAAAAAAAARAFkAAAAAAAAAAAARAFoAAAAAAAAAAAARAFsAAAAAAAAAAAASAFkAAAAAAAAAAAASAFoAAAAAAAAAAAASAFsAAAAAAAAAAAATAFkAAAAAAAAAAAATAFoAAAAAAAAAAAATAFsAAAAAAAAAAAAUAFkAAAAAAAAAAAAUAFoAAAAAAAAAAAAUAFsAAAAAAAAAAADt/0kAAAAAAAAAAADt/0oAAAAAAAAAAADt/0sAAAAAAAAAAADt/0wAAAAAAAAAAADu/0kAAAAAAAAAAADu/0oAAAAAAAAAAADu/0sAAAAAAAAAAADu/0wAAAAAAAAAAADv/0kAAAAAAAAAAADv/0oAAAAAAAAAAADv/0sAAAAAAAAAAADv/0wAAAAAAAAAAADw/0kAAAAAAAAAAADw/0oAAAAAAAAAAADw/0sAAAAAAAAAAADw/0wAAAAAAAAAAADx/0kAAAAAAAAAAADx/0oAAAAAAAAAAADx/0sAAAAAAAAAAADx/0wAAAAAAAAAAADy/0kAAAAAAAAAAADy/0oAAAAAAAAAAADy/0sAAAAAAAAAAADy/0wAAAAAAAAAAAAOAD0AAAAAAAAAAAAOAD4AAAAAAAAAAAAOAD8AAAAAAAAAAAAOAEAAAAAAAAAAAAAOAEEAAAAAAAAAAAAOAEIAAAAAAAAAAAAOAEMAAAAAAAAAAAAOAEQAAAAAAAAAAAAOAEUAAAAAAAAAAAAOAEYAAAAAAAAAAAAOAEcAAAAAAAAAAAAOAEgAAAAAAAAAAAAOAEkAAAAAAAAAAAAOAEoAAAAAAAAAAAAOAEsAAAAAAAAAAAAOAEwAAAAAAAAAAAAOAE0AAAAAAAAAAAAOAE4AAAAAAAAAAAAOAE8AAAAAAAAAAAAOAFAAAAAAAAAAAAAOAFEAAAAAAAAAAAAOAFIAAAAAAAAAAAAOAFMAAAAAAAAAAAAOAFQAAAAAAAAAAAAOAFUAAAAAAAAAAAAPAD0AAAAAAAAAAAAPAD4AAAAAAAAAAAAPAD8AAAAAAAAAAAAPAEAAAAAAAAAAAAAPAEEAAAAAAAAAAAAPAEIAAAAAAAAAAAAPAEMAAAAAAAAAAAAPAEQAAAAAAAAAAAAPAEUAAAAAAAAAAAAPAEYAAAAAAAAAAAAPAEcAAAAAAAAAAAAPAEgAAAAAAAAAAAAPAEkAAAAAAAAAAAAPAEoAAAAAAAAAAAAPAEsAAAAAAAAAAAAPAEwAAAAAAAAAAAAPAE0AAAAAAAAAAAAPAE4AAAAAAAAAAAAPAE8AAAAAAAAAAAAPAFAAAAAAAAAAAAAPAFEAAAAAAAAAAAAPAFIAAAAAAAAAAAAPAFMAAAAAAAAAAAAPAFQAAAAAAAAAAAAPAFUAAAAAAAAAAAAQAD0AAAAAAAAAAAAQAD4AAAAAAAAAAAAQAD8AAAAAAAAAAAAQAEAAAAAAAAAAAAAQAEEAAAAAAAAAAAAQAEIAAAAAAAAAAAAQAEMAAAAAAAAAAAAQAEQAAAAAAAAAAAAQAEUAAAAAAAAAAAAQAEYAAAAAAAAAAAAQAEcAAAAAAAAAAAAQAEgAAAAAAAAAAAAQAEkAAAAAAAAAAAAQAEoAAAAAAAAAAAAQAEsAAAAAAAAAAAAQAEwAAAAAAAAAAAAQAE0AAAAAAAAAAAAQAE4AAAAAAAAAAAAQAE8AAAAAAAAAAAAQAFAAAAAAAAAAAAAQAFEAAAAAAAAAAAAQAFIAAAAAAAAAAAAQAFMAAAAAAAAAAAAQAFQAAAAAAAAAAAAQAFUAAAAAAAAAAAA=") tile_set = ExtResource("24_uiy5k") + +[node name="DarkMaterialBall" parent="." instance=ExtResource("30_mu7ca")] +position = Vector2(-164, 1283) + +[node name="DarkMaterialBall2" parent="." instance=ExtResource("30_mu7ca")] +position = Vector2(116, 1076) + +[node name="DarkMaterialBall3" parent="." instance=ExtResource("30_mu7ca")] +position = Vector2(33, 1188) + +[node name="DarkMaterialBall4" parent="." instance=ExtResource("30_mu7ca")] +position = Vector2(-78, 1192) diff --git a/_tileset/level1.tres b/_tileset/level1.tres index 30014b8..b48ecbd 100644 --- a/_tileset/level1.tres +++ b/_tileset/level1.tres @@ -1,6 +1,8 @@ -[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://cup1q1upvp18h"] +[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://cup1q1upvp18h"] [ext_resource type="Texture2D" uid="uid://7psxuet3jk1p" path="res://_asset/ksw/basicTile.png" id="1_ln1fl"] +[ext_resource type="Texture2D" uid="uid://dd622t4mw5vva" path="res://_asset/ksw/basicTile01.png" id="2_mucy5"] +[ext_resource type="Texture2D" uid="uid://cwet2kw1mngmf" path="res://_asset/ksw/basicTile02.png" id="3_u6jqb"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ln1fl"] texture = ExtResource("1_ln1fl") @@ -74,6 +76,17 @@ texture_region_size = Vector2i(96, 96) 3:4/0 = 0 1:4/0 = 0 +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u6jqb"] +texture = ExtResource("2_mucy5") +texture_region_size = Vector2i(96, 96) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wtljp"] +texture = ExtResource("3_u6jqb") +texture_region_size = Vector2i(96, 96) +10:6/0 = 0 + [resource] tile_size = Vector2i(96, 96) sources/0 = SubResource("TileSetAtlasSource_ln1fl") +sources/1 = SubResource("TileSetAtlasSource_u6jqb") +sources/2 = SubResource("TileSetAtlasSource_wtljp") diff --git a/addons/reedcomponent/grap_hook/garpping_hook_v2.tscn b/addons/reedcomponent/grap_hook/garpping_hook_v2.tscn index 21cb463..0449388 100644 --- a/addons/reedcomponent/grap_hook/garpping_hook_v2.tscn +++ b/addons/reedcomponent/grap_hook/garpping_hook_v2.tscn @@ -13,5 +13,5 @@ width = 8.0 [node name="RayCast2D" type="RayCast2D" parent="."] unique_name_in_owner = true target_position = Vector2(80, 0) -collision_mask = 36 +collision_mask = 20 collide_with_areas = true diff --git a/addons/reedcomponent/grap_hook/garpping_hook_v_2.gd b/addons/reedcomponent/grap_hook/garpping_hook_v_2.gd index f89ed35..d122fc7 100644 --- a/addons/reedcomponent/grap_hook/garpping_hook_v_2.gd +++ b/addons/reedcomponent/grap_hook/garpping_hook_v_2.gd @@ -19,8 +19,8 @@ var _tween: Tween const GRAPABLE_GROUP = &"GRAPABLE" signal stretching_finished(reach_limit: bool, anchor_node: Node2D) -## 钩爪击中物体信号,target 是被击中的物体,hit_pos 是击中点世界坐标 -signal hook_hit(target: Node2D, hit_pos: Vector2) +## 钩爪击中物体信号,target 是被击中的物体,hit_pos 是击中点世界坐标,hook 是钩爪实例 +signal hook_hit(target: Node2D, hit_pos: Vector2, hook: Hook) ## ================ ## Private Field @@ -73,6 +73,15 @@ func end_stretching(force_end: bool = false) -> bool: func is_stretching() -> bool: return _is_stretching +## 获取当前飞行方向(可被外部复写) +func get_stretching_dir() -> Vector2: + return _stretching_dir.normalized() + +## 设置飞行方向(供外部物体修改) +func set_stretching_dir(dir: Vector2) -> void: + _stretching_dir = dir.normalized() + _dir_id = _get_direction_id(_stretching_dir, 8) + # ================= # Update # ================= @@ -93,8 +102,11 @@ func _update_stretching(delta: float) -> void: var next_length := _current_length + stretching_speed * delta next_length = min(next_length, max_length) + # 使用 getter 获取当前方向(允许外部复写) + var current_dir := get_stretching_dir() + # 先用「下一幀長度」做 Ray - ray.target_position = _stretching_dir * next_length + ray.target_position = current_dir * next_length ray.force_raycast_update() # ===== 命中檢測(最高優先)===== @@ -104,7 +116,7 @@ func _update_stretching(delta: float) -> void: var hit_pos := ray.get_collision_point() _current_length = global_position.distance_to(hit_pos) - ray.target_position = _stretching_dir * _current_length + ray.target_position = current_dir * _current_length _handle_hit(collider as Node2D, hit_pos) return @@ -128,17 +140,15 @@ func _handle_hit(target: Node2D, hit_pos: Vector2) -> void: ray.target_position = to_local(hit_pos) - # 如果 target 有 on_hook_hit 方法,调用它 + # 如果 target 有 on_hook_hit 方法,调用它(传入钩爪实例) if target.has_method(&"on_hook_hit"): - target.on_hook_hit(hit_pos) - - if target.owner.has_method(&"on_hook_hit"): - target.owner.on_hook_hit(hit_pos) + target.on_hook_hit(hit_pos, self) var reach_max := is_equal_approx(_current_length, max_length) var anchor := _create_anchor_on_node(target, hit_pos) stretching_finished.emit(reach_max, anchor) + hook_hit.emit(target, hit_pos, self) ## 釋放鉤爪(清理 Anchor 與狀態) func _release_hook() -> void: diff --git a/project.godot b/project.godot index 0fe3c66..ab3ebc9 100644 --- a/project.godot +++ b/project.godot @@ -37,7 +37,8 @@ enabled=PackedStringArray("res://addons/reedcamera/plugin.cfg", "res://addons/re [file_customization] folder_colors={ -"res://_shared/": "pink" +"res://_shared/": "pink", +"res://_tileset/": "green" } [global_group] @@ -96,4 +97,3 @@ grap_hook={ 2d_physics/layer_3="Environment" 2d_physics/layer_4="Damage" 2d_physics/layer_5="Collectable" -2d_physics/layer_6="OneWayPlateform"