class_name Ball extends CharacterBody2D signal notify_enemy const Y_OFFSET = -10 var speed = 100 var target = Vector2.ZERO @onready var tile_map: TileMap = get_parent() func _ready(): target.y += Y_OFFSET var player = get_node("/root/Main/TileMap/Player") assert(player) player.hit_ball.connect(_on_player_hit_ball) func _physics_process(delta): position = position.move_toward(target, delta * speed) func _on_player_hit_ball(): var rand_cell: Vector2i = tile_map.get_random_top_cell() tile_map.reset_and_set_target_cell(rand_cell) target = tile_map.map_to_local(rand_cell) + Vector2(0, Y_OFFSET) notify_enemy.emit() func aim_to_bottom() -> bool: return tile_map.is_in_bottom_area(target)