From 0dff01da115f7582e9593f370df6c163e160e6f7 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Thu, 12 Feb 2026 21:44:23 +0300 Subject: [PATCH] Added cultist jump state --- game/characters/enemies/abstract_cultist.gd | 7 +++++++ game/characters/enemies/abstract_cultist.tscn | 18 ++++++++++++++-- .../enemies/state_machine/chase_state.gd | 5 ++++- .../state_machine/cultist_jump_left_state.gd | 7 +++++++ .../cultist_jump_left_state.gd.uid | 1 + .../state_machine/cultist_jump_right_state.gd | 7 +++++++ .../cultist_jump_right_state.gd.uid | 1 + .../enemies/state_machine/cultist_state.gd | 4 ++++ .../enemies/state_machine/jump_state.gd | 21 +++++++++++++++++++ .../enemies/state_machine/jump_state.gd.uid | 1 + .../enemies/state_machine/move_state.gd | 4 ---- 11 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 game/characters/enemies/state_machine/cultist_jump_left_state.gd create mode 100644 game/characters/enemies/state_machine/cultist_jump_left_state.gd.uid create mode 100644 game/characters/enemies/state_machine/cultist_jump_right_state.gd create mode 100644 game/characters/enemies/state_machine/cultist_jump_right_state.gd.uid create mode 100644 game/characters/enemies/state_machine/jump_state.gd create mode 100644 game/characters/enemies/state_machine/jump_state.gd.uid diff --git a/game/characters/enemies/abstract_cultist.gd b/game/characters/enemies/abstract_cultist.gd index 7d0a5ab..cf9f23b 100644 --- a/game/characters/enemies/abstract_cultist.gd +++ b/game/characters/enemies/abstract_cultist.gd @@ -5,6 +5,9 @@ extends CharacterBody2D const MAX_WALK_SPEED = 85 const MAX_CHASE_SPEED = 170 const ACCELERATION = 600.0 +const JUMP_VELOCITY = 333.0 +const JUMP_GRAVITY_FACTOR = 1.0 +const FALL_GRAVITY_FACTOR = 1.5 var target_x := 0.0 @@ -45,5 +48,9 @@ func update_x_velocity(direction: int, max_speed: float, delta: float) -> void: velocity.x = move_toward(velocity.x, direction * max_speed, ACCELERATION * delta) +func get_gravity_factor() -> float: + return JUMP_GRAVITY_FACTOR if velocity.y < 0.0 else FALL_GRAVITY_FACTOR + + func _set_ray_cast_enable(ray_cast: RayCast2D, enabled: bool) -> void: ray_cast.process_mode = Node.PROCESS_MODE_INHERIT if enabled else Node.PROCESS_MODE_DISABLED diff --git a/game/characters/enemies/abstract_cultist.tscn b/game/characters/enemies/abstract_cultist.tscn index 3d241fd..491db67 100644 --- a/game/characters/enemies/abstract_cultist.tscn +++ b/game/characters/enemies/abstract_cultist.tscn @@ -12,7 +12,9 @@ [ext_resource type="Script" uid="uid://hgn4yll571hp" path="res://game/characters/enemies/state_machine/walk_left_state.gd" id="11_lh753"] [ext_resource type="Script" uid="uid://bwwhmjxhg2adp" path="res://game/characters/enemies/state_machine/walk_right_state.gd" id="12_lh753"] [ext_resource type="Script" uid="uid://cn2lfl4kuxvjk" path="res://game/characters/enemies/state_machine/chase_left_state.gd" id="13_42ivi"] +[ext_resource type="Script" uid="uid://cqlym4lqahsd3" path="res://game/characters/enemies/state_machine/cultist_jump_left_state.gd" id="14_42ivi"] [ext_resource type="Script" uid="uid://3kl84tu1vwiv" path="res://game/characters/enemies/state_machine/chase_right_state.gd" id="14_cqp7f"] +[ext_resource type="Script" uid="uid://cf52bjcpasft1" path="res://game/characters/enemies/state_machine/cultist_jump_right_state.gd" id="15_cqp7f"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_mocsw"] radius = 4.0 @@ -120,14 +122,26 @@ another_direction_walk_state = NodePath("../WalkLeftState") fall_state = NodePath("../FallRightState") cultist = NodePath("../..") -[node name="ChaseLeftState" parent="CultistStateMachine" unique_id=209480830 node_paths=PackedStringArray("look_around_state", "fall_state", "cultist") instance=ExtResource("5_tu2pi")] +[node name="ChaseLeftState" parent="CultistStateMachine" unique_id=209480830 node_paths=PackedStringArray("look_around_state", "jump_state", "fall_state", "cultist") instance=ExtResource("5_tu2pi")] script = ExtResource("13_42ivi") look_around_state = NodePath("../LookAroundState") +jump_state = NodePath("../JumpLeftState") fall_state = NodePath("../FallState") cultist = NodePath("../..") -[node name="ChaseRightState" parent="CultistStateMachine" unique_id=383038915 node_paths=PackedStringArray("look_around_state", "fall_state", "cultist") instance=ExtResource("5_tu2pi")] +[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(".") fall_state = NodePath("../FallState") cultist = NodePath("../..") + +[node name="JumpLeftState" parent="CultistStateMachine" unique_id=739226464 node_paths=PackedStringArray("fall_state", "cultist") instance=ExtResource("5_tu2pi")] +script = ExtResource("14_42ivi") +fall_state = NodePath("../FallLeftState") +cultist = NodePath("../..") + +[node name="JumpRightState" parent="CultistStateMachine" unique_id=756126836 node_paths=PackedStringArray("fall_state", "cultist") instance=ExtResource("5_tu2pi")] +script = ExtResource("15_cqp7f") +fall_state = NodePath("../FallRightState") +cultist = NodePath("../..") diff --git a/game/characters/enemies/state_machine/chase_state.gd b/game/characters/enemies/state_machine/chase_state.gd index 9d8fe47..ec9cbbe 100644 --- a/game/characters/enemies/state_machine/chase_state.gd +++ b/game/characters/enemies/state_machine/chase_state.gd @@ -4,6 +4,7 @@ extends CultistMoveState @export var look_around_state: CultistState +@export var jump_state: CultistState func physics_process(delta: float) -> void: @@ -14,8 +15,10 @@ func physics_process(delta: float) -> void: if player != null: cultist.target_x = player.position.x - if _is_target_reached() or _wall_ray_cast.is_colliding(): + if _is_target_reached(): switch_state.emit(look_around_state) + elif _wall_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/cultist_jump_left_state.gd b/game/characters/enemies/state_machine/cultist_jump_left_state.gd new file mode 100644 index 0000000..c452d53 --- /dev/null +++ b/game/characters/enemies/state_machine/cultist_jump_left_state.gd @@ -0,0 +1,7 @@ +extends CultistJumpState + + +func enter() -> void: + super.enter() + _direction = DIRECTION_LEFT + cultist.sprite.play(CultistSprite.ANIMATION_JUMP_LEFT) diff --git a/game/characters/enemies/state_machine/cultist_jump_left_state.gd.uid b/game/characters/enemies/state_machine/cultist_jump_left_state.gd.uid new file mode 100644 index 0000000..57a5b88 --- /dev/null +++ b/game/characters/enemies/state_machine/cultist_jump_left_state.gd.uid @@ -0,0 +1 @@ +uid://cqlym4lqahsd3 diff --git a/game/characters/enemies/state_machine/cultist_jump_right_state.gd b/game/characters/enemies/state_machine/cultist_jump_right_state.gd new file mode 100644 index 0000000..fe06ae3 --- /dev/null +++ b/game/characters/enemies/state_machine/cultist_jump_right_state.gd @@ -0,0 +1,7 @@ +extends CultistJumpState + + +func enter() -> void: + super.enter() + _direction = DIRECTION_RIGHT + cultist.sprite.play(CultistSprite.ANIMATION_JUMP_RIGHT) diff --git a/game/characters/enemies/state_machine/cultist_jump_right_state.gd.uid b/game/characters/enemies/state_machine/cultist_jump_right_state.gd.uid new file mode 100644 index 0000000..2ec531b --- /dev/null +++ b/game/characters/enemies/state_machine/cultist_jump_right_state.gd.uid @@ -0,0 +1 @@ +uid://cf52bjcpasft1 diff --git a/game/characters/enemies/state_machine/cultist_state.gd b/game/characters/enemies/state_machine/cultist_state.gd index 7ee7e8d..ebfa4b6 100644 --- a/game/characters/enemies/state_machine/cultist_state.gd +++ b/game/characters/enemies/state_machine/cultist_state.gd @@ -2,6 +2,10 @@ class_name CultistState extends AbstractState +const DIRECTION_LEFT = -1 +const DIRECTION_RIGHT = 1 + + @export var cultist: AbstractCultist diff --git a/game/characters/enemies/state_machine/jump_state.gd b/game/characters/enemies/state_machine/jump_state.gd new file mode 100644 index 0000000..63c66d9 --- /dev/null +++ b/game/characters/enemies/state_machine/jump_state.gd @@ -0,0 +1,21 @@ +@abstract +class_name CultistJumpState +extends CultistState + + +@export var fall_state: CultistState + + +var _direction := 0 + + +func enter() -> void: + cultist.velocity.y -= cultist.JUMP_VELOCITY + + +func physics_process(delta: float) -> void: + if cultist.velocity.y > 0: + switch_state.emit(fall_state) + else: + cultist.velocity += cultist.get_gravity() * cultist.get_gravity_factor() * delta + cultist.update_x_velocity(_direction, cultist.MAX_WALK_SPEED, delta) diff --git a/game/characters/enemies/state_machine/jump_state.gd.uid b/game/characters/enemies/state_machine/jump_state.gd.uid new file mode 100644 index 0000000..8be42c4 --- /dev/null +++ b/game/characters/enemies/state_machine/jump_state.gd.uid @@ -0,0 +1 @@ +uid://cxvl7a8o7bc1p diff --git a/game/characters/enemies/state_machine/move_state.gd b/game/characters/enemies/state_machine/move_state.gd index 116e37d..28dc118 100644 --- a/game/characters/enemies/state_machine/move_state.gd +++ b/game/characters/enemies/state_machine/move_state.gd @@ -3,10 +3,6 @@ class_name CultistMoveState extends CultistState -const DIRECTION_LEFT = -1 -const DIRECTION_RIGHT = 1 - - @export var fall_state: CultistState