80 lines
2.3 KiB
GDScript
80 lines
2.3 KiB
GDScript
extends CharacterBody2D
|
|
|
|
const SPEED = 300.0
|
|
@export var boat: Node2D
|
|
|
|
const TILE_SIZE = 128
|
|
var relative_position_on_boat = Vector2(0, 0)
|
|
var is_on_boat = true
|
|
var last_boat_rotation = 0.0
|
|
|
|
signal is_dead
|
|
|
|
func _ready():
|
|
if boat:
|
|
relative_position_on_boat = position - boat.position
|
|
last_boat_rotation = boat.rotation
|
|
|
|
func _physics_process(_delta):
|
|
# Tourner le joueur vers la souris
|
|
var mouse_position = get_global_mouse_position()
|
|
look_at(mouse_position)
|
|
|
|
if boat:
|
|
is_on_boat = get_on_boat()
|
|
if is_on_boat:
|
|
# Calculer la diff de rotation entre deux appels
|
|
var delta_rotation = boat.rotation - last_boat_rotation
|
|
|
|
# Ajuster la position du joueur en fonvtion de la rotation du bateau
|
|
relative_position_on_boat = relative_position_on_boat.rotated(delta_rotation)
|
|
position = boat.position + relative_position_on_boat # Set player position relative to the boat's position
|
|
|
|
# On autorise le joueur à bouger lorsqu'il est sur le bateau
|
|
velocity.x = Input.get_axis("ui_left", "ui_right") * SPEED
|
|
velocity.y = Input.get_axis("ui_up", "ui_down") * SPEED
|
|
move_and_slide()
|
|
|
|
# Mettre à jour la position relative
|
|
relative_position_on_boat = position - boat.position
|
|
last_boat_rotation = boat.rotation
|
|
|
|
else:
|
|
emit_signal("is_dead")
|
|
# Pour l'instant, hors du bateau, le joueur nage 4 * moins vite qu'il ne court
|
|
velocity.x = Input.get_axis("ui_left", "ui_right") * SPEED / 4
|
|
velocity.y = Input.get_axis("ui_up", "ui_down") * SPEED / 4
|
|
move_and_slide()
|
|
|
|
# Mettre à jour la position relative meme hors du bateau
|
|
relative_position_on_boat = position - boat.position
|
|
last_boat_rotation = boat.rotation
|
|
|
|
var debug_positions = []
|
|
|
|
func get_on_boat():
|
|
|
|
for area in $Area2D.get_overlapping_areas():
|
|
if area in boat.get_children():
|
|
return true
|
|
return false
|
|
|
|
#var node_pos = boat.to_local(position)
|
|
#var tile_size = 128.0
|
|
#
|
|
#for x in range(boat.tiles.size()):
|
|
#for y in range(boat.tiles[x].size()):
|
|
#var tile = boat.tiles[x][y]
|
|
#if tile:
|
|
#var tile_pos = tile.global_position
|
|
#var relative_tile_pos = tile_pos - boat.global_position
|
|
#relative_tile_pos = relative_tile_pos.rotated(-boat.rotation)
|
|
#
|
|
#if (
|
|
#abs(relative_tile_pos.x) <= tile_size / 2 and
|
|
#abs(relative_tile_pos.y) <= tile_size / 2
|
|
#):
|
|
#return true
|
|
#
|
|
#return false
|