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