From ebc0133a82ec0530c4fc2f576808dee45aa03060 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Fri, 13 Feb 2026 00:55:15 +0300 Subject: [PATCH] Added high wall rays --- .gitignore | 2 ++ game/characters/enemies/abstract_cultist.gd | 7 ++++-- game/characters/enemies/abstract_cultist.tscn | 25 ++++++++++++------- game/characters/enemies/cultist_sprite.tscn | 2 +- .../enemies/state_machine/chase_left_state.gd | 3 ++- .../state_machine/chase_right_state.gd | 3 ++- .../enemies/state_machine/chase_state.gd | 4 +-- .../state_machine/look_around_state.gd | 3 ++- .../enemies/state_machine/move_state.gd | 4 ++- .../enemies/state_machine/walk_left_state.gd | 3 ++- .../enemies/state_machine/walk_right_state.gd | 3 ++- .../enemies/state_machine/walk_state.gd | 2 +- game/characters/player/player_sprite.tscn | 2 +- .../player/state_machine/dead_state.gd | 6 ++++- .../player/state_machine/look_around_state.gd | 6 ++++- game/levels/level_7.tscn | 21 ++++++++++------ 16 files changed, 65 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 916ac9d..70993ef 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ mono_crash.*.json export +*.tmp + diff --git a/game/characters/enemies/abstract_cultist.gd b/game/characters/enemies/abstract_cultist.gd index cf9f23b..f37c14d 100644 --- a/game/characters/enemies/abstract_cultist.gd +++ b/game/characters/enemies/abstract_cultist.gd @@ -15,8 +15,11 @@ var target_x := 0.0 @onready var sprite : AnimatedSprite2D = $CultistSprite -@onready var left_wall_ray : RayCast2D = $%LeftWallRay -@onready var right_wall_ray : RayCast2D = $%RightWallRay +@onready var left_wall_high_ray : RayCast2D = $WallCheckHigh/LeftWallRay +@onready var right_wall_high_ray : RayCast2D = $WallCheckHigh/RightWallRay + +@onready var left_wall_low_ray : RayCast2D = $WallCheckLow/LeftWallRay +@onready var right_wall_low_ray : RayCast2D = $WallCheckLow/RightWallRay @onready var left_player_close_ray : RayCast2D = $%LeftPlayerCloseRay @onready var right_player_close_ray : RayCast2D = $%RightPlayerCloseRay diff --git a/game/characters/enemies/abstract_cultist.tscn b/game/characters/enemies/abstract_cultist.tscn index 491db67..667c8f0 100644 --- a/game/characters/enemies/abstract_cultist.tscn +++ b/game/characters/enemies/abstract_cultist.tscn @@ -34,19 +34,26 @@ script = ExtResource("1_2wrno") position = Vector2(0, 2) shape = SubResource("CapsuleShape2D_mocsw") -[node name="WallCheck" type="Node2D" parent="." unique_id=782156094] -position = Vector2(0, 9) +[node name="WallCheckHigh" type="Node2D" parent="." unique_id=1697845810] +position = Vector2(0, -8) -[node name="LeftWallRay" type="RayCast2D" parent="WallCheck" unique_id=521416854] -unique_name_in_owner = true +[node name="LeftWallRay" type="RayCast2D" parent="WallCheckHigh" unique_id=1026693538] target_position = Vector2(-16, 0) -[node name="RightWallRay" type="RayCast2D" parent="WallCheck" unique_id=1457669135] -unique_name_in_owner = true +[node name="RightWallRay" type="RayCast2D" parent="WallCheckHigh" unique_id=1129233918] +target_position = Vector2(16, 0) + +[node name="WallCheckLow" type="Node2D" parent="." unique_id=782156094] +position = Vector2(0, 9) + +[node name="LeftWallRay" type="RayCast2D" parent="WallCheckLow" unique_id=521416854] +target_position = Vector2(-16, 0) + +[node name="RightWallRay" type="RayCast2D" parent="WallCheckLow" unique_id=1457669135] target_position = Vector2(16, 0) [node name="PlayerCloseCheck" type="Node2D" parent="." unique_id=1593775088] -position = Vector2(0, 9) +position = Vector2(0, -8) [node name="LeftPlayerCloseRay" type="RayCast2D" parent="PlayerCloseCheck" unique_id=947570027] unique_name_in_owner = true @@ -59,7 +66,7 @@ target_position = Vector2(48, 0) collision_mask = 0 [node name="PlayerDistantCheck" type="Node2D" parent="." unique_id=1597489123] -position = Vector2(0, 9) +position = Vector2(0, -8) [node name="LeftPlayerDistantRay" type="RayCast2D" parent="PlayerDistantCheck" unique_id=1491085518] unique_name_in_owner = true @@ -132,7 +139,7 @@ cultist = NodePath("../..") [node name="ChaseRightState" parent="CultistStateMachine" unique_id=383038915 node_paths=PackedStringArray("look_around_state", "jump_state", "fall_state", "cultist") instance=ExtResource("5_tu2pi")] script = ExtResource("14_cqp7f") look_around_state = NodePath("../LookAroundState") -jump_state = NodePath(".") +jump_state = NodePath("../JumpRightState") fall_state = NodePath("../FallState") cultist = NodePath("../..") diff --git a/game/characters/enemies/cultist_sprite.tscn b/game/characters/enemies/cultist_sprite.tscn index f081458..e3532c7 100644 --- a/game/characters/enemies/cultist_sprite.tscn +++ b/game/characters/enemies/cultist_sprite.tscn @@ -391,5 +391,5 @@ animations = [{ [node name="CultistSprite" type="AnimatedSprite2D" unique_id=351120861] material = SubResource("ShaderMaterial_vecdo") sprite_frames = SubResource("SpriteFrames_2wrno") -animation = &"fall_left" +animation = &"idle" script = ExtResource("3_ef0vi") diff --git a/game/characters/enemies/state_machine/chase_left_state.gd b/game/characters/enemies/state_machine/chase_left_state.gd index 020cf19..c33fe17 100644 --- a/game/characters/enemies/state_machine/chase_left_state.gd +++ b/game/characters/enemies/state_machine/chase_left_state.gd @@ -3,7 +3,8 @@ extends CultistChaseState func init() -> void: _direction = DIRECTION_LEFT - _wall_ray_cast = cultist.left_wall_ray + _wall_high_ray_cast = cultist.left_wall_high_ray + _wall_low_ray_cast = cultist.left_wall_low_ray _player_ray_cast = cultist.left_player_distant_ray diff --git a/game/characters/enemies/state_machine/chase_right_state.gd b/game/characters/enemies/state_machine/chase_right_state.gd index 30ff40a..f98af3d 100644 --- a/game/characters/enemies/state_machine/chase_right_state.gd +++ b/game/characters/enemies/state_machine/chase_right_state.gd @@ -3,7 +3,8 @@ extends CultistChaseState func init() -> void: _direction = DIRECTION_RIGHT - _wall_ray_cast = cultist.right_wall_ray + _wall_high_ray_cast = cultist.right_wall_high_ray + _wall_low_ray_cast = cultist.right_wall_low_ray _player_ray_cast = cultist.right_player_distant_ray diff --git a/game/characters/enemies/state_machine/chase_state.gd b/game/characters/enemies/state_machine/chase_state.gd index ec9cbbe..35306db 100644 --- a/game/characters/enemies/state_machine/chase_state.gd +++ b/game/characters/enemies/state_machine/chase_state.gd @@ -15,9 +15,9 @@ func physics_process(delta: float) -> void: if player != null: cultist.target_x = player.position.x - if _is_target_reached(): + if _is_target_reached() or _wall_high_ray_cast.is_colliding(): switch_state.emit(look_around_state) - elif _wall_ray_cast.is_colliding(): + elif _wall_low_ray_cast.is_colliding(): switch_state.emit(jump_state) else: cultist.update_x_velocity(_direction, cultist.MAX_CHASE_SPEED, delta) diff --git a/game/characters/enemies/state_machine/look_around_state.gd b/game/characters/enemies/state_machine/look_around_state.gd index f5b781c..39d42ab 100644 --- a/game/characters/enemies/state_machine/look_around_state.gd +++ b/game/characters/enemies/state_machine/look_around_state.gd @@ -12,7 +12,7 @@ var state_by_ray_cast : Dictionary[RayCast2D, CultistState] func enter() -> void: - cultist.sprite.animation_finished.connect(_on_animation_finished, CONNECT_ONE_SHOT) + cultist.sprite.animation_finished.connect(_on_animation_finished) cultist.sprite.play(CultistSprite.LOOK_AROUND_ANIMATIONS.pick_random()) cultist.velocity = Vector2.ZERO cultist._set_ray_cast_enable(cultist.left_player_close_ray, true) @@ -36,6 +36,7 @@ func physics_process(_delta: float) -> void: func exit() -> void: + cultist.sprite.animation_finished.disconnect(_on_animation_finished) cultist._set_ray_cast_enable(cultist.left_player_close_ray, false) cultist._set_ray_cast_enable(cultist.right_player_close_ray, false) diff --git a/game/characters/enemies/state_machine/move_state.gd b/game/characters/enemies/state_machine/move_state.gd index 28dc118..9e95508 100644 --- a/game/characters/enemies/state_machine/move_state.gd +++ b/game/characters/enemies/state_machine/move_state.gd @@ -9,7 +9,9 @@ extends CultistState @warning_ignore("unused_private_class_variable") var _direction := 0 @warning_ignore("unused_private_class_variable") -var _wall_ray_cast : RayCast2D +var _wall_high_ray_cast : RayCast2D +@warning_ignore("unused_private_class_variable") +var _wall_low_ray_cast : RayCast2D var _player_ray_cast : RayCast2D diff --git a/game/characters/enemies/state_machine/walk_left_state.gd b/game/characters/enemies/state_machine/walk_left_state.gd index 676a382..f7193e2 100644 --- a/game/characters/enemies/state_machine/walk_left_state.gd +++ b/game/characters/enemies/state_machine/walk_left_state.gd @@ -3,7 +3,8 @@ extends CultistWalkState func init() -> void: _direction = DIRECTION_LEFT - _wall_ray_cast = cultist.left_wall_ray + _wall_high_ray_cast = cultist.left_wall_high_ray + _wall_low_ray_cast = cultist.left_wall_low_ray _player_ray_cast = cultist.left_player_distant_ray diff --git a/game/characters/enemies/state_machine/walk_right_state.gd b/game/characters/enemies/state_machine/walk_right_state.gd index 68e759f..cc25ce0 100644 --- a/game/characters/enemies/state_machine/walk_right_state.gd +++ b/game/characters/enemies/state_machine/walk_right_state.gd @@ -3,7 +3,8 @@ extends CultistWalkState func init() -> void: _direction = DIRECTION_RIGHT - _wall_ray_cast = cultist.right_wall_ray + _wall_high_ray_cast = cultist.right_wall_high_ray + _wall_low_ray_cast = cultist.right_wall_low_ray _player_ray_cast = cultist.right_player_distant_ray diff --git a/game/characters/enemies/state_machine/walk_state.gd b/game/characters/enemies/state_machine/walk_state.gd index b5f4828..a2571dc 100644 --- a/game/characters/enemies/state_machine/walk_state.gd +++ b/game/characters/enemies/state_machine/walk_state.gd @@ -15,7 +15,7 @@ func physics_process(delta: float) -> void: if player != null: switch_state.emit(chase_state) else: - if _wall_ray_cast.is_colliding(): + if _wall_low_ray_cast.is_colliding() or _wall_high_ray_cast.is_colliding(): var stream := SoundManager.sfx_stream_player_lost SoundManager.play_sfx_stream(stream, cultist.global_position) switch_state.emit(another_direction_walk_state) diff --git a/game/characters/player/player_sprite.tscn b/game/characters/player/player_sprite.tscn index e087b37..3b9863c 100644 --- a/game/characters/player/player_sprite.tscn +++ b/game/characters/player/player_sprite.tscn @@ -430,5 +430,5 @@ animations = [{ [node name="PlayerSprite2D" type="AnimatedSprite2D" unique_id=259457082] material = SubResource("ShaderMaterial_i05k5") sprite_frames = SubResource("SpriteFrames_v8w1g") -animation = &"fall_right" +animation = &"idle" script = ExtResource("3_ulfbe") diff --git a/game/characters/player/state_machine/dead_state.gd b/game/characters/player/state_machine/dead_state.gd index 3f185e7..ff671f6 100644 --- a/game/characters/player/state_machine/dead_state.gd +++ b/game/characters/player/state_machine/dead_state.gd @@ -4,13 +4,17 @@ extends PlayerState func enter() -> void: player.sprite.speed_scale = 1 SoundManager.play_sfx_stream(SoundManager.sfx_stream_death, player.global_position) - player.sprite.animation_finished.connect(_on_aniimation_finished, CONNECT_ONE_SHOT) + player.sprite.animation_finished.connect(_on_aniimation_finished) player.process_mode = Node.PROCESS_MODE_ALWAYS process_mode = Node.PROCESS_MODE_ALWAYS player.sprite.play(PlayerSprite.ANIMATION_DEATH) get_tree().paused = true +func exit() -> void: + player.sprite.animation_finished.disconnect(_on_aniimation_finished) + + func physics_process(_delta: float) -> void: pass diff --git a/game/characters/player/state_machine/look_around_state.gd b/game/characters/player/state_machine/look_around_state.gd index d369ca6..ee8a8e2 100644 --- a/game/characters/player/state_machine/look_around_state.gd +++ b/game/characters/player/state_machine/look_around_state.gd @@ -3,10 +3,14 @@ extends PlayerState func enter() -> void: player.sprite.speed_scale = 1 - player.sprite.animation_finished.connect(_on_animation_finished, CONNECT_ONE_SHOT) + player.sprite.animation_finished.connect(_on_animation_finished) player.sprite.play(_get_animation()) +func exit() -> void: + player.sprite.animation_finished.disconnect(_on_animation_finished) + + func _on_animation_finished() -> void: switch_state.emit(idle_state) diff --git a/game/levels/level_7.tscn b/game/levels/level_7.tscn index 857ffe1..0a62ec4 100644 --- a/game/levels/level_7.tscn +++ b/game/levels/level_7.tscn @@ -214,60 +214,67 @@ position = Vector2(2304, 2448) [node name="Right_1" parent="Cutscene/EnemyWaves/WaveThree" index="0" unique_id=1741494130 instance=ExtResource("11_6yudq")] position = Vector2(-69, 0) +animation = &"idle" [node name="Right_2" parent="Cutscene/EnemyWaves/WaveThree" index="1" unique_id=761362258 instance=ExtResource("11_6yudq")] material = ExtResource("13_x83dg") position = Vector2(-77, 0) +animation = &"idle" [node name="Right_3" parent="Cutscene/EnemyWaves/WaveThree" index="2" unique_id=418001405 instance=ExtResource("11_6yudq")] material = SubResource("ShaderMaterial_6yudq") position = Vector2(-87, 0) +animation = &"idle" [node name="Right_4" parent="Cutscene/EnemyWaves/WaveThree" index="3" unique_id=1330937276 instance=ExtResource("11_6yudq")] position = Vector2(-95, 0) +animation = &"idle" [node name="Right_5" parent="Cutscene/EnemyWaves/WaveThree" index="4" unique_id=1285782564 instance=ExtResource("11_6yudq")] material = SubResource("ShaderMaterial_8x4ch") position = Vector2(-104, 0) +animation = &"idle" [node name="Right_6" parent="Cutscene/EnemyWaves/WaveThree" index="5" unique_id=348811069 instance=ExtResource("11_6yudq")] material = ExtResource("13_x83dg") position = Vector2(-113, 0) +animation = &"idle" [node name="Right_7" parent="Cutscene/EnemyWaves/WaveThree" index="6" unique_id=1822852735 instance=ExtResource("11_6yudq")] position = Vector2(-120, 0) +animation = &"idle" [node name="Left_1" parent="Cutscene/EnemyWaves/WaveThree" index="7" unique_id=2036807955 instance=ExtResource("11_6yudq")] material = SubResource("ShaderMaterial_x83dg") position = Vector2(78, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_2" parent="Cutscene/EnemyWaves/WaveThree" index="8" unique_id=1125192387 instance=ExtResource("11_6yudq")] position = Vector2(86, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_3" parent="Cutscene/EnemyWaves/WaveThree" index="9" unique_id=1717461753 instance=ExtResource("11_6yudq")] material = SubResource("ShaderMaterial_jbfb3") position = Vector2(95, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_4" parent="Cutscene/EnemyWaves/WaveThree" index="10" unique_id=1540913182 instance=ExtResource("11_6yudq")] material = ExtResource("13_x83dg") position = Vector2(105, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_5" parent="Cutscene/EnemyWaves/WaveThree" index="11" unique_id=1177455845 instance=ExtResource("11_6yudq")] position = Vector2(115, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_6" parent="Cutscene/EnemyWaves/WaveThree" index="12" unique_id=1103369493 instance=ExtResource("11_6yudq")] position = Vector2(123, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="Left_7" parent="Cutscene/EnemyWaves/WaveThree" index="13" unique_id=1686075717 instance=ExtResource("11_6yudq")] material = ExtResource("13_x83dg") position = Vector2(131, 0) -animation = &"look_around_front_2" +animation = &"idle" [node name="WaveOne" type="Node2D" parent="Cutscene/EnemyWaves" index="1" unique_id=122551187]