pirate-survivors/Characters/pirate.gd
2026-01-17 19:26:02 +01:00

67 lines
2.1 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
@export var wrecked_boat_scene: PackedScene
@export var coin_scene: PackedScene
@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):
var wrecked_boat = wrecked_boat_scene.instantiate()
wrecked_boat.position = position
wrecked_boat.rotation = rotation
get_parent().add_child(wrecked_boat)
var coin = coin_scene.instantiate()
coin.position = position
get_parent().add_child(coin)
queue_free()