|
@@ -0,0 +1,46 @@
|
|
|
+class_name BalleElectrique
|
|
|
+extends Balle
|
|
|
+
|
|
|
+
|
|
|
+const BalleElectriqueScene: PackedScene = preload("res://composants/objets/balle/balle_elec/balle_electrique.tscn")
|
|
|
+const duree_clignotement_max: float = 0.05 # sec
|
|
|
+
|
|
|
+var _duree_clignotement: float = 0.0
|
|
|
+var surchargee: bool = true # vrai si l'electricite deborde
|
|
|
+
|
|
|
+@onready var image: Sprite2D = $Image
|
|
|
+
|
|
|
+
|
|
|
+func _process(delta: float) -> void:
|
|
|
+ _clignoter(delta)
|
|
|
+
|
|
|
+
|
|
|
+func _clignoter(delta: float) -> void:
|
|
|
+ if not surchargee:
|
|
|
+ return
|
|
|
+
|
|
|
+ _duree_clignotement += delta
|
|
|
+
|
|
|
+ if _duree_clignotement < duree_clignotement_max:
|
|
|
+ # trop tot pour clignoter
|
|
|
+ return
|
|
|
+
|
|
|
+ # pas de 0, donc au moins un axe est flip
|
|
|
+ var axes_a_inverser: int = randi_range(1, 3)
|
|
|
+ var inversion_horizontale: bool = axes_a_inverser % 2 == 1
|
|
|
+ var inversion_verticale: bool = axes_a_inverser / 2 == 1
|
|
|
+
|
|
|
+ if inversion_verticale:
|
|
|
+ image.flip_v = not image.flip_v
|
|
|
+ if inversion_horizontale:
|
|
|
+ image.flip_h = not image.flip_h
|
|
|
+
|
|
|
+ _duree_clignotement = 0.0
|
|
|
+
|
|
|
+
|
|
|
+## Transforme une balle quelconque en balle electrique
|
|
|
+static func transformer(balle: Balle) -> void:
|
|
|
+ var balle_elec: BalleElectrique = BalleElectriqueScene.instantiate()
|
|
|
+ balle.add_sibling.call_deferred(balle_elec) # Appeler plus tard sinon Godot pas content
|
|
|
+ balle_elec.recopier(balle)
|
|
|
+ balle.queue_free()
|