1234567891011121314151617181920212223242526272829303132333435363738394041 |
- class_name BalleSpectrale
- extends Balle
- const BalleDeSpectraleScene: PackedScene = preload("res://composants/objets/balle/balle_spectrale/balle_spectrale.tscn")
- const CALQUE_COLLISION_BRIQUE_INDEXE: int = 5
- const CALQUE_COLLISION_BRIQUE_ACTIVATION: int = pow(2, CALQUE_COLLISION_BRIQUE_INDEXE - 1)
- var _est_tangible: bool = true
- @onready var image_tangible: Sprite2D = $ImageTangible
- @onready var image_spectre: Sprite2D = $ImageSpectre
- func rendre_tangible(doit_etre_tangible: bool) -> void:
- if doit_etre_tangible == _est_tangible:
- return # etat demande deja atteint
- image_tangible.visible = doit_etre_tangible
- image_spectre.visible = not doit_etre_tangible
- if doit_etre_tangible:
- collision_mask += CALQUE_COLLISION_BRIQUE_ACTIVATION
- else:
- collision_mask -= CALQUE_COLLISION_BRIQUE_ACTIVATION
- _est_tangible = doit_etre_tangible # l'etat courant a change
- ## La spectrale redevient tangible au premier rebond
- func _rebondir(impact: KinematicCollision2D) -> void:
- rendre_tangible(not impact.get_collider() is Raquette)
- super._rebondir(impact)
- ## Transforme une balle quelconque en balle de feu
- static func transformer(balle: Balle) -> void:
- var balle_spectrale: BalleSpectrale = BalleDeSpectraleScene.instantiate()
- balle.add_sibling.call_deferred(balle_spectrale) # Appeler plus tard sinon Godot pas content
- balle_spectrale.recopier(balle)
- balle.queue_free()
|