BoatCoop/scripts/player.gd

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