12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- class_name Balle
- extends CharacterBody2D
- signal sortie_ecran
- 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)
- if obstacle.has_method("frapper"):
- obstacle.frapper(1)
- func _rebondir(impact: KinematicCollision2D) -> void:
- _mouvement = _mouvement.bounce(impact.get_normal())
- func _orienter_tir(raquette: Raquette) -> void:
- var difference = global_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
- func _auto_detruire() -> void:
- queue_free()
- func _quand_verificateur_visibilite_detecte_sortie_ecran():
- sortie_ecran.emit()
- _auto_detruire()
|