The first avoids falling off ledges, the second falls only off of safe ledges and the thirds darts towards the player when he is touching the same unobstructed ground it is on.
40 lines
992 B
GDScript
40 lines
992 B
GDScript
extends Player
|
|
|
|
export var score := 100
|
|
|
|
|
|
func _ready() -> void:
|
|
set_physics_process(false)
|
|
|
|
|
|
# TODO adapt to groups
|
|
func _on_StompDetector_body_entered(body: Node) -> void:
|
|
if body.global_position.y > get_node("StompDetector").global_position.y:
|
|
return
|
|
get_node("EnemyBody").disabled = true
|
|
die()
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
velocity.y += _gravity * delta
|
|
velocity.x = 80 * player_on_floor_direction()
|
|
print(velocity.x)
|
|
velocity.y = move_and_slide(velocity, FLOOR_NORMAL).y
|
|
|
|
# TODO Detects player over gaps
|
|
func player_on_floor_direction():
|
|
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
|
|
|
|
func die() -> void:
|
|
queue_free()
|
|
PlayerData.score += score
|
|
|
|
func _on_EnemySkin_area_entered(area:Area2D) -> void:
|
|
if area.is_in_group("harmful"):
|
|
get_node("EnemyBody").disabled = true
|
|
die()
|