save
This commit is contained in:
parent
ad95711535
commit
2e310f4053
25 changed files with 852 additions and 74 deletions
11
entities/camera/camera_3d.gd
Normal file
11
entities/camera/camera_3d.gd
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
extends Camera3D
|
||||||
|
|
||||||
|
@export var follow_point : Node3D
|
||||||
|
@export var follow_speed := 10.0
|
||||||
|
@export var rotation_speed := 8.0
|
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void:
|
||||||
|
var target_basis = follow_point.global_transform.basis
|
||||||
|
var current_basis = global_transform.basis
|
||||||
|
global_transform.origin = global_transform.origin.lerp(follow_point.global_position, follow_speed * delta)
|
||||||
|
global_transform.basis = current_basis.slerp(target_basis, rotation_speed * delta)
|
1
entities/camera/camera_3d.gd.uid
Normal file
1
entities/camera/camera_3d.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://bdhupx1blbgwo
|
|
@ -1,6 +1,8 @@
|
||||||
extends RigidBody3D
|
extends RigidBody3D
|
||||||
class_name Car
|
class_name Car
|
||||||
|
|
||||||
|
@export var road_path : RoadPath
|
||||||
|
|
||||||
@export var forward_force: float = 100.0
|
@export var forward_force: float = 100.0
|
||||||
@export var backward_force: float = 50.0
|
@export var backward_force: float = 50.0
|
||||||
@export var steer_speed: float = 2.0
|
@export var steer_speed: float = 2.0
|
||||||
|
@ -9,10 +11,10 @@ class_name Car
|
||||||
@export var lateral_velocity_start_drift_threshold: float = 10.0
|
@export var lateral_velocity_start_drift_threshold: float = 10.0
|
||||||
@export var lateral_velocity_total_drift_threshold: float = 15.0
|
@export var lateral_velocity_total_drift_threshold: float = 15.0
|
||||||
|
|
||||||
@onready var forward_left: RayCast3D = $Raycasts/ForwardLeft
|
@onready var forward_left: RayCast3D = $ForwardLeft
|
||||||
@onready var forward_right: RayCast3D = $Raycasts/ForwardRight
|
@onready var forward_right: RayCast3D = $ForwardRight
|
||||||
@onready var backward_right: RayCast3D = $Raycasts/BackwardRight
|
@onready var backward_right: RayCast3D = $BackwardRight
|
||||||
@onready var backward_left: RayCast3D = $Raycasts/BackwardLeft
|
@onready var backward_left: RayCast3D = $BackwardLeft
|
||||||
|
|
||||||
@onready var forward_left_respawn: RayCast3D = $RaycastsRespawn/ForwardLeftRespawn
|
@onready var forward_left_respawn: RayCast3D = $RaycastsRespawn/ForwardLeftRespawn
|
||||||
@onready var forward_right_respawn: RayCast3D = $RaycastsRespawn/ForwardRightRespawn
|
@onready var forward_right_respawn: RayCast3D = $RaycastsRespawn/ForwardRightRespawn
|
||||||
|
@ -31,10 +33,13 @@ var respawn_pos : Vector3
|
||||||
var thread: Thread = Thread.new()
|
var thread: Thread = Thread.new()
|
||||||
var steer_input = 0.0
|
var steer_input = 0.0
|
||||||
|
|
||||||
var cheat := false
|
|
||||||
var air_time := 0.0
|
var air_time := 0.0
|
||||||
|
|
||||||
|
|
||||||
|
func custom_gravity() -> Vector3:
|
||||||
|
var attractor = road_path.to_global(road_path.curve.get_closest_point(road_path.to_local(position)))
|
||||||
|
return (attractor - position).normalized()
|
||||||
|
|
||||||
func return_to_road():
|
func return_to_road():
|
||||||
position = respawn_pos + 3*Vector3.UP
|
position = respawn_pos + 3*Vector3.UP
|
||||||
rotation.z = 0
|
rotation.z = 0
|
||||||
|
@ -58,10 +63,13 @@ func _physics_process(delta: float) -> void:
|
||||||
var is_all_wheel_on_floor := backward_left_respawn.is_colliding() && backward_right_respawn.is_colliding() && forward_left_respawn.is_colliding() && forward_right_respawn.is_colliding()
|
var is_all_wheel_on_floor := backward_left_respawn.is_colliding() && backward_right_respawn.is_colliding() && forward_left_respawn.is_colliding() && forward_right_respawn.is_colliding()
|
||||||
var is_flat : bool = transform.basis.y.dot(Vector3.UP) > 0.9
|
var is_flat : bool = transform.basis.y.dot(Vector3.UP) > 0.9
|
||||||
|
|
||||||
|
# Doing custom gravity like a chad
|
||||||
|
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, custom_gravity())
|
||||||
|
|
||||||
if is_all_wheel_on_floor && is_flat:
|
if is_all_wheel_on_floor && is_flat:
|
||||||
respawn_pos = position
|
respawn_pos = position
|
||||||
|
|
||||||
if !is_on_floor && !cheat:
|
if !is_on_floor:
|
||||||
#$DriftParticles.emitting = false
|
#$DriftParticles.emitting = false
|
||||||
#$DriftParticles2.emitting = false
|
#$DriftParticles2.emitting = false
|
||||||
#AudioServer.set_bus_volume_db(5, -80)
|
#AudioServer.set_bus_volume_db(5, -80)
|
||||||
|
@ -70,10 +78,6 @@ func _physics_process(delta: float) -> void:
|
||||||
return_to_road()
|
return_to_road()
|
||||||
return
|
return
|
||||||
air_time = 0.0
|
air_time = 0.0
|
||||||
if cheat && Input.is_key_pressed(KEY_SPACE):
|
|
||||||
linear_velocity.y += 20*delta
|
|
||||||
if cheat:
|
|
||||||
forward_force = 500
|
|
||||||
|
|
||||||
# Movement
|
# Movement
|
||||||
if move_input > 0.0:
|
if move_input > 0.0:
|
||||||
|
@ -117,5 +121,3 @@ func _physics_process(delta: float) -> void:
|
||||||
apply_central_force(lateral_friction_force)
|
apply_central_force(lateral_friction_force)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,38 +1,48 @@
|
||||||
[gd_scene load_steps=4 format=3 uid="uid://dgs0fqojgcmu3"]
|
[gd_scene load_steps=6 format=3 uid="uid://dgs0fqojgcmu3"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://ctjy0e806j0vk" path="res://entities/car/car.gd" id="1_nh45c"]
|
[ext_resource type="Script" uid="uid://ctjy0e806j0vk" path="res://entities/car/car.gd" id="1_nh45c"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://drrl25ujbosbr" path="res://entities/car/tron_moto_lowpoly/scene.gltf" id="2_1ang0"]
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_kkl2f"]
|
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_1ang0"]
|
||||||
size = Vector3(1, 1, 2)
|
friction = 0.5
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_76tdi"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_76tdi"]
|
||||||
size = Vector3(1, 1, 2)
|
size = Vector3(1, 1, 2.2)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_yotxw"]
|
||||||
|
height = 1.1
|
||||||
|
|
||||||
[node name="Car" type="RigidBody3D"]
|
[node name="Car" type="RigidBody3D"]
|
||||||
|
mass = 10.0
|
||||||
|
physics_material_override = SubResource("PhysicsMaterial_1ang0")
|
||||||
script = ExtResource("1_nh45c")
|
script = ExtResource("1_nh45c")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
[node name="ForwardLeft" type="RayCast3D" parent="."]
|
||||||
mesh = SubResource("BoxMesh_kkl2f")
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.435121, -1)
|
||||||
|
|
||||||
|
[node name="ForwardRight" type="RayCast3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.435121, -1)
|
||||||
|
|
||||||
|
[node name="BackwardRight" type="RayCast3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.435121, 1)
|
||||||
|
|
||||||
|
[node name="BackwardLeft" type="RayCast3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.435121, 1)
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.00250244)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.1)
|
||||||
shape = SubResource("BoxShape3D_76tdi")
|
shape = SubResource("BoxShape3D_76tdi")
|
||||||
|
|
||||||
[node name="Raycasts" type="Node3D" parent="."]
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, -4.37114e-08, 0, -4.37114e-08, -1, -1, -4.37114e-08, 1.91069e-15, 0, 0, 1)
|
||||||
|
shape = SubResource("CylinderShape3D_yotxw")
|
||||||
|
|
||||||
[node name="ForwardLeft" type="RayCast3D" parent="Raycasts"]
|
[node name="CollisionShape3D3" type="CollisionShape3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, -1)
|
transform = Transform3D(-4.37114e-08, 1, -4.37114e-08, 0, -4.37114e-08, -1, -1, -4.37114e-08, 1.91069e-15, 0, 0, -1.2)
|
||||||
|
shape = SubResource("CylinderShape3D_yotxw")
|
||||||
[node name="ForwardRight" type="RayCast3D" parent="Raycasts"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, -1)
|
|
||||||
|
|
||||||
[node name="BackwardRight" type="RayCast3D" parent="Raycasts"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 1)
|
|
||||||
|
|
||||||
[node name="BackwardLeft" type="RayCast3D" parent="Raycasts"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 1)
|
|
||||||
|
|
||||||
[node name="RaycastsRespawn" type="Node3D" parent="."]
|
[node name="RaycastsRespawn" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0)
|
||||||
|
|
||||||
[node name="ForwardLeftRespawn" type="RayCast3D" parent="RaycastsRespawn"]
|
[node name="ForwardLeftRespawn" type="RayCast3D" parent="RaycastsRespawn"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, -1)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, -1)
|
||||||
|
@ -45,3 +55,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 1)
|
||||||
|
|
||||||
[node name="BackwardLeftRespawn" type="RayCast3D" parent="RaycastsRespawn"]
|
[node name="BackwardLeftRespawn" type="RayCast3D" parent="RaycastsRespawn"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 1)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 1)
|
||||||
|
|
||||||
|
[node name="Sketchfab_Scene" parent="." instance=ExtResource("2_1ang0")]
|
||||||
|
transform = Transform3D(-0.35, 0, -3.0598e-08, 0, 0.35, 0, 3.0598e-08, 0, -0.35, 0.0317484, -0.52664, 0)
|
||||||
|
|
||||||
|
[node name="CameraFollowPoint" type="Marker3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.31962, -2.93594)
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||||
|
|
11
entities/car/tron_moto_lowpoly/license.txt
Normal file
11
entities/car/tron_moto_lowpoly/license.txt
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Model Information:
|
||||||
|
* title: TRON MOTO LOWPOLY
|
||||||
|
* source: https://sketchfab.com/3d-models/tron-moto-lowpoly-440eb1d0f37e475ca7eda15517f66552
|
||||||
|
* author: gedebotax1984 (https://sketchfab.com/gedebotax1984)
|
||||||
|
|
||||||
|
Model License:
|
||||||
|
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
||||||
|
* requirements: Author must be credited. Commercial use is allowed.
|
||||||
|
|
||||||
|
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
|
||||||
|
This work is based on "TRON MOTO LOWPOLY" (https://sketchfab.com/3d-models/tron-moto-lowpoly-440eb1d0f37e475ca7eda15517f66552) by gedebotax1984 (https://sketchfab.com/gedebotax1984) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
BIN
entities/car/tron_moto_lowpoly/scene.bin
Normal file
BIN
entities/car/tron_moto_lowpoly/scene.bin
Normal file
Binary file not shown.
488
entities/car/tron_moto_lowpoly/scene.gltf
Normal file
488
entities/car/tron_moto_lowpoly/scene.gltf
Normal file
|
@ -0,0 +1,488 @@
|
||||||
|
{
|
||||||
|
"accessors": [
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 5771,
|
||||||
|
"max": [
|
||||||
|
1.418189525604248,
|
||||||
|
-3.2901666164398193,
|
||||||
|
8.152215957641602
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-2.154029607772827,
|
||||||
|
-5.40167760848999,
|
||||||
|
-1.4549527168273926
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 69252,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 5771,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-1.0,
|
||||||
|
-1.0,
|
||||||
|
-1.0
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 5771,
|
||||||
|
"max": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"componentType": 5125,
|
||||||
|
"count": 13137,
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 138504,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 3506,
|
||||||
|
"max": [
|
||||||
|
44.090858459472656,
|
||||||
|
9.652633666992188,
|
||||||
|
34.13569641113281
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-2.5885181427001953,
|
||||||
|
-40.4989013671875,
|
||||||
|
-117.7420883178711
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 180576,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 3506,
|
||||||
|
"max": [
|
||||||
|
0.9996709823608398,
|
||||||
|
1.0,
|
||||||
|
0.9999953508377075
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.9996709227561951,
|
||||||
|
-1.0,
|
||||||
|
-0.9999963045120239
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"byteOffset": 46168,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 3506,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"byteOffset": 52548,
|
||||||
|
"componentType": 5125,
|
||||||
|
"count": 5856,
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 222648,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6878,
|
||||||
|
"max": [
|
||||||
|
3.3031864166259766,
|
||||||
|
2.111264705657959,
|
||||||
|
4.73450231552124
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.1486961841583252,
|
||||||
|
-0.15285027027130127,
|
||||||
|
-4.455859184265137
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 305184,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6878,
|
||||||
|
"max": [
|
||||||
|
0.9998899698257446,
|
||||||
|
1.0,
|
||||||
|
0.999742329120636
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.999989926815033,
|
||||||
|
-1.0,
|
||||||
|
-0.9999964237213135
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"byteOffset": 74216,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6878,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"byteOffset": 75972,
|
||||||
|
"componentType": 5125,
|
||||||
|
"count": 11328,
|
||||||
|
"type": "SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"asset": {
|
||||||
|
"extras": {
|
||||||
|
"author": "gedebotax1984 (https://sketchfab.com/gedebotax1984)",
|
||||||
|
"license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
|
||||||
|
"source": "https://sketchfab.com/3d-models/tron-moto-lowpoly-440eb1d0f37e475ca7eda15517f66552",
|
||||||
|
"title": "TRON MOTO LOWPOLY"
|
||||||
|
},
|
||||||
|
"generator": "Sketchfab-15.30.0",
|
||||||
|
"version": "2.0"
|
||||||
|
},
|
||||||
|
"bufferViews": [
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 121284,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34963
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 129240,
|
||||||
|
"byteOffset": 121284,
|
||||||
|
"byteStride": 8,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 387720,
|
||||||
|
"byteOffset": 250524,
|
||||||
|
"byteStride": 12,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34962
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers": [
|
||||||
|
{
|
||||||
|
"byteLength": 638244,
|
||||||
|
"uri": "scene.bin"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extensionsUsed": [
|
||||||
|
"KHR_materials_clearcoat",
|
||||||
|
"KHR_materials_specular"
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"doubleSided": true,
|
||||||
|
"extensions": {
|
||||||
|
"KHR_materials_clearcoat": {
|
||||||
|
"clearcoatFactor": 1.0,
|
||||||
|
"clearcoatRoughnessFactor": 0.04
|
||||||
|
},
|
||||||
|
"KHR_materials_specular": {
|
||||||
|
"specularColorFactor": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"specularFactor": 0.9798125099047921
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "Material",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorFactor": [
|
||||||
|
0.001712375681525524,
|
||||||
|
9.849948610545045e-05,
|
||||||
|
9.849948610545045e-05,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"metallicFactor": 0.937145713205983,
|
||||||
|
"roughnessFactor": 0.5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doubleSided": true,
|
||||||
|
"extensions": {
|
||||||
|
"KHR_materials_specular": {
|
||||||
|
"specularColorFactor": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"specularFactor": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "Material.003",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorFactor": [
|
||||||
|
0.15766773041875703,
|
||||||
|
0.14889900202474154,
|
||||||
|
0.14889900202474154,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"roughnessFactor": 0.5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doubleSided": true,
|
||||||
|
"extensions": {
|
||||||
|
"KHR_materials_specular": {
|
||||||
|
"specularColorFactor": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"specularFactor": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "Material.002",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorFactor": [
|
||||||
|
0.0016820681473392314,
|
||||||
|
0.7989292457183024,
|
||||||
|
0.9602083826516892,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"metallicFactor": 0.0,
|
||||||
|
"roughnessFactor": 0.5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes": [
|
||||||
|
{
|
||||||
|
"name": "Object_0",
|
||||||
|
"primitives": [
|
||||||
|
{
|
||||||
|
"attributes": {
|
||||||
|
"NORMAL": 1,
|
||||||
|
"POSITION": 0,
|
||||||
|
"TEXCOORD_0": 2
|
||||||
|
},
|
||||||
|
"indices": 3,
|
||||||
|
"material": 0,
|
||||||
|
"mode": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Object_1",
|
||||||
|
"primitives": [
|
||||||
|
{
|
||||||
|
"attributes": {
|
||||||
|
"NORMAL": 5,
|
||||||
|
"POSITION": 4,
|
||||||
|
"TEXCOORD_0": 6
|
||||||
|
},
|
||||||
|
"indices": 7,
|
||||||
|
"material": 1,
|
||||||
|
"mode": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Object_2",
|
||||||
|
"primitives": [
|
||||||
|
{
|
||||||
|
"attributes": {
|
||||||
|
"NORMAL": 9,
|
||||||
|
"POSITION": 8,
|
||||||
|
"TEXCOORD_0": 10
|
||||||
|
},
|
||||||
|
"indices": 11,
|
||||||
|
"material": 2,
|
||||||
|
"mode": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
-1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "Sketchfab_model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"name": "root"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
3,
|
||||||
|
5,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
-1.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "GLTF_SceneRootNode"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
0.0,
|
||||||
|
-1.0,
|
||||||
|
-0.0,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
4.363928318023682,
|
||||||
|
1.355409860610962,
|
||||||
|
-2.9339444637298584,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "Circle.005_1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mesh": 0,
|
||||||
|
"name": "Object_4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
0.0,
|
||||||
|
-0.05666607618331909,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.05666607618331909,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.05666607618331909,
|
||||||
|
0.0,
|
||||||
|
0.8766956329345703,
|
||||||
|
2.729276180267334,
|
||||||
|
2.7074050903320313,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "Cylinder.001_2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mesh": 1,
|
||||||
|
"name": "Object_6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
0.0,
|
||||||
|
-1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
-0.9677443504333496,
|
||||||
|
3.4250857830047607,
|
||||||
|
0.49128252267837524,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "Circle.025_3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mesh": 2,
|
||||||
|
"name": "Object_8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scene": 0,
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"name": "Sketchfab_Scene",
|
||||||
|
"nodes": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
37
entities/car/tron_moto_lowpoly/scene.gltf.import
Normal file
37
entities/car/tron_moto_lowpoly/scene.gltf.import
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://drrl25ujbosbr"
|
||||||
|
path="res://.godot/imported/scene.gltf-0f2cf150bf6291a4d643a4542d4a3400.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://entities/car/tron_moto_lowpoly/scene.gltf"
|
||||||
|
dest_files=["res://.godot/imported/scene.gltf-0f2cf150bf6291a4d643a4542d4a3400.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
_subresources={}
|
||||||
|
gltf/naming_version=1
|
||||||
|
gltf/embedded_image_handling=1
|
6
entities/checkpoint/CheckPointManager.tscn
Normal file
6
entities/checkpoint/CheckPointManager.tscn
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cu5r7oxtqa2c0"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dp4qacjfhtyul" path="res://entities/checkpoint/check_point_manager.gd" id="1_g2cn0"]
|
||||||
|
|
||||||
|
[node name="CheckPointManager" type="Node"]
|
||||||
|
script = ExtResource("1_g2cn0")
|
29
entities/checkpoint/check_point_manager.gd
Normal file
29
entities/checkpoint/check_point_manager.gd
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var nb_checkpoints := 5
|
||||||
|
@export var max_lap := 3
|
||||||
|
|
||||||
|
var current_checkpoint := 0
|
||||||
|
var current_lap := 0
|
||||||
|
|
||||||
|
func checkPointEnter(check_point_id):
|
||||||
|
if check_point_id != current_checkpoint:
|
||||||
|
print("not good checkpoint")
|
||||||
|
return
|
||||||
|
|
||||||
|
if check_point_id == 0:
|
||||||
|
current_lap += 1
|
||||||
|
current_checkpoint = 1
|
||||||
|
print("new lap")
|
||||||
|
else:
|
||||||
|
current_checkpoint += 1
|
||||||
|
print(current_checkpoint)
|
||||||
|
|
||||||
|
if (current_lap == max_lap):
|
||||||
|
endTrack()
|
||||||
|
return
|
||||||
|
|
||||||
|
func endTrack():
|
||||||
|
print("end")
|
||||||
|
current_lap = 0
|
||||||
|
current_checkpoint = 0
|
1
entities/checkpoint/check_point_manager.gd.uid
Normal file
1
entities/checkpoint/check_point_manager.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://dp4qacjfhtyul
|
14
entities/checkpoint/checkpoint.gd
Normal file
14
entities/checkpoint/checkpoint.gd
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
extends Area3D
|
||||||
|
class_name CheckPoint
|
||||||
|
@export var check_point_id : int = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
|
if body is not Car:
|
||||||
|
return
|
||||||
|
|
||||||
|
CheckPointManager.checkPointEnter(check_point_id)
|
||||||
|
|
||||||
|
|
||||||
|
|
1
entities/checkpoint/checkpoint.gd.uid
Normal file
1
entities/checkpoint/checkpoint.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://dxswi3yuxexve
|
22
entities/checkpoint/checkpoint.tscn
Normal file
22
entities/checkpoint/checkpoint.tscn
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
[gd_scene load_steps=5 format=3 uid="uid://caolvlv4uvi04"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dxswi3yuxexve" path="res://entities/checkpoint/checkpoint.gd" id="1_ywa0e"]
|
||||||
|
[ext_resource type="Material" uid="uid://5vg20wpsk85u" path="res://entities/checkpoint/checkpoint_mat.tres" id="2_ha6r5"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_gkifo"]
|
||||||
|
size = Vector3(15, 5, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_ywa0e"]
|
||||||
|
material = ExtResource("2_ha6r5")
|
||||||
|
size = Vector3(15, 5, 1)
|
||||||
|
|
||||||
|
[node name="Checkpoint" type="Area3D"]
|
||||||
|
script = ExtResource("1_ywa0e")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
shape = SubResource("BoxShape3D_gkifo")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("BoxMesh_ywa0e")
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
5
entities/checkpoint/checkpoint_mat.tres
Normal file
5
entities/checkpoint/checkpoint_mat.tres
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" format=3 uid="uid://5vg20wpsk85u"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
transparency = 1
|
||||||
|
albedo_color = Color(0.396078, 1, 0.686275, 0.270588)
|
|
@ -2,6 +2,7 @@
|
||||||
extends Path3D
|
extends Path3D
|
||||||
class_name RoadPath
|
class_name RoadPath
|
||||||
@export_tool_button("update_control_points") var action = update_control_points
|
@export_tool_button("update_control_points") var action = update_control_points
|
||||||
|
var tilt_scale : float = 0.0005
|
||||||
|
|
||||||
func modulo_get_point_position(i):
|
func modulo_get_point_position(i):
|
||||||
return curve.get_point_position(posmod(i, curve.point_count))
|
return curve.get_point_position(posmod(i, curve.point_count))
|
||||||
|
@ -10,14 +11,6 @@ func update_control_points():
|
||||||
if curve.point_count < 2:
|
if curve.point_count < 2:
|
||||||
return
|
return
|
||||||
|
|
||||||
#
|
|
||||||
## Start point: out control based on next point
|
|
||||||
#var dir = (curve.get_point_position(1) - curve.get_point_position(0)).normalized()
|
|
||||||
#var tangent_length = dir.length() / 3
|
|
||||||
#
|
|
||||||
#curve.set_point_out(0, dir * tangent_length)
|
|
||||||
|
|
||||||
# Intermediate points: in and out controls based on adjacent points
|
|
||||||
for i in range(0, curve.point_count):
|
for i in range(0, curve.point_count):
|
||||||
var prev = modulo_get_point_position(i) - modulo_get_point_position(i - 1)
|
var prev = modulo_get_point_position(i) - modulo_get_point_position(i - 1)
|
||||||
var next = modulo_get_point_position(i + 1) - modulo_get_point_position(i)
|
var next = modulo_get_point_position(i + 1) - modulo_get_point_position(i)
|
||||||
|
@ -30,3 +23,6 @@ func update_control_points():
|
||||||
tangent = tangent.normalized()
|
tangent = tangent.normalized()
|
||||||
curve.set_point_in(i, -tangent * tangent_length)
|
curve.set_point_in(i, -tangent * tangent_length)
|
||||||
curve.set_point_out(i, tangent * tangent_length)
|
curve.set_point_out(i, tangent * tangent_length)
|
||||||
|
|
||||||
|
var tilt = -prev.cross(next).y * tilt_scale
|
||||||
|
curve.set_point_tilt(i, tilt)
|
||||||
|
|
|
@ -32,10 +32,11 @@ func generate_mesh():
|
||||||
var race_length = curve.get_baked_length()
|
var race_length = curve.get_baked_length()
|
||||||
var nb_of_point : int = race_length / segment_length
|
var nb_of_point : int = race_length / segment_length
|
||||||
|
|
||||||
for i in range(nb_of_point):
|
for i in range(nb_of_point+1):
|
||||||
var dist1 = float(i) * segment_length
|
var dist1 = float(i) * segment_length
|
||||||
var dist2 = float(i + 1) * segment_length
|
var dist2 = float(i + 1) * segment_length
|
||||||
|
|
||||||
|
|
||||||
var t1 := curve.sample_baked_with_rotation(dist1, true)
|
var t1 := curve.sample_baked_with_rotation(dist1, true)
|
||||||
var t2 := curve.sample_baked_with_rotation(dist2, true)
|
var t2 := curve.sample_baked_with_rotation(dist2, true)
|
||||||
|
|
||||||
|
@ -52,8 +53,6 @@ func generate_mesh():
|
||||||
var up2 = t2.basis.y.normalized()
|
var up2 = t2.basis.y.normalized()
|
||||||
|
|
||||||
var p1 := t1.origin
|
var p1 := t1.origin
|
||||||
if i == 0:
|
|
||||||
p1 += fwd1 * 0.05
|
|
||||||
var p2 := t2.origin
|
var p2 := t2.origin
|
||||||
|
|
||||||
# Top vertices
|
# Top vertices
|
||||||
|
@ -69,47 +68,76 @@ func generate_mesh():
|
||||||
var p2_left_bottom = p2_left - up2 * road_thickness
|
var p2_left_bottom = p2_left - up2 * road_thickness
|
||||||
|
|
||||||
# Top face
|
# Top face
|
||||||
create_rectangle(p1_right, p1_left, p2_left, p2_right, up1, up2, Vector2(0, dist1 / road_width), Vector2(1, dist2 / road_width))
|
create_rectangle(
|
||||||
|
p1_right, p1_left, p2_left, p2_right,
|
||||||
|
up1, up2,
|
||||||
|
Vector2(1, dist1 / road_width),
|
||||||
|
Vector2(0, dist1 / road_width),
|
||||||
|
Vector2(0, dist2 / road_width),
|
||||||
|
Vector2(1, dist2 / road_width)
|
||||||
|
)
|
||||||
|
|
||||||
# Bottom face (inverted normal)
|
# Bottom face
|
||||||
create_rectangle(p1_left_bottom, p1_right_bottom, p2_right_bottom, p2_left_bottom, up1, up2, Vector2(1, dist1 / road_width), Vector2(0, dist2 / road_width))
|
create_rectangle(
|
||||||
|
p1_left_bottom, p1_right_bottom, p2_right_bottom, p2_left_bottom,
|
||||||
|
-up1, -up2,
|
||||||
|
Vector2(0, dist1 / road_width),
|
||||||
|
Vector2(1, dist1 / road_width),
|
||||||
|
Vector2(1, dist2 / road_width),
|
||||||
|
Vector2(0, dist2 / road_width)
|
||||||
|
)
|
||||||
|
|
||||||
# Right side face
|
# Right side face
|
||||||
create_rectangle(p1_right_bottom, p1_right, p2_right, p2_right_bottom, right1, right2, Vector2(dist1 / road_thickness, 0), Vector2(dist2 / road_thickness, 1))
|
create_rectangle(
|
||||||
|
p1_right_bottom, p1_right, p2_right, p2_right_bottom,
|
||||||
|
right1, right2,
|
||||||
|
Vector2(dist1 / road_thickness, 0),
|
||||||
|
Vector2(dist1 / road_thickness, 1),
|
||||||
|
Vector2(dist2 / road_thickness, 1),
|
||||||
|
Vector2(dist2 / road_thickness, 0)
|
||||||
|
)
|
||||||
|
|
||||||
# Left side face
|
# Left side face
|
||||||
create_rectangle(p1_left, p1_left_bottom, p2_left_bottom, p2_left, left1, left2, Vector2(dist1 / road_thickness, 0), Vector2(dist2 / road_thickness, 1))
|
create_rectangle(
|
||||||
|
p1_left, p1_left_bottom, p2_left_bottom, p2_left,
|
||||||
|
left1, left2,
|
||||||
|
Vector2(dist1 / road_thickness, 1),
|
||||||
|
Vector2(dist1 / road_thickness, 0),
|
||||||
|
Vector2(dist2 / road_thickness, 0),
|
||||||
|
Vector2(dist2 / road_thickness, 1)
|
||||||
|
)
|
||||||
var final_mesh = st_road.commit()
|
var final_mesh = st_road.commit()
|
||||||
road_mesh_instance.mesh = final_mesh
|
road_mesh_instance.mesh = final_mesh
|
||||||
|
|
||||||
var shape = final_mesh.create_trimesh_shape()
|
var shape = final_mesh.create_trimesh_shape()
|
||||||
road_shape.shape = shape
|
road_shape.shape = shape
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func create_rectangle(
|
func create_rectangle(
|
||||||
v1: Vector3, v2: Vector3, v3: Vector3, v4: Vector3,
|
v1: Vector3, v2: Vector3, v3: Vector3, v4: Vector3,
|
||||||
normal1: Vector3, normal2: Vector3,
|
normal1: Vector3, normal2: Vector3,
|
||||||
uv1: Vector2, uv2: Vector2
|
uv1: Vector2, uv2: Vector2, uv3: Vector2, uv4: Vector2
|
||||||
):
|
):
|
||||||
# Triangle 1
|
# Triangle 1
|
||||||
st_road.set_uv(uv1)
|
st_road.set_uv(uv1)
|
||||||
st_road.set_normal(normal1)
|
st_road.set_normal(normal1)
|
||||||
st_road.add_vertex(v1)
|
st_road.add_vertex(v1)
|
||||||
|
|
||||||
st_road.set_uv(Vector2(uv1.x, uv2.y))
|
st_road.set_uv(uv2)
|
||||||
st_road.set_normal(normal1)
|
st_road.set_normal(normal1)
|
||||||
st_road.add_vertex(v2)
|
st_road.add_vertex(v2)
|
||||||
|
|
||||||
st_road.set_uv(uv2)
|
st_road.set_uv(uv3)
|
||||||
st_road.set_normal(normal2)
|
st_road.set_normal(normal2)
|
||||||
st_road.add_vertex(v3)
|
st_road.add_vertex(v3)
|
||||||
|
|
||||||
# Triangle 2
|
# Triangle 2
|
||||||
st_road.set_uv(uv2)
|
st_road.set_uv(uv3)
|
||||||
st_road.set_normal(normal2)
|
st_road.set_normal(normal2)
|
||||||
st_road.add_vertex(v3)
|
st_road.add_vertex(v3)
|
||||||
|
|
||||||
st_road.set_uv(Vector2(uv2.x, uv1.y))
|
st_road.set_uv(uv4)
|
||||||
st_road.set_normal(normal1)
|
st_road.set_normal(normal1)
|
||||||
st_road.add_vertex(v4)
|
st_road.add_vertex(v4)
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
16
entities/road/road_mat.tres
Normal file
16
entities/road/road_mat.tres
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://qq8yw26i32k4"]
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ma6g7"]
|
||||||
|
noise_type = 2
|
||||||
|
domain_warp_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_l5fpm"]
|
||||||
|
seamless = true
|
||||||
|
as_normal_map = true
|
||||||
|
bump_strength = 2.0
|
||||||
|
noise = SubResource("FastNoiseLite_ma6g7")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_color = Color(0.635294, 0.568627, 1, 1)
|
||||||
|
normal_enabled = true
|
||||||
|
normal_texture = SubResource("NoiseTexture2D_l5fpm")
|
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
[sub_resource type="Curve3D" id="Curve3D_p7e7j"]
|
[sub_resource type="Curve3D" id="Curve3D_p7e7j"]
|
||||||
closed = true
|
closed = true
|
||||||
|
bake_interval = 0.01
|
||||||
_data = {
|
_data = {
|
||||||
"points": PackedVector3Array(0.246495, 0, 4.21189, -0.246495, 0, -4.21189, 0, 0, 0, -4.24042, 0, 0.00829778, 4.24042, 0, -0.00829778, 10, 0, -7.75931, -4.21783, 0, -0.014848, 4.21783, 0, 0.014848, 20, 1.27448, 0, -4.24638, 0, 0.0109491, 4.24638, 0, -0.0109491, 30, 0, -7.64779, -2.44782, 0, -6.85357, 2.44782, 0, 6.85357, 40, 1.9489, 0, 12.6025, 0, -5.29505, -12.6025, 0, 5.29505, 35.1108, 0, 21.1888),
|
"points": PackedVector3Array(0.246496, 0, 4.21189, -0.246496, 0, -4.21189, 0, 0, 0, -4.54407, 0, 0.13149, 4.54407, 0, -0.13149, 10, 0, -7.75931, -4.52489, 0, -0.0171429, 4.52489, 0, 0.0171429, 20, 5.07796, 0, -4.24514, 0, -0.103093, 4.24514, 0, 0.103093, 30, 0, -7.64779, -2.44781, 0, -6.85356, 2.44781, 0, 6.85356, 40, 1.9489, 0, 12.6025, 0, -5.29503, -12.6025, 0, 5.29503, 35.1108, 0, 21.1888),
|
||||||
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0)
|
"tilts": PackedFloat32Array(0.242162, 0.0775931, -0.0770355, 0.0764779, 0.12464, 0.423776)
|
||||||
}
|
}
|
||||||
point_count = 6
|
point_count = 6
|
||||||
|
|
||||||
|
|
3
entities/road/road_phy_mat.tres
Normal file
3
entities/road/road_phy_mat.tres
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[gd_resource type="PhysicsMaterial" format=3 uid="uid://xghhl0tserq3"]
|
||||||
|
|
||||||
|
[resource]
|
10
entities/sky/sky.gdshader
Normal file
10
entities/sky/sky.gdshader
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
shader_type sky;
|
||||||
|
|
||||||
|
uniform vec3 color_env : source_color;
|
||||||
|
uniform sampler2D noise_texture : repeat_enable;
|
||||||
|
uniform float noise_power;
|
||||||
|
uniform float speed;
|
||||||
|
|
||||||
|
void sky() {
|
||||||
|
COLOR = color_env * ((1.0+EYEDIR.y)/2.0) + noise_power*texture(noise_texture, SKY_COORDS + vec2(TIME*speed, 0)).xyz;
|
||||||
|
}
|
1
entities/sky/sky.gdshader.uid
Normal file
1
entities/sky/sky.gdshader.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://tqpr7f3nr72k
|
|
@ -15,6 +15,10 @@ run/main_scene="uid://bd8skoxlvujam"
|
||||||
config/features=PackedStringArray("4.4", "GL Compatibility")
|
config/features=PackedStringArray("4.4", "GL Compatibility")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
CheckPointManager="*res://entities/checkpoint/check_point_manager.gd"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
forward={
|
forward={
|
||||||
|
@ -49,7 +53,10 @@ restart={
|
||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
|
3d/run_on_separate_thread=true
|
||||||
3d/physics_engine="Jolt Physics"
|
3d/physics_engine="Jolt Physics"
|
||||||
|
3d/default_gravity=20.0
|
||||||
|
3d/solver/contact_max_allowed_penetration=0.05
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue