extends KinematicBody2D onready var SNOWBALL_SCENE: Resource = preload('res://Enemies/Snowball.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_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