balle_de_feu.gd 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. class_name BalleDeFeu
  2. extends Balle
  3. const DEGATS_FEU: int = 5
  4. const BalleDeFeuScene: PackedScene = preload("res://composants/objets/balle/balle_de_feu/balle_de_feu.tscn")
  5. const duree_clignotement_max: float = 0.05 # sec
  6. var _duree_clignotement: float = 0.0
  7. @onready var image: Sprite2D = $Image
  8. func _process(delta: float) -> void:
  9. _clignoter(delta)
  10. func _clignoter(delta: float) -> void:
  11. _duree_clignotement += delta
  12. if _duree_clignotement > duree_clignotement_max:
  13. image.flip_v = not image.flip_v
  14. _duree_clignotement = 0.0
  15. func _diriger(vers: Vector2) -> void:
  16. image.rotation = Vector2.RIGHT.angle_to(vers)
  17. ## La balle de feu fait plus de degats
  18. func _impacter_brique(brique: Brique) -> void:
  19. brique.frapper(DEGATS_FEU)
  20. ## La balle de feu a besoin de s'orienter quand sa direction change
  21. func _mettre_en_mouvement(dir: Vector2) -> void:
  22. super._mettre_en_mouvement(dir)
  23. _diriger(dir)
  24. ## La balle de feu a besoin de s'orienter quand sa direction change
  25. func _rebondir(impact: KinematicCollision2D) -> void:
  26. super._rebondir(impact)
  27. _diriger(_mouvement)
  28. ## Transforme une balle quelconque en balle de feu
  29. static func transformer(balle: Balle) -> void:
  30. var balle_de_feu: BalleDeFeu = BalleDeFeuScene.instantiate()
  31. balle.add_sibling.call_deferred(balle_de_feu) # Appeler plus tard sinon Godot pas content
  32. balle_de_feu.recopier(balle)
  33. balle.queue_free()