forked from newt/gmtk-2024
56 lines
1.4 KiB
GDScript
56 lines
1.4 KiB
GDScript
class_name Crawler extends Entity
|
|
|
|
@onready var player = get_parent().get_parent().get_node("Player");
|
|
@onready var sprite = $AnimatedSprite2D
|
|
@onready var main_collider = $CollisionShape2D
|
|
@onready var whip = $WhipArea
|
|
|
|
## Crawl towards the player but stay within striking distance and not super close
|
|
|
|
const HEALTH = 40
|
|
const SPEED_MULTIPLIER = 50
|
|
const ATTACK_DAMAGE = 20
|
|
|
|
func _init() -> void:
|
|
super._init(HEALTH, SPEED_MULTIPLIER, ATTACK_DAMAGE)
|
|
|
|
#func _ready() -> void:
|
|
#whip.visible = false
|
|
|
|
func face_player():
|
|
var player_position = player.global_position
|
|
var crawler_position = global_position
|
|
|
|
if player_position.x > crawler_position.x and not sprite.flip_h:
|
|
sprite.flip_h = true
|
|
main_collider.position.x -= 62
|
|
position.x += 62
|
|
whip.position.x += 10
|
|
elif player_position.x < crawler_position.x and sprite.flip_h:
|
|
sprite.flip_h = false
|
|
main_collider.position.x += 62
|
|
position.x -= 62
|
|
whip.position.x -= 10
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
var distanceToPlayer = global_position.distance_to(player.global_position)
|
|
var desiredDistance = 70
|
|
|
|
if sprite.flip_h:
|
|
desiredDistance -= 69
|
|
face_player()
|
|
print(distanceToPlayer)
|
|
|
|
if distanceToPlayer > desiredDistance:
|
|
velocity.x = speed
|
|
face_player()
|
|
|
|
if not sprite.flip_h:
|
|
velocity.x *= -1
|
|
|
|
sprite.play("walk")
|
|
else:
|
|
velocity.x = 0
|
|
sprite.play("Whip")
|
|
|
|
move_and_slide()
|