balle.gd 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. class_name Balle
  2. extends CharacterBody2D
  3. const ratio_diff_angle: float = PI * 0.005 # radian / px
  4. const ascension_min: float = 10.0 # px / sec
  5. @export var mouvement_initial: Vector2 = Vector2(0.0, 600.0)
  6. var _mouvement: Vector2
  7. func _ready() -> void:
  8. _mouvement = mouvement_initial
  9. func _physics_process(delta: float) -> void:
  10. var impact: KinematicCollision2D = move_and_collide(_mouvement * delta)
  11. if impact != null:
  12. _rebondir(impact)
  13. var obstacle: Object = impact.get_collider()
  14. if obstacle is Raquette:
  15. _orienter_tir(obstacle)
  16. elif obstacle is Brique:
  17. _frapper(obstacle)
  18. func _rebondir(impact: KinematicCollision2D) -> void:
  19. _mouvement = _mouvement.bounce(impact.get_normal())
  20. func _orienter_tir(raquette: Raquette) -> void:
  21. var difference = global_position.x - raquette.position.x
  22. _mouvement = Vector2.UP.rotated(difference * ratio_diff_angle) * _mouvement.length()
  23. # empeche la balle de traverser la raquette
  24. if _mouvement.y > 0:
  25. _mouvement.y = ascension_min
  26. func _frapper(brique: Brique) -> void:
  27. brique.queue_free()