55 lines
1.8 KiB
GDScript
55 lines
1.8 KiB
GDScript
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()
|