class_name Ball extends CharacterBody2D const y_offset = -10 const player_path = "/root/Main/TileMap/Player" const enemy_path = "/root/Main/TileMap/Enemy" signal notify_enemy(ball_target: Vector2i) var speed = 100 var target = Vector2.ZERO @onready var tile_map: TileMap = get_parent() func _ready(): target.y += y_offset connect_player() connect_enemy() func _physics_process(delta): position = position.move_toward(target, delta * speed) func update_target(new_target: Vector2i): target = tile_map.map_to_local(new_target) + Vector2(0, y_offset) # Debug tile_map.reset_and_set_target_cell(new_target) func _on_player_hit_ball(): var new_target: Vector2i = tile_map.get_random_top_cell() update_target(new_target) notify_enemy.emit(new_target) func _on_enemy_hit_ball(): var new_target: Vector2i = tile_map.get_random_bottom_cell() update_target(new_target) notify_enemy.emit(new_target) func connect_player(): var player = get_node(player_path) assert(player) player.hit_ball.connect(_on_player_hit_ball) func connect_enemy(): var enemy = get_node(enemy_path) assert(enemy) enemy.hit_ball.connect(_on_enemy_hit_ball)