extends RigidBody2D # Paramètres ajustables @export var speed: float = 150.0 @export var shoot_range: float = 300.0 # Distance minimale pour tirer @export var shoot_cooldown: float = 1.5 # Délai entre les tirs @export var bullet_scene: PackedScene # Scène de la balle (à assigner dans l'inspecteur) @export var shoot_angle_variation: float = 15.0 # Variation en degrés @onready var shoot_timer = $ShootTimer @onready var player = null # Référence au joueur, à assigner via code ou groupe func _ready(): # Trouve le joueur (suppose qu'il est dans le groupe "players") var players = get_tree().get_nodes_in_group("players") if players.size() > 0: player = players[0] shoot_timer.timeout.connect(_on_shoot_timer_timeout) func _physics_process(_delta: float): if player: if position.distance_to(player.position) < shoot_range: look_at(player.position) # Oriente le bateau vers le joueur if shoot_timer.is_stopped(): shoot_timer.start(shoot_cooldown) else: # Direction vers le joueur var direction = (player.position - position).normalized() # Applique une force pour se déplacer apply_central_force(direction * speed) func _on_shoot_timer_timeout(): if player: _shoot() func _shoot(): # Crée une balle var bullet = bullet_scene.instantiate() # Position devant le bateau bullet.position = position + global_transform.x * 100.0 # 50 pixels devant # Rotation avec variation aléatoire var angle_rad = deg_to_rad(randf_range(-shoot_angle_variation, shoot_angle_variation)) #bullet.rotation = rotation + angle_rad bullet.rotation = self.rotation + angle_rad # Ajoute la balle à la scène get_parent().add_child(bullet) # Fonction pour convertir les degrés en radians func deg_to_rad(degrees: float) -> float: return degrees * PI / 180.0 func take_damage(_damage : float): queue_free()