36 lines
1.1 KiB
GDScript
36 lines
1.1 KiB
GDScript
extends Enemy
|
|
const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
|
|
|
|
export var invincible := false
|
|
export var speed := 80
|
|
export var acceleration := 80
|
|
|
|
func _ready() -> void:
|
|
$StompDetector.monitoring = !invincible
|
|
|
|
|
|
# TODO Only moves when on screen
|
|
func _physics_process(delta: float) -> void:
|
|
velocity.y += _gravity * delta
|
|
var player_direction := player_on_floor_direction()
|
|
if(player_direction != 0):
|
|
velocity.x = PhysicsFunc.two_step_euler(velocity.x, acceleration * player_direction,
|
|
mass, delta)
|
|
velocity.x = clamp(velocity.x, -speed, speed)
|
|
else:
|
|
velocity.x = PhysicsFunc.two_step_euler(velocity.x, acceleration * -sign(velocity.x),
|
|
mass, delta)
|
|
velocity.y = move_and_slide(velocity, FLOOR_NORMAL).y
|
|
|
|
if player_entered_stomp:
|
|
$Sprite.frame = 1
|
|
|
|
# TODO Detects player over gaps
|
|
func player_on_floor_direction() -> float:
|
|
for raycast in $LedgeDetectorRays.get_children():
|
|
if raycast.is_colliding():
|
|
var collider = raycast.get_collider()
|
|
if collider.is_in_group("player"):
|
|
return sign(collider.position.x - self.position.x)
|
|
return 0.0
|