75 lines
1.9 KiB
GDScript
75 lines
1.9 KiB
GDScript
extends KinematicBody2D
|
|
|
|
const SPEED: int = 60
|
|
|
|
var player: KinematicBody2D = null
|
|
var velocity: Vector2 = Vector2.ZERO
|
|
var health: int = 2
|
|
var hit: bool = false
|
|
var counter: int = 0
|
|
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
velocity = Vector2.ZERO
|
|
|
|
if player and position.distance_to(player.position) > 1:
|
|
velocity = position.direction_to(player.position).normalized() * SPEED
|
|
var angle = position.angle_to_point(player.position)
|
|
if abs(angle) > PI/2:
|
|
$AnimatedSprite1.scale.x = -0.563
|
|
else:
|
|
$AnimatedSprite1.scale.x = 0.563
|
|
|
|
if hit == true:
|
|
if counter < 15:
|
|
if counter % 5 == 0:
|
|
$AnimatedSprite1.visible = false
|
|
else:
|
|
$AnimatedSprite1.visible = true
|
|
counter += 1
|
|
velocity = Vector2.ZERO
|
|
else:
|
|
counter = 0
|
|
hit = false
|
|
|
|
velocity = move_and_slide(velocity)
|
|
return
|
|
|
|
|
|
func _on_player_detector_body_entered(body: Node) -> void:
|
|
if body.is_in_group('player'):
|
|
player = body
|
|
$AnimatedSprite1.animation = 'Running'
|
|
return
|
|
|
|
|
|
func _on_player_detector_body_exited(body: Node) -> void:
|
|
if body.is_in_group('player'):
|
|
player = null
|
|
$AnimatedSprite1.animation = 'Idle'
|
|
return
|
|
|
|
|
|
func _on_hitbox_area_entered(area: Area2D) -> void:
|
|
if area.is_in_group('player_weapon_1'):
|
|
health -= 1
|
|
hit = true
|
|
elif area.is_in_group('player_weapon_2'):
|
|
health -= 2
|
|
hit = true
|
|
|
|
if health <= 0:
|
|
call_deferred('queue_free')
|
|
return
|
|
|
|
func _on_Player_Detector__Attack_body_entered(body: Node) -> void:
|
|
if body.is_in_group('player'):
|
|
player = body
|
|
$AnimatedSprite1.animation = 'Jump'
|
|
|
|
|
|
func _on_Player_Detector__Attack_body_exited(body: Node) -> void:
|
|
if body.is_in_group('player'):
|
|
player = body
|
|
$AnimatedSprite1.animation = 'Running'
|