12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- class_name BalleElectrique
- extends Balle
- # Balle electrique qui fait des degats a distance quand chargee
- signal charge
- signal decharge
- 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 = $ImageSurcharge
- func _process(delta: float) -> void:
- _clignoter(delta)
- func electrise(brique: Brique) -> void:
- assert(surchargee, "Ne peut pas electriser si non chargee")
- brique.frapper(1)
- surchargee = false
- decharge.emit()
- func recharge() -> void:
- surchargee = true
- charge.emit()
- func _impacter_brique(brique: Brique) -> void:
- super._impacter_brique(brique)
- if surchargee:
- electrise(brique)
- ## La balle electrique se recharge au contact de la raquette
- func _mettre_en_mouvement(dir: Vector2) -> void:
- super._mettre_en_mouvement(dir)
- recharge()
- ## Effet graphique electrique
- 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
- image.set_rotation(randf_range(0.0, 2 * PI))
- _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()
- func _quand_champ_electrique_detecte_coprs(body: Node2D) -> void:
- if surchargee and body is Brique:
- electrise(body)
|