68 lines
1.7 KiB
GDScript
68 lines
1.7 KiB
GDScript
extends KinematicBody2D
|
|
|
|
onready var SNOWBALL_BLUE_SCENE: Resource = preload('res://Enemies/Snowball Blue.tscn')
|
|
|
|
var player: KinematicBody2D = null
|
|
var velocity: Vector2 = Vector2.ZERO
|
|
const SPEED: int = 50
|
|
var health: int = 2
|
|
|
|
|
|
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
|
|
|
|
velocity = move_and_slide(velocity)
|
|
return
|
|
|
|
|
|
func _on_Area2D_body_entered(body: Node) -> void:
|
|
if body != self && !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")):
|
|
player = body
|
|
return
|
|
|
|
|
|
func _on_Area2D_body_exited(body: Node) -> void:
|
|
if !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")):
|
|
player = null
|
|
return
|
|
|
|
|
|
func fire() -> void:
|
|
var snowball = SNOWBALL_BLUE_SCENE.instance()
|
|
snowball.position = get_global_position()
|
|
snowball.player = player
|
|
get_parent().add_child(snowball)
|
|
$Timer.set_wait_time(1)
|
|
return
|
|
|
|
|
|
func _on_Timer_timeout() -> void:
|
|
if player != null:
|
|
fire()
|
|
return
|
|
|
|
|
|
func _on_player_detector_area_entered(area: Area2D) -> void:
|
|
if area.get_parent().name == 'Player':
|
|
player = area.get_parent()
|
|
return
|
|
|
|
|
|
func _on_player_detector_area_exited(_area: Area2D) -> void:
|
|
player = null
|
|
return
|
|
|
|
|
|
func _on_hitbox_area_entered(area: Area2D) -> void:
|
|
if area.is_in_group('player_weapon_1'):
|
|
health -= 1
|
|
elif area.is_in_group('player_weapon_2'):
|
|
health -= 2
|
|
|
|
if health <= 0:
|
|
call_deferred('queue_free')
|
|
return
|