fear (?) Added a is_on_boat function for the player
This commit is contained in:
parent
e0fb5dbac0
commit
d0ad5f4fe5
@ -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)
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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
1
scripts/boat.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bvejqjdvu7eb1
|
||||
@ -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
1
scripts/game.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cc6wo0ska0sem
|
||||
@ -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
1
scripts/player.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://ceijb6ltpgsy1
|
||||
Loading…
Reference in New Issue
Block a user