brique.gd 1.4 KB

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