From afcfa60804c281140825f2600ee59b271e0ad3b1 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 26 Feb 2025 16:20:58 +0100 Subject: [PATCH] voitures: freinage en fonction du time delta MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit le freinage dure un certain temps et ce temps dépends du delta des frames. Sinon les voitures freinent plus ou moins vite en fonction de ce que les pc cibles sont capable d'arriver à faire tourner. --- scenes/staD86C.tmp | 57 +++++++++++++++++++ .../semaphores/down_pedestrian_semaphore.tscn | 2 +- .../semaphores/down_semaphore.tscn | 2 +- .../semaphores/left_semaphore.tscn | 2 +- .../semaphores/right_sempahore.tscn | 2 +- .../semaphores/up_pedestrian_semaphore.tscn | 2 +- urban_furnitures/semaphores/up_semaphore.tscn | 2 +- vehicules/brake_zone.gd | 4 +- vehicules/car.gd | 20 +++---- 9 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 scenes/staD86C.tmp diff --git a/scenes/staD86C.tmp b/scenes/staD86C.tmp new file mode 100644 index 0000000..a1305f8 --- /dev/null +++ b/scenes/staD86C.tmp @@ -0,0 +1,57 @@ +[gd_scene load_steps=7 format=3 uid="uid://b4ydi1vv8dvwr"] + +[ext_resource type="PackedScene" uid="uid://d1oqt6sbjvopi" path="res://maps/world.tscn" id="1_6vs81"] +[ext_resource type="PackedScene" uid="uid://vclpg4e4ql54" path="res://caracters/player/player.tscn" id="2_5x6b5"] +[ext_resource type="PackedScene" uid="uid://cl201baro5y5" path="res://vehicules/npc_car.tscn" id="3_yuakw"] +[ext_resource type="PackedScene" uid="uid://bt1p311rn1h6q" path="res://vehicules/car.tscn" id="4_bqm78"] + +[sub_resource type="Curve2D" id="Curve2D_shblg"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, -285, 193, -72.1029, 112.165, 72.1029, -112.165, 20, 84, -92.8736, 1.22052, 92.8736, -1.22052, 220, -16, -72.4586, -10.5935, 72.4586, 10.5935, 2206, -11, -122.624, -4.07119, 122.624, 4.07119, 2387, 165, -98.6077, 103.694, 98.6077, -103.694, 2759, 110, 117.462, 37.6927, -117.462, -37.6927, 2715, -276, 114.239, -35.1712, -114.239, 35.1712, 2384, -293, 50.2246, -13.5362, -50.2246, 13.5362, 2209, -126, 61.4659, 8.33138, -61.4659, -8.33138, 133, -135, 40.4345, 62.8385, -40.4345, -62.8385, 40, -272, 50.2081, -75.7177, -50.2081, 75.7177, -399, -242, -67.7454, -78.8949, 67.7454, 78.8949, -399, 107, 0, 0, 0, 0, -286, 193, 0, 0, 0, 0, -285, 193) +} +point_count = 15 + +[sub_resource type="Curve2D" id="Curve2D_nircx"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 803, 1569, 0, 0, 0, 0, 910, 1573, 0, 0, 0, 0, 913, 1368, 0, 0, 0, 0, 1938, 1371, 0, 0, 0, 0, 1931, 342, 0, 0, 0, 0, 2082, 333, 0, 0, 0, 0, 2086, -88, 0, 0, 0, 0, 1656, -97, 0, 0, 0, 0, 1649, 73, 0, 0, 0, 0, 912.469, 60.5339, 0, 0, 0, 0, 904, -1165, 0, 0, 0, 0, -890, -1162, 0, 0, 0, 0, -885, -108, 0, 0, 0, 0, -1062, -106, 0, 0, 0, 0, -1073, 283, 0, 0, 0, 0, -624, 293, 0, 0, 0, 0, -616, 161, 0, 0, 0, 0, -577, 160, 0, 0, 0, 0, 823, 165, 0, 0, 0, 0, 802, 305, 0, 0, 0, 0, 806, 1560) +} +point_count = 21 + +[node name="scene1" type="Node2D"] + +[node name="world" parent="." instance=ExtResource("1_6vs81")] + +[node name="movibles" type="Node2D" parent="."] + +[node name="player" parent="movibles" instance=ExtResource("2_5x6b5")] +position = Vector2(87, 74) + +[node name="cars" type="Node" parent="movibles"] + +[node name="Path2D" type="Path2D" parent="movibles/cars"] +position = Vector2(-664, 181) +curve = SubResource("Curve2D_shblg") + +[node name="voiture_pnj" parent="movibles/cars/Path2D" node_paths=PackedStringArray("car", "world") instance=ExtResource("3_yuakw")] +position = Vector2(-285, 193) +car = NodePath("../Car") +world = NodePath("../../../../world") + +[node name="Car" parent="movibles/cars/Path2D" instance=ExtResource("4_bqm78")] +position = Vector2(-287, 196) +speed = null +timeToChangeVelocity = null + +[node name="Path2D2" type="Path2D" parent="movibles/cars"] +curve = SubResource("Curve2D_nircx") + +[node name="voiture_pnj" parent="movibles/cars/Path2D2" node_paths=PackedStringArray("car", "world") instance=ExtResource("3_yuakw")] +position = Vector2(803, 1569) +car = NodePath("../Car") +distanceMax = 150 +world = NodePath("../../../../world") + +[node name="Car" parent="movibles/cars/Path2D2" instance=ExtResource("4_bqm78")] +position = Vector2(803, 1558) +speed = 500 +timeToChangeVelocity = null diff --git a/urban_furnitures/semaphores/down_pedestrian_semaphore.tscn b/urban_furnitures/semaphores/down_pedestrian_semaphore.tscn index 76d9ab3..84c5226 100644 --- a/urban_furnitures/semaphores/down_pedestrian_semaphore.tscn +++ b/urban_furnitures/semaphores/down_pedestrian_semaphore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=3 uid="uid://bmunphhwcsl3a"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="2_nih7h"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="2_nih7h"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="3_ulyk6"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="4_k52t8"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="5_o0gjx"] diff --git a/urban_furnitures/semaphores/down_semaphore.tscn b/urban_furnitures/semaphores/down_semaphore.tscn index fed5274..f3a695e 100644 --- a/urban_furnitures/semaphores/down_semaphore.tscn +++ b/urban_furnitures/semaphores/down_semaphore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=4 uid="uid://djlp0et1giup2"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="1_w5kby"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="1_w5kby"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="2_igk5i"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="3_va7oi"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="4_3cw57"] diff --git a/urban_furnitures/semaphores/left_semaphore.tscn b/urban_furnitures/semaphores/left_semaphore.tscn index c8cc595..7be9615 100644 --- a/urban_furnitures/semaphores/left_semaphore.tscn +++ b/urban_furnitures/semaphores/left_semaphore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=4 uid="uid://c6nlrmhu8362v"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="1_1ufoq"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="1_1ufoq"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="1_03yma"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="2_hhwk3"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="4_j5rhp"] diff --git a/urban_furnitures/semaphores/right_sempahore.tscn b/urban_furnitures/semaphores/right_sempahore.tscn index 153fd77..28f65c3 100644 --- a/urban_furnitures/semaphores/right_sempahore.tscn +++ b/urban_furnitures/semaphores/right_sempahore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=4 uid="uid://cw3dtiscqueyt"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="1_7rvlf"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="1_7rvlf"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="2_jecjm"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="3_65epa"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="4_cbarg"] diff --git a/urban_furnitures/semaphores/up_pedestrian_semaphore.tscn b/urban_furnitures/semaphores/up_pedestrian_semaphore.tscn index 3b0f874..deb8187 100644 --- a/urban_furnitures/semaphores/up_pedestrian_semaphore.tscn +++ b/urban_furnitures/semaphores/up_pedestrian_semaphore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=3 uid="uid://dotr3vifbinfy"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="1_k7vt0"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="1_k7vt0"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="2_iui5y"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="3_rmo1c"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="4_cy22y"] diff --git a/urban_furnitures/semaphores/up_semaphore.tscn b/urban_furnitures/semaphores/up_semaphore.tscn index e557f6e..c497089 100644 --- a/urban_furnitures/semaphores/up_semaphore.tscn +++ b/urban_furnitures/semaphores/up_semaphore.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=4 uid="uid://btvlfkbqe6f4j"] -[ext_resource type="Script" path="res://urban_furnitures/semaphores/high_semaphore.gd" id="1_u47jh"] +[ext_resource type="Script" path="res://urban_furnitures/semaphores/semaphore.gd" id="1_u47jh"] [ext_resource type="TileSet" uid="uid://ckj00wy20rkfx" path="res://assest/tilesets/exterieur.tres" id="2_fdc55"] [ext_resource type="PackedScene" uid="uid://brh7cqaxc13ie" path="res://zindex/ZIndexControler.tscn" id="3_cla2j"] [ext_resource type="PackedScene" uid="uid://dpyadhlqawviq" path="res://vehicules/brakeZone.tscn" id="4_3ail0"] diff --git a/vehicules/brake_zone.gd b/vehicules/brake_zone.gd index 1843aff..e8817f4 100644 --- a/vehicules/brake_zone.gd +++ b/vehicules/brake_zone.gd @@ -1,12 +1,12 @@ extends Node2D -@export var fullStop: bool = true +@export var wantedVelocity: int = 0 func _on_body_entered(body: Node2D) -> void: if OS.is_debug_build(): $Label.text = str(body)+ " " + "body entered " if body.has_method("brake"): - (body as Car).brake(fullStop) + (body as Car).brake(wantedVelocity) func _on_body_exited(body: Node2D) -> void: diff --git a/vehicules/car.gd b/vehicules/car.gd index 4d5c88d..b90dff1 100644 --- a/vehicules/car.gd +++ b/vehicules/car.gd @@ -3,14 +3,14 @@ extends CharacterBody2D @export var debugLabel: Label @export var speed = 750 # How fast the car will move (pixels/sec). -@export var acceleration = speed / 100 -@export var slowZoneSpeed = 300 +@export var timeToChangeVelocity = 0.5 # How long to break to a full stop + +var targetedVelocity = 0 var current_speed = speed; @onready var animation_tree := $AnimationTree @onready var state_machine := animation_tree.get("parameters/driving/playback") as AnimationNodeStateMachinePlayback var brakePedal = false; -var fullStop = false; var last_facing_direction = Vector2(0,-1) # facing north @@ -27,14 +27,12 @@ func updateFacingDirectionInAnimationTree(): # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: $ZIndexControler/ShapeCast2D.enabled = !$CollisionHorizontal.disabled - + var accelerationStep = (speed * delta / timeToChangeVelocity) + if brakePedal: - if fullStop: - current_speed = max(0, current_speed - acceleration) - else: - current_speed = max(slowZoneSpeed, current_speed - acceleration) + current_speed = max(targetedVelocity, current_speed - accelerationStep) else: - current_speed = min(current_speed + acceleration, speed) + current_speed = min(current_speed + accelerationStep, speed) if (targetGlobalPosition != null): direction = (targetGlobalPosition - global_position).normalized() @@ -45,9 +43,9 @@ func _process(delta: float) -> void: last_facing_direction = velocity.normalized() updateFacingDirectionInAnimationTree() -func brake(needsToStop : bool): +func brake(wantedVelocity : int): brakePedal = true; - fullStop = needsToStop; + targetedVelocity = wantedVelocity; func accelerate(): brakePedal = false;