class_name Balle extends CharacterBody2D const ratio_diff_angle: float = PI * 0.005 # radian / px const ascension_min: float = 10.0 # px / sec @export var mouvement_initial: Vector2 = Vector2(0.0, 600.0) var _mouvement: Vector2 func _ready() -> void: _mouvement = mouvement_initial func _physics_process(delta: float) -> void: var impact: KinematicCollision2D = move_and_collide(_mouvement * delta) if impact != null: _rebondir(impact) var obstacle: Object = impact.get_collider() if obstacle is Raquette: _orienter_tir(obstacle) func _rebondir(impact: KinematicCollision2D) -> void: _mouvement = _mouvement.bounce(impact.get_normal()) func _orienter_tir(raquette: Raquette) -> void: var difference = position.x - raquette.position.x _mouvement = Vector2.UP.rotated(difference * ratio_diff_angle) * _mouvement.length() # empeche la balle de traverser la raquette if _mouvement.y > 0: _mouvement.y = ascension_min