brique.gd 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. @tool
  2. @icon("res://composants/objets/brique/IconeBrique.svg")
  3. class_name Brique
  4. extends StaticBody2D
  5. signal eclatee
  6. const EclatementScene: PackedScene = preload("res://effets/eclatement_brique/eclatement_effet.tscn")
  7. const CapsuleScene: PackedScene = preload("res://composants/objets/capsule/capsule.tscn")
  8. const NOMBRE_DE_VIES_MAX: int = 4
  9. ## Le nombre de coups necessaires pour detruire la brique.
  10. @export_range(1, NOMBRE_DE_VIES_MAX) var nombre_de_vies: int = 1:
  11. set = set_nombre_de_vies
  12. @export var pouvoir_type: Pouvoir.Type = Pouvoir.Type.AUCUN:
  13. set = set_pouvoir_type
  14. var _texture_brique: Texture2D = preload("res://composants/objets/brique/images/01.png")
  15. @onready var image: Sprite2D = $Image
  16. func _ready() -> void:
  17. _montrer_nombre_vies()
  18. _montrer_type_pouvoir()
  19. func frapper(nb_degats: int) -> void:
  20. nombre_de_vies -= nb_degats
  21. if nombre_de_vies <= 0:
  22. _mourir()
  23. func _montrer_nombre_vies() -> void:
  24. var nouvelle_couleur: Color = Color.WHITE * (NOMBRE_DE_VIES_MAX - nombre_de_vies) / (NOMBRE_DE_VIES_MAX - 1)
  25. nouvelle_couleur.a = 1.0 # rendre opaque
  26. set_modulate(nouvelle_couleur)
  27. func _montrer_type_pouvoir() -> void:
  28. if not is_node_ready():
  29. return
  30. image.set_texture(_texture_brique)
  31. func _associe_texture_brique(nouveau_type_pouvoir: Pouvoir.Type) -> void:
  32. match nouveau_type_pouvoir:
  33. Pouvoir.Type.AUCUN:
  34. _texture_brique = preload("res://composants/objets/brique/images/01.png")
  35. Pouvoir.Type.FEU:
  36. _texture_brique = preload("res://composants/objets/brique/images/43.png")
  37. Pouvoir.Type.VIE:
  38. _texture_brique = preload("res://composants/objets/brique/images/44.png")
  39. Pouvoir.Type.RALENTIR:
  40. _texture_brique = preload("res://composants/objets/brique/images/08.png")
  41. Pouvoir.Type.JAVELOT:
  42. _texture_brique = preload("res://composants/objets/brique/images/46.png")
  43. Pouvoir.Type.ELECTRIQUE:
  44. _texture_brique = preload("res://composants/objets/brique/images/12.png")
  45. _:
  46. _texture_brique = preload("res://composants/objets/brique/images/34.png")
  47. _montrer_type_pouvoir()
  48. func _mourir() -> void:
  49. queue_free()
  50. _eclater()
  51. _liberer_capsule()
  52. func _eclater() -> void:
  53. var effet_eclatement: Node2D = EclatementScene.instantiate()
  54. effet_eclatement.position = self.position
  55. add_sibling(effet_eclatement)
  56. eclatee.emit()
  57. print(get_name(), " est eclatee !")
  58. func _liberer_capsule() -> void:
  59. if Pouvoir.Type.AUCUN == pouvoir_type:
  60. return # pas de pouvoir a liberer
  61. var capsule: Node2D = CapsuleScene.instantiate()
  62. capsule.position = self.position
  63. capsule.pouvoir = Pouvoir.fabriquer(pouvoir_type)
  64. add_sibling.call_deferred(capsule)
  65. func set_nombre_de_vies(nb: int) -> void:
  66. nombre_de_vies = nb
  67. _montrer_nombre_vies()
  68. func set_pouvoir_type(nouveau_type: Pouvoir.Type) -> void:
  69. pouvoir_type = nouveau_type
  70. _associe_texture_brique(nouveau_type)