conteneur_briques.gd 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. @icon("res://composants/objets/brique/IconeConteneurBriques.svg")
  2. class_name ConteneurDeBriques
  3. extends Node2D
  4. signal plus_de_briques
  5. ## Permet de bouger le grougpe de briques au fil du temps.
  6. ## Doit etre un script de type Mouvement
  7. @export var mouvement_script: GDScript
  8. var _mouvement: Mouvement
  9. @onready var nombre_enfants: int = get_children().size()
  10. func _ready() -> void:
  11. _branche_comptage_briques()
  12. _initie_mouvement()
  13. func _branche_comptage_briques():
  14. for node: Node in get_children():
  15. assert(node is Brique or node is ConteneurDeBriques, "Ne peut contenir que des briques")
  16. if node is Brique:
  17. var brique: Brique = node as Brique
  18. brique.eclatee.connect(_quand_enfant_detruit)
  19. elif node is ConteneurDeBriques:
  20. var contenant: ConteneurDeBriques = node as ConteneurDeBriques
  21. contenant.plus_de_briques.connect(_quand_enfant_detruit)
  22. func _initie_mouvement():
  23. if mouvement_script == null:
  24. return
  25. assert(mouvement_script.can_instantiate(), "Doit pouvoir etre mis en mouvement")
  26. var mouvement: Object = mouvement_script.new()
  27. assert(mouvement is Mouvement, "Mauvais type du script, mouvement attendu")
  28. _mouvement = mouvement as Mouvement
  29. func _physics_process(delta: float) -> void:
  30. if _mouvement == null:
  31. return
  32. _mouvement.bouger(self, delta)
  33. func _quand_enfant_detruit() -> void:
  34. nombre_enfants -= 1
  35. if nombre_enfants <= 0:
  36. plus_de_briques.emit()