class_name Player extends CharacterBody2D const y_spawn_offset = -8 signal hit_ball signal ball_starts_colliding signal ball_stops_colliding @export var speed = 120 @onready var tile_map: TileMap = get_parent() func _ready(): var spawn_cell = tile_map.get_bottom_spawn_cell() position = tile_map.map_to_local(spawn_cell) + Vector2(0, y_spawn_offset) func get_input_direction(): return Input.get_vector("move_left", "move_right", "move_up", "move_down") func flip_sprite(): if Input.is_action_pressed("move_left"): $Sprite2D.flip_h = true elif Input.is_action_pressed("move_right"): $Sprite2D.flip_h = false func play_idle_animation(): $AnimationPlayer.play("idle") func play_walk_animation(): $AnimationPlayer.play("walk") func play_hit_ball_animation(): $AnimationPlayer.speed_scale = 0.8 $AnimationPlayer.play("hit_ball") await $AnimationPlayer.animation_finished $AnimationPlayer.speed_scale = 1 func _on_area_2d_body_entered(_body): # As player’s Area2D only collide with balls # We only enter this function after colliding with a ball ball_starts_colliding.emit() func _on_area_2d_body_exited(_body): ball_stops_colliding.emit()