Fixed chase states

This commit is contained in:
2026-02-11 23:56:31 +03:00
parent 2562366d8a
commit 1f25c93fc1
17 changed files with 81 additions and 184 deletions
@@ -1,9 +1,15 @@
extends CultistChaseState
func _ready() -> void:
super._ready()
func init() -> void:
_direction = DIRECTION_LEFT
_wall_ray_cast = cultist.left_wall_ray
_player_ray_cast = cultist.left_player_distant_ray
func enter() -> void:
cultist.sprite.play(CultistSprite.ANIMATION_CHASE_LEFT)
func _is_target_reached() -> bool:
return cultist.position.x <= cultist.target_x
@@ -1,9 +1,15 @@
extends CultistChaseState
func _ready() -> void:
super._ready()
func init() -> void:
_direction = DIRECTION_RIGHT
_wall_ray_cast = cultist.right_wall_ray
_player_ray_cast = cultist.right_player_distant_ray
func enter() -> void:
cultist.sprite.play(CultistSprite.ANIMATION_CHASE_RIGHT)
func _is_target_reached() -> bool:
return cultist.position.x >= cultist.target_x
@@ -1,3 +1,4 @@
@abstract
class_name CultistChaseState
extends CultistMoveState
@@ -13,7 +14,11 @@ func physics_process(delta: float) -> void:
if player != null:
cultist.target_x = player.position.x
if is_equal_approx(cultist.position.x, cultist.target_x):
if _is_target_reached() or _wall_ray_cast.is_colliding():
switch_state.emit(look_around_state)
else:
cultist.update_x_velocity(_direction, cultist.MAX_CHASE_SPEED, delta)
@abstract
func _is_target_reached() -> bool
@@ -5,16 +5,6 @@ extends AbstractState
@export var cultist: AbstractCultist
func _ready() -> void:
if not cultist.is_node_ready():
await cultist.ready
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
func _get_colliding_player(ray_cast: RayCast2D) -> Player:
ray_cast.force_raycast_update()
@@ -3,11 +3,3 @@ extends StateMachine
@export var cultist: AbstractCultist
func _ready() -> void:
if not cultist.is_node_ready():
await cultist.ready
super._ready()
@@ -2,15 +2,18 @@ extends CultistState
@export var fall_state: CultistState
@export var walk_left_state: CultistState
@export var walk_right_state: CultistState
@export var chase_left_state: CultistState
@export var chase_right_state: CultistState
func enter() -> void:
cultist.sprite.animation_finished.connect(_on_animation_finished, CONNECT_ONE_SHOT)
cultist.sprite.play(CultistSprite.LOOK_AROUND_ANIMATIONS.pick_random())
cultist.velocity = Vector2.ZERO
_set_ray_cast_enable(cultist.left_player_close_ray, true)
_set_ray_cast_enable(cultist.right_player_close_ray, true)
cultist._set_ray_cast_enable(cultist.left_player_close_ray, true)
cultist._set_ray_cast_enable(cultist.right_player_close_ray, true)
func physics_process(_delta: float) -> void:
@@ -26,5 +29,9 @@ func physics_process(_delta: float) -> void:
func exit() -> void:
_set_ray_cast_enable(cultist.left_player_close_ray, false)
_set_ray_cast_enable(cultist.right_player_close_ray, false)
cultist._set_ray_cast_enable(cultist.left_player_close_ray, false)
cultist._set_ray_cast_enable(cultist.right_player_close_ray, false)
func _on_animation_finished() -> void:
switch_state.emit([walk_left_state, walk_right_state].pick_random())
@@ -18,8 +18,8 @@ var _player_ray_cast : RayCast2D
func enter() -> void:
_set_ray_cast_enable(_player_ray_cast, true)
cultist._set_ray_cast_enable(_player_ray_cast, true)
func exit() -> void:
_set_ray_cast_enable(_player_ray_cast, false)
cultist._set_ray_cast_enable(_player_ray_cast, false)
@@ -1,11 +1,11 @@
extends CultistWalkState
func _ready() -> void:
super._ready()
print(cultist.left_player_distant_ray)
func init() -> void:
_direction = DIRECTION_LEFT
_wall_ray_cast = cultist.left_wall_ray
_player_ray_cast = cultist.left_player_distant_ray
func enter() -> void:
cultist.sprite.play(CultistSprite.ANIMATION_WALK_LEFT)
@@ -1,9 +1,11 @@
extends CultistWalkState
func _ready() -> void:
super._ready()
func init() -> void:
_direction = DIRECTION_RIGHT
_wall_ray_cast = cultist.right_wall_ray
_player_ray_cast = cultist.right_player_distant_ray
func enter() -> void:
cultist.sprite.play(CultistSprite.ANIMATION_WALK_RIGHT)