conteneur_briques.gd 1.3 KB

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