fear (?) Added a is_on_boat function for the player

This commit is contained in:
2025-03-03 23:22:06 +01:00
parent e0fb5dbac0
commit d0ad5f4fe5
11 changed files with 69 additions and 42 deletions

View File

@@ -6,6 +6,7 @@ var tiles = []
var tile_size = 128.0
var test_broken_tiles = true
const boatSize = 5
const barrierOffset = 2
var speed = 100
var velocity = Vector2()
@@ -44,15 +45,15 @@ func spawn_boat_barriers():
var rotations = [90, 180, 270, 360]
if x == 0 || !tiles[x-1][y]:
x_pos[0] = tiles[x][y].position.x
y_pos[0] = tiles[x][y].position.y - (tile_size/2)
y_pos[0] = tiles[x][y].position.y - (tile_size/2) - barrierOffset
if y == 0 || !tiles[x][y-1]:
x_pos[1] = tiles[x][y].position.x - (tile_size/2)
x_pos[1] = tiles[x][y].position.x - (tile_size/2) - barrierOffset
y_pos[1] = tiles[x][y].position.y
if x == tiles.size()-1 || !tiles[x+1][y]:
x_pos[2] = tiles[x][y].position.x
y_pos[2] = tiles[x][y].position.y + (tile_size/2)
y_pos[2] = tiles[x][y].position.y + (tile_size/2) + barrierOffset
if y == tiles[x].size()-1 || !tiles[x][y+1]:
x_pos[3] = tiles[x][y].position.x + (tile_size/2)
x_pos[3] = tiles[x][y].position.x + (tile_size/2) + barrierOffset
y_pos[3] = tiles[x][y].position.y
for z in range(4):
if x_pos[z] != null && y_pos[z] != null:

1
scripts/boat.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://bvejqjdvu7eb1

View File

@@ -7,7 +7,7 @@ var player_instance: CharacterBody2D
var boat_instance: Node2D
func _ready():
# On enlève les scènes par défau
# On enlève les scènes par défaut
var default_boat = $Boat
var default_player = $Player
if default_boat:

1
scripts/game.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://cc6wo0ska0sem

View File

@@ -14,35 +14,57 @@ func _ready():
last_boat_rotation = boat.rotation
func _physics_process(_delta):
# On tourne le joueur vers la souris
# Tourner le joueur vers la souris
var mouse_position = get_global_mouse_position()
look_at(mouse_position)
if is_on_boat:
if boat:
# On calcule la difference de rotation du bateau depuis le dernier mouvement
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
# On adape la position du joueur en fonction de la nouvelle rota
# 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
# On autorise le joueur à se déplacer dans le bateau
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()
# Mise à jour des paramètres pour le déplacement du joueur en fonction du bateau
# Mettre à jour la position relative
relative_position_on_boat = position - boat.position
last_boat_rotation = boat.rotation
else:
# Quand on est pas sur le bateau, on se déplace librement (le lapin surtout)
velocity.x = Input.get_axis("ui_left", "ui_right") * SPEED/2
velocity.y = Input.get_axis("ui_up", "ui_down") * SPEED/2
move_and_slide()
else:
# 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
func set_on_boat(on_boat: bool):
#TODO
is_on_boat = on_boat
var debug_positions = []
func get_on_boat():
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

1
scripts/player.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://ceijb6ltpgsy1