class_name BalleDeFeu
extends Balle


const DEGATS_FEU: int = 5
const BalleDeFeuScene: PackedScene = preload("res://composants/objets/balle/balle_de_feu/balle_de_feu.tscn")
const duree_clignotement_max: float = 0.05 # sec

var _duree_clignotement: float = 0.0

@onready var image: Sprite2D = $Image


func _process(delta: float) -> void:
	_clignoter(delta)


func _clignoter(delta: float) -> void:
	_duree_clignotement += delta
	if _duree_clignotement > duree_clignotement_max:
		image.flip_v = not image.flip_v
		_duree_clignotement = 0.0


func _diriger(vers: Vector2) -> void:
	image.rotation = Vector2.RIGHT.angle_to(vers)


## La balle de feu fait plus de degats
func _impacter_brique(brique: Brique) -> void:
	brique.frapper(DEGATS_FEU)


## La balle de feu a besoin de s'orienter quand sa direction change
func _mettre_en_mouvement(dir: Vector2) -> void:
	super._mettre_en_mouvement(dir)
	_diriger(dir)


## La balle de feu a besoin de s'orienter quand sa direction change
func _rebondir(impact: KinematicCollision2D) -> void:
	super._rebondir(impact)
	_diriger(_mouvement)


## Transforme une balle quelconque en balle de feu
static func transformer(balle: Balle) -> void:
	var balle_de_feu: BalleDeFeu = BalleDeFeuScene.instantiate()
	balle.add_sibling.call_deferred(balle_de_feu) # Appeler plus tard sinon Godot pas content
	balle_de_feu.recopier(balle)
	balle.queue_free()
