123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- @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)
|