54 lines
1.3 KiB
GDScript
54 lines
1.3 KiB
GDScript
extends KinematicBody2D
|
|
|
|
onready var SNOWBALL_SCENE = preload("res://Enemies/Snowball.tscn")
|
|
|
|
var player = null
|
|
var move = Vector2.ZERO
|
|
var speed = .5
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
move = Vector2.ZERO
|
|
|
|
if player != null:
|
|
move = position.direction_to(player.position) * speed
|
|
else:
|
|
move = Vector2.ZERO
|
|
|
|
move = move.normalized()
|
|
move = move_and_collide(move)
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
func fire():
|
|
var snowball = SNOWBALL_SCENE.instance()
|
|
snowball.position = get_global_position()
|
|
snowball.player = player
|
|
get_parent().add_child(snowball)
|
|
$Timer.set_wait_time(1)
|
|
|
|
|
|
func _on_Timer_timeout() -> void:
|
|
if player != null:
|
|
fire()
|
|
|
|
|
|
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):
|
|
player = null
|
|
return
|