brique.gd 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. set = set_pouvoir_type
  13. var _texture_brique: Texture2D = preload("res://composants/objets/brique/images/01.png")
  14. @onready var image: Sprite2D = $Image
  15. func _ready() -> void:
  16. _montrer_nombre_vies()
  17. _montrer_type_pouvoir()
  18. func frapper(nb_degats: int) -> void:
  19. nombre_de_vies -= nb_degats
  20. if nombre_de_vies <= 0:
  21. _mourir()
  22. func _montrer_nombre_vies() -> void:
  23. var nouvelle_couleur: Color = Color.WHITE * (NOMBRE_DE_VIES_MAX - nombre_de_vies) / (NOMBRE_DE_VIES_MAX - 1)
  24. nouvelle_couleur.a = 1.0 # rendre opaque
  25. set_modulate(nouvelle_couleur)
  26. func _montrer_type_pouvoir() -> void:
  27. if not is_node_ready():
  28. return
  29. image.set_texture(_texture_brique)
  30. func _associe_texture_brique(nouveau_type_pouvoir: Pouvoir.Type) -> void:
  31. match nouveau_type_pouvoir:
  32. Pouvoir.Type.AUCUN:
  33. _texture_brique = preload("res://composants/objets/brique/images/01.png")
  34. Pouvoir.Type.FEU:
  35. _texture_brique = preload("res://composants/objets/brique/images/43.png")
  36. Pouvoir.Type.VIE:
  37. _texture_brique = preload("res://composants/objets/brique/images/44.png")
  38. _:
  39. _texture_brique = preload("res://composants/objets/brique/images/34.png")
  40. _montrer_type_pouvoir()
  41. func _mourir() -> void:
  42. queue_free()
  43. _eclater()
  44. _liberer_capsule()
  45. func _eclater() -> void:
  46. var effet_eclatement: Node2D = EclatementScene.instantiate()
  47. effet_eclatement.position = self.position
  48. add_sibling(effet_eclatement)
  49. eclatee.emit()
  50. func _liberer_capsule() -> void:
  51. if Pouvoir.Type.AUCUN == pouvoir_type:
  52. return # pas de pouvoir a liberer
  53. var capsule: Node2D = CapsuleScene.instantiate()
  54. capsule.position = self.position
  55. capsule.pouvoir = Pouvoir.fabriquer(pouvoir_type)
  56. add_sibling(capsule)
  57. func set_nombre_de_vies(nb: int) -> void:
  58. nombre_de_vies = nb
  59. _montrer_nombre_vies()
  60. func set_pouvoir_type(nouveau_type: Pouvoir.Type) -> void:
  61. pouvoir_type = nouveau_type
  62. _associe_texture_brique(nouveau_type)