gmtk-2024/scripts/crawler.gd

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()