feat: change boat collision and improve overall code
This commit is contained in:
parent
d0ad5f4fe5
commit
ac556e3715
11
game.tscn
11
game.tscn
@ -8,8 +8,11 @@
|
||||
position = Vector2(568, 324)
|
||||
script = ExtResource("1_41a5u")
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("1_geqht")]
|
||||
position = Vector2(-812, -518)
|
||||
|
||||
[node name="Boat" parent="." instance=ExtResource("2_qmvsn")]
|
||||
position = Vector2(-865, -442)
|
||||
position = Vector2(-15, 40)
|
||||
|
||||
[node name="Player" parent="." node_paths=PackedStringArray("boat") instance=ExtResource("1_geqht")]
|
||||
position = Vector2(-67, 6)
|
||||
boat = NodePath("../Boat")
|
||||
|
||||
[connection signal="is_dead" from="Player" to="Boat" method="_on_player_is_dead"]
|
||||
|
||||
@ -54,3 +54,8 @@ ui_down={
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
2d_physics/layer_1="Barrière"
|
||||
2d_physics/layer_2="Joueur"
|
||||
|
||||
@ -1,27 +1,7 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://crxp1lat0mj1n"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://crxp1lat0mj1n"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_7c5k4"]
|
||||
offsets = PackedFloat32Array(0, 0.00371747, 0.736059, 0.754647, 1)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 0.94902, 0.0509804, 0.0509804, 1, 0.15042, 0.503262, 0.834652, 1, 0.117488, 0.521912, 0.866968, 1, 0.94902, 0.0509804, 0.0509804, 1)
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_exqad"]
|
||||
size = Vector2(128, 128)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_eesv4"]
|
||||
gradient = SubResource("Gradient_7c5k4")
|
||||
fill_from = Vector2(1, 0)
|
||||
fill_to = Vector2(0, 1)
|
||||
|
||||
[sub_resource type="SegmentShape2D" id="SegmentShape2D_dliv6"]
|
||||
a = Vector2(9.78128e-07, 0.256411)
|
||||
b = Vector2(9.78128e-07, 33.0769)
|
||||
|
||||
[node name="Barrier" type="StaticBody2D"]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(5.96046e-08, 0)
|
||||
scale = Vector2(0.203125, 2.01563)
|
||||
texture = SubResource("GradientTexture2D_eesv4")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-3.8147e-06, -65)
|
||||
scale = Vector2(3.9, 3.9)
|
||||
shape = SubResource("SegmentShape2D_dliv6")
|
||||
one_way_collision_margin = 51.0
|
||||
[node name="Barrier" type="CollisionShape2D"]
|
||||
shape = SubResource("RectangleShape2D_exqad")
|
||||
|
||||
@ -3,5 +3,11 @@
|
||||
[ext_resource type="Script" uid="uid://bvejqjdvu7eb1" path="res://scripts/boat.gd" id="1_brclq"]
|
||||
|
||||
[node name="Boat" type="Node2D"]
|
||||
position = Vector2(-1, 0)
|
||||
script = ExtResource("1_brclq")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="StaticBody2D" type="StaticBody2D" parent="."]
|
||||
|
||||
[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://dy71gkll44btc"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dy71gkll44btc"]
|
||||
|
||||
[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"]
|
||||
@ -6,11 +6,15 @@
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_g2els"]
|
||||
radius = 6.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_qhqgy"]
|
||||
|
||||
[node name="Player" type="CharacterBody2D"]
|
||||
collision_layer = 2
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_jlots")
|
||||
|
||||
[node name="Sprite2D2" type="Sprite2D" parent="."]
|
||||
z_index = 100
|
||||
position = Vector2(5, 0)
|
||||
rotation = -1.5708
|
||||
scale = Vector2(0.230709, 0.642787)
|
||||
@ -18,3 +22,9 @@ texture = ExtResource("2_jjceo")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_g2els")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
collision_layer = 2
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("CircleShape2D_qhqgy")
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
[node name="Tile" type="Node2D"]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
modulate = Color(1, 1, 1, 0.337255)
|
||||
position = Vector2(0, 2.28882e-05)
|
||||
scale = Vector2(0.074, 0.0740913)
|
||||
texture = ExtResource("1_bgcjk")
|
||||
|
||||
@ -17,9 +17,9 @@ func _ready():
|
||||
func spawn_boat_tiles():
|
||||
tiles.clear()
|
||||
|
||||
for y in range(boatSize):
|
||||
for x in range(boatSize):
|
||||
var row = []
|
||||
for x in range(boatSize):
|
||||
for y in range(boatSize):
|
||||
if test_broken_tiles && randf() < 0.7 || (x == floor(boatSize/2) && y == floor(boatSize/2)): # 70% de chance de spawn une tuile pour tester les bateaux incomplets
|
||||
var tile = tile_scene.instantiate()
|
||||
add_child(tile)
|
||||
@ -29,6 +29,13 @@ func spawn_boat_tiles():
|
||||
(x - ((boatSize - 1) * 0.5)) * tile_size,
|
||||
(y - ((boatSize - 1) * 0.5)) * tile_size
|
||||
)
|
||||
|
||||
var collision_shape = barrier_scene.instantiate()
|
||||
$Area2D.add_child(collision_shape)
|
||||
collision_shape.position = Vector2(
|
||||
(x - ((boatSize - 1) * 0.5)) * tile_size,
|
||||
(y - ((boatSize - 1) * 0.5)) * tile_size
|
||||
)
|
||||
|
||||
row.append(tile)
|
||||
else:
|
||||
@ -37,35 +44,31 @@ func spawn_boat_tiles():
|
||||
|
||||
|
||||
func spawn_boat_barriers():
|
||||
for x in range(tiles.size()):
|
||||
for y in range(tiles[x].size()):
|
||||
if tiles[x][y]:
|
||||
var x_pos = [null,null,null,null];
|
||||
var y_pos = [null,null,null,null];
|
||||
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) - barrierOffset
|
||||
if y == 0 || !tiles[x][y-1]:
|
||||
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) + barrierOffset
|
||||
if y == tiles[x].size()-1 || !tiles[x][y+1]:
|
||||
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:
|
||||
var barrier = barrier_scene.instantiate()
|
||||
add_child(barrier)
|
||||
barrier.position = Vector2(
|
||||
x_pos[z],
|
||||
y_pos[z]
|
||||
)
|
||||
# On applique la rotation à la barrière
|
||||
barrier.rotation = deg_to_rad(rotations[z])
|
||||
|
||||
var collider_range = range(tiles.size())
|
||||
collider_range.append_array([-1, boatSize])
|
||||
for x in collider_range:
|
||||
for y in collider_range:
|
||||
if not has_tile(x, y):
|
||||
var barrier = barrier_scene.instantiate()
|
||||
$StaticBody2D.add_child(barrier)
|
||||
barrier.position = Vector2(
|
||||
(x - ((boatSize - 1) * 0.5)) * tile_size,
|
||||
(y - ((boatSize - 1) * 0.5)) * tile_size
|
||||
)
|
||||
|
||||
func has_tile(x : int, y : int):
|
||||
if x >= 0 and y >= 0 and x < boatSize and y < boatSize:
|
||||
return tiles[x][y] != null
|
||||
else : return false
|
||||
|
||||
func _physics_process(delta):
|
||||
#Just spinning
|
||||
rotation += delta/6
|
||||
|
||||
|
||||
func _on_player_is_dead():
|
||||
print("Est mort")
|
||||
|
||||
|
||||
func _on_area_2d_body_entered(body):
|
||||
pass # Replace with function body.
|
||||
|
||||
@ -6,22 +6,22 @@ extends Node2D
|
||||
var player_instance: CharacterBody2D
|
||||
var boat_instance: Node2D
|
||||
|
||||
func _ready():
|
||||
#func _ready():
|
||||
# On enlève les scènes par défaut
|
||||
var default_boat = $Boat
|
||||
var default_player = $Player
|
||||
if default_boat:
|
||||
default_boat.queue_free()
|
||||
if default_player:
|
||||
default_player.queue_free()
|
||||
#var default_boat = $Boat
|
||||
#var default_player = $Player
|
||||
#if default_boat:
|
||||
#default_boat.queue_free()
|
||||
#if default_player:
|
||||
#default_player.queue_free()
|
||||
|
||||
# On instancie les scènes que l'on veut garder
|
||||
boat_instance = boat_scene.instantiate()
|
||||
player_instance = player_scene.instantiate()
|
||||
#boat_instance = boat_scene.instantiate()
|
||||
#player_instance = player_scene.instantiate()
|
||||
|
||||
# On ajoue les scènes essentielles à la scène principale
|
||||
add_child(boat_instance)
|
||||
add_child(player_instance)
|
||||
#add_child(boat_instance)
|
||||
#add_child(player_instance)
|
||||
|
||||
# Et on assigne le bateau au joueur
|
||||
player_instance.boat = boat_instance
|
||||
#player_instance.boat = boat_instance
|
||||
|
||||
@ -8,6 +8,8 @@ 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
|
||||
@ -38,6 +40,7 @@ func _physics_process(_delta):
|
||||
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
|
||||
@ -50,21 +53,27 @@ func _physics_process(_delta):
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user