From d0ad5f4fe5d1e1ef9b54843365a821a4b2334cc7 Mon Sep 17 00:00:00 2001 From: Lohan Date: Mon, 3 Mar 2025 23:22:06 +0100 Subject: [PATCH] fear (?) Added a is_on_boat function for the player --- game.tscn | 8 +++--- project.godot | 2 +- scenes/barrier.tscn | 7 ++--- scenes/boat.tscn | 2 +- scenes/player.tscn | 18 ++++++------- scripts/boat.gd | 9 ++++--- scripts/boat.gd.uid | 1 + scripts/game.gd | 2 +- scripts/game.gd.uid | 1 + scripts/player.gd | 60 +++++++++++++++++++++++++++++-------------- scripts/player.gd.uid | 1 + 11 files changed, 69 insertions(+), 42 deletions(-) create mode 100644 scripts/boat.gd.uid create mode 100644 scripts/game.gd.uid create mode 100644 scripts/player.gd.uid diff --git a/game.tscn b/game.tscn index 0c197c8..c92ae6f 100644 --- a/game.tscn +++ b/game.tscn @@ -1,15 +1,15 @@ [gd_scene load_steps=4 format=3 uid="uid://c0s77m0ea3sey"] -[ext_resource type="Script" path="res://scripts/game.gd" id="1_41a5u"] +[ext_resource type="Script" uid="uid://cc6wo0ska0sem" path="res://scripts/game.gd" id="1_41a5u"] [ext_resource type="PackedScene" uid="uid://dy71gkll44btc" path="res://scenes/player.tscn" id="1_geqht"] [ext_resource type="PackedScene" uid="uid://c7todenm3hn4d" path="res://scenes/boat.tscn" id="2_qmvsn"] [node name="Game" type="Node2D"] -position = Vector2(559, 282) +position = Vector2(568, 324) script = ExtResource("1_41a5u") [node name="Player" parent="." instance=ExtResource("1_geqht")] -position = Vector2(-685, -433) +position = Vector2(-812, -518) [node name="Boat" parent="." instance=ExtResource("2_qmvsn")] -position = Vector2(-738, -357) +position = Vector2(-865, -442) diff --git a/project.godot b/project.godot index 7898742..158af30 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="BoatCoop" run/main_scene="res://game.tscn" -config/features=PackedStringArray("4.3", "Forward Plus") +config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" [editor] diff --git a/scenes/barrier.tscn b/scenes/barrier.tscn index 6fa1c14..3c76899 100644 --- a/scenes/barrier.tscn +++ b/scenes/barrier.tscn @@ -10,7 +10,8 @@ fill_from = Vector2(1, 0) fill_to = Vector2(0, 1) [sub_resource type="SegmentShape2D" id="SegmentShape2D_dliv6"] -b = Vector2(0, 27.7419) +a = Vector2(9.78128e-07, 0.256411) +b = Vector2(9.78128e-07, 33.0769) [node name="Barrier" type="StaticBody2D"] @@ -21,6 +22,6 @@ texture = SubResource("GradientTexture2D_eesv4") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(-3.8147e-06, -65) -scale = Vector2(4.65, 4.65) +scale = Vector2(3.9, 3.9) shape = SubResource("SegmentShape2D_dliv6") -one_way_collision_margin = 66.3 +one_way_collision_margin = 51.0 diff --git a/scenes/boat.tscn b/scenes/boat.tscn index 543d00c..4615887 100644 --- a/scenes/boat.tscn +++ b/scenes/boat.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://c7todenm3hn4d"] -[ext_resource type="Script" path="res://scripts/boat.gd" id="1_brclq"] +[ext_resource type="Script" uid="uid://bvejqjdvu7eb1" path="res://scripts/boat.gd" id="1_brclq"] [node name="Boat" type="Node2D"] position = Vector2(-1, 0) diff --git a/scenes/player.tscn b/scenes/player.tscn index 01b8b94..ab21ef5 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,20 +1,20 @@ -[gd_scene load_steps=3 format=3 uid="uid://dy71gkll44btc"] +[gd_scene load_steps=4 format=3 uid="uid://dy71gkll44btc"] -[ext_resource type="Script" path="res://scripts/player.gd" id="1_jlots"] +[ext_resource type="Script" uid="uid://ceijb6ltpgsy1" path="res://scripts/player.gd" id="1_jlots"] [ext_resource type="Texture2D" uid="uid://s4iiumvei5wc" path="res://assets/triangle.svg" id="2_jjceo"] +[sub_resource type="CircleShape2D" id="CircleShape2D_g2els"] +radius = 6.0 + [node name="Player" type="CharacterBody2D"] motion_mode = 1 script = ExtResource("1_jlots") -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] -position = Vector2(-14, 2.86102e-06) -rotation = 1.58969 -scale = Vector2(0.998311, 1.01563) -polygon = PackedVector2Array(-9.03255, -0.816984, -0.51107, -26.5797, 8.99469, -1.15189) - [node name="Sprite2D2" type="Sprite2D" parent="."] -position = Vector2(0, -9.53674e-07) +position = Vector2(5, 0) rotation = -1.5708 scale = Vector2(0.230709, 0.642787) texture = ExtResource("2_jjceo") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_g2els") diff --git a/scripts/boat.gd b/scripts/boat.gd index 5a36c02..a8f2b42 100644 --- a/scripts/boat.gd +++ b/scripts/boat.gd @@ -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: diff --git a/scripts/boat.gd.uid b/scripts/boat.gd.uid new file mode 100644 index 0000000..e0c43f9 --- /dev/null +++ b/scripts/boat.gd.uid @@ -0,0 +1 @@ +uid://bvejqjdvu7eb1 diff --git a/scripts/game.gd b/scripts/game.gd index 69fafcd..630aa38 100644 --- a/scripts/game.gd +++ b/scripts/game.gd @@ -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: diff --git a/scripts/game.gd.uid b/scripts/game.gd.uid new file mode 100644 index 0000000..0216b2a --- /dev/null +++ b/scripts/game.gd.uid @@ -0,0 +1 @@ +uid://cc6wo0ska0sem diff --git a/scripts/player.gd b/scripts/player.gd index 05d3c9b..f73eb92 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -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 diff --git a/scripts/player.gd.uid b/scripts/player.gd.uid new file mode 100644 index 0000000..3685451 --- /dev/null +++ b/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://ceijb6ltpgsy1