brique.gd 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. @tool
  2. class_name Brique
  3. extends StaticBody2D
  4. signal eclatee
  5. const EclatementScene: PackedScene = preload("res://effets/eclatement_brique/eclatement_effet.tscn")
  6. const CapsuleScene: PackedScene = preload("res://composants/objets/capsule/capsule.tscn")
  7. const NOMBRE_DE_VIES_MAX: int = 4
  8. ## Le nombre de coups necessaires pour detruire la brique.
  9. @export_range(1, NOMBRE_DE_VIES_MAX) var nombre_de_vies: int = 1:
  10. set = set_nombre_de_vies
  11. @export var pouvoir_type: Pouvoir.Type = Pouvoir.Type.AUCUN
  12. func _ready() -> void:
  13. _montrer_nombre_vies()
  14. func frapper(nb_degats: int) -> void:
  15. nombre_de_vies -= nb_degats
  16. if nombre_de_vies <= 0:
  17. _mourir()
  18. func _montrer_nombre_vies() -> void:
  19. var nouvelle_couleur: Color = Color.WHITE * (NOMBRE_DE_VIES_MAX - nombre_de_vies) / (NOMBRE_DE_VIES_MAX - 1)
  20. nouvelle_couleur.a = 1.0 # rendre opaque
  21. set_modulate(nouvelle_couleur)
  22. func _mourir() -> void:
  23. queue_free()
  24. _eclater()
  25. _liberer_capsule()
  26. func _eclater() -> void:
  27. var effet_eclatement: Node2D = EclatementScene.instantiate()
  28. effet_eclatement.position = self.position
  29. add_sibling(effet_eclatement)
  30. eclatee.emit()
  31. func _liberer_capsule() -> void:
  32. if Pouvoir.Type.AUCUN == pouvoir_type:
  33. return # pas de pouvoir a liberer
  34. var capsule: Node2D = CapsuleScene.instantiate()
  35. capsule.position = self.position
  36. capsule.pouvoir = Pouvoir.depuis_enum(pouvoir_type)
  37. add_sibling(capsule)
  38. func set_nombre_de_vies(nb: int) -> void:
  39. nombre_de_vies = nb
  40. _montrer_nombre_vies()