@tool @icon("res://composants/objets/brique/IconeBrique.svg") class_name Brique extends StaticBody2D signal eclatee const EclatementScene: PackedScene = preload("res://effets/eclatement_brique/eclatement_effet.tscn") const CapsuleScene: PackedScene = preload("res://composants/objets/capsule/capsule.tscn") const NOMBRE_DE_VIES_MAX: int = 4 ## Le nombre de coups necessaires pour detruire la brique. @export_range(1, NOMBRE_DE_VIES_MAX) var nombre_de_vies: int = 1: set = set_nombre_de_vies @export var pouvoir_type: Pouvoir.Type = Pouvoir.Type.AUCUN: set = set_pouvoir_type var _texture_brique: Texture2D = preload("res://composants/objets/brique/images/01.png") var _vivante: bool = true @onready var image: Sprite2D = $Image func _ready() -> void: _montrer_nombre_vies() _montrer_type_pouvoir() func frapper(nb_degats: int) -> void: nombre_de_vies -= nb_degats if nombre_de_vies <= 0 and _vivante: _mourir() func _montrer_nombre_vies() -> void: var nouvelle_couleur: Color = Color.WHITE * (NOMBRE_DE_VIES_MAX - nombre_de_vies) / (NOMBRE_DE_VIES_MAX - 1) nouvelle_couleur.a = 1.0 # rendre opaque set_modulate(nouvelle_couleur) func _montrer_type_pouvoir() -> void: if not is_node_ready(): return image.set_texture(_texture_brique) func _associe_texture_brique(nouveau_type_pouvoir: Pouvoir.Type) -> void: match nouveau_type_pouvoir: Pouvoir.Type.AUCUN: _texture_brique = preload("res://composants/objets/brique/images/01.png") Pouvoir.Type.FEU: _texture_brique = preload("res://composants/objets/brique/images/43.png") Pouvoir.Type.VIE: _texture_brique = preload("res://composants/objets/brique/images/44.png") Pouvoir.Type.RALENTIR: _texture_brique = preload("res://composants/objets/brique/images/08.png") Pouvoir.Type.JAVELOT: _texture_brique = preload("res://composants/objets/brique/images/46.png") Pouvoir.Type.ELECTRIQUE: _texture_brique = preload("res://composants/objets/brique/images/12.png") _: _texture_brique = preload("res://composants/objets/brique/images/34.png") _montrer_type_pouvoir() func _mourir() -> void: queue_free() _eclater() _liberer_capsule() _vivante = false; func _eclater() -> void: var effet_eclatement: Node2D = EclatementScene.instantiate() effet_eclatement.position = self.position add_sibling(effet_eclatement) eclatee.emit() func _liberer_capsule() -> void: if Pouvoir.Type.AUCUN == pouvoir_type: return # pas de pouvoir a liberer var capsule: Node2D = CapsuleScene.instantiate() capsule.position = self.position capsule.pouvoir = Pouvoir.fabriquer(pouvoir_type) add_sibling.call_deferred(capsule) func set_nombre_de_vies(nb: int) -> void: nombre_de_vies = nb _montrer_nombre_vies() func set_pouvoir_type(nouveau_type: Pouvoir.Type) -> void: pouvoir_type = nouveau_type _associe_texture_brique(nouveau_type)