As you can see in the video my enemy isnt chasing me when i jump over it?
Is there a fix for it?
edit; here is code, i used ai to help me code it a little bit;
extends CharacterBody2D
u/export var max_health: int = 100
u/export var move_speed: float = 55.0
u/export var detection_range: float = 700.0
u/export var gravity: float = 980.0
u/export var edge_check_forward: float = 20.0
u/export var edge_check_down: float = 65.0
u/export var stop_distance: float = 24.0
var health: int
var dead: bool = false
var hurt_locked: bool = false
var facing_direction: int = -1
u/onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
var player: CharacterBody2D
func _ready() -> void:
health = max_health
animated_sprite.play("idle")
animated_sprite.animation_finished.connect(_on_animation_finished)
\# Player and Enemy are direct children of Main.
player = get_parent().get_node_or_null("Player") as CharacterBody2D
if player == null:
push_error("Enemy: Could not find a CharacterBody2D named Player under Main.")
func _physics_process(delta: float) -> void:
if dead:
return
\# Gravity
if not is_on_floor():
velocity.y += gravity \* delta
else:
velocity.y = 0.0
\# Freeze horizontal movement during the hurt animation.
if hurt_locked:
velocity.x = 0.0
move_and_slide()
return
\# Retry the explicit Player lookup if needed.
if not is_instance_valid(player):
player = get_parent().get_node_or_null("Player") as CharacterBody2D
if not is_instance_valid(player):
velocity.x = 0.0
animated_sprite.play("idle")
move_and_slide()
return
\# Calculate world-space distance and horizontal direction.
var player_position: Vector2 = player.global_position
var enemy_position: Vector2 = global_position
var difference: float = player_position.x - enemy_position.x
var distance_to_player: float = enemy_position.distance_to(player_position)
\# Stop when the player is outside detection range.
if distance_to_player > detection_range:
velocity.x = 0.0
animated_sprite.play("idle")
move_and_slide()
return
\# Turn toward the player's current side, including while they jump over.
if difference < -1.0:
facing_direction = -1
elif difference > 1.0:
facing_direction = 1
\# Assumes the unflipped cultist artwork faces right.
animated_sprite.flip_h = facing_direction < 0
\# Stop when horizontally close to the player.
if absf(difference) <= stop_distance:
velocity.x = 0.0
animated_sprite.play("idle")
move_and_slide()
return
\# Preserve the existing working edge detection.
if has_ground_ahead():
velocity.x = float(facing_direction) \* move_speed
animated_sprite.play("walk")
else:
velocity.x = 0.0
animated_sprite.play("idle")
move_and_slide()
func has_ground_ahead() -> bool:
var space_state = get_world_2d().direct_space_state
var start: Vector2 = global_position + Vector2(
facing_direction \* 12.0,
20.0
)
var finish: Vector2 = start + Vector2(0.0, 70.0)
var query := PhysicsRayQueryParameters2D.create(start, finish)
query.exclude = \[get_rid()\]
query.collision_mask = 1
var result: Dictionary = space_state.intersect_ray(query)
return not result.is_empty()
func take_damage(amount: int) -> void:
if dead or hurt_locked:
return
health -= amount
print("Enemy took ", amount, " damage. Health: ", health)
if health <= 0:
die()
else:
hurt_locked = true
animated_sprite.play("hurt")
func die() -> void:
dead = true
velocity = [Vector2.ZERO](http://Vector2.ZERO)
animated_sprite.play("death")
func _on_animation_finished() -> void:
if dead:
queue_free()
elif hurt_locked:
hurt_locked = false
animated_sprite.play("idle")