camera preview + start templating

This commit is contained in:
Crizomb 2025-08-05 08:53:05 +02:00
parent 8486b56d12
commit 0969ef4ec4
12 changed files with 215 additions and 24 deletions

View file

@ -1,11 +1,28 @@
extends Camera3D
@export var camera_preview : SplinePath
@export var follow_point : Node3D
@export var follow_speed := 10.0
@export var rotation_speed := 8.0
@export var path_preview_time := 5.0
@export var lerp_speed_preview_coeff := 0.1
var t := 0.0
@onready var curve_length := camera_preview.curve.get_baked_length()
func follow_trans(delta : float, trans : Transform3D, speed_coeff := 1.0) -> void:
var target_basis = trans.basis
var current_basis = global_transform.basis
global_transform.origin = global_transform.origin.lerp(trans.origin, follow_speed * delta * speed_coeff)
global_transform.basis = current_basis.slerp(target_basis, rotation_speed * delta * speed_coeff)
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)
t += delta
if t <= path_preview_time:
var offset = lerpf(0, curve_length, 1-t/path_preview_time)
var trans = camera_preview.curve.sample_baked_with_rotation(offset, true, true)
var global_trans = (camera_preview.transform*trans).orthonormalized().rotated_local(Vector3.UP, PI)
follow_trans(delta, global_trans, lerp_speed_preview_coeff)
else:
follow_trans(delta, follow_point.global_transform)

View file

@ -1,7 +1,7 @@
extends RigidBody3D
class_name Car
@export var road_path : RoadPath
@export var road_path : SplinePath
@export var forward_force: float = 100.0
@export var backward_force: float = 50.0

View file

@ -1,9 +1,9 @@
extends Node
class_name CheckPointManager
@export var nb_checkpoints := 3
@export var max_lap := 3
signal new_lap(value)
signal end_track
var current_checkpoint := 0
@ -16,7 +16,6 @@ func checkPointEnter(check_point_id):
if check_point_id == 0:
current_lap += 1
current_checkpoint += 1
new_lap.emit(current_lap)
else:
current_checkpoint += 1
current_checkpoint %= nb_checkpoints

View file

@ -1,20 +1,12 @@
extends Control
class_name GameUI
var time : float
var lap : int
@export var timeManager : TimeManager
@export var checkPointManager : CheckPointManager
@onready var lap_label: Label = $VBoxContainer/LapLabel
@onready var time_label: Label = $VBoxContainer/TimeLabel
func _ready():
time = 0
lap = 0.0
func _process(delta: float) -> void:
time += delta
lap_label.text = "Lap " + str(lap) + "/3"
time_label.text = str(round(time*100)/100)
func _on_check_point_manager_new_lap(value: Variant) -> void:
lap = value
lap_label.text = "Lap " + str(checkPointManager.current_lap) + "/" + str(checkPointManager.max_lap)
time_label.text = str(round(timeManager.time*100)/100)

View file

@ -1,6 +1,6 @@
@tool
extends Path3D
class_name RoadPath
class_name SplinePath
@export_tool_button("update_control_points") var action = update_control_points
@export var tilt_scale : float = 0.0005

View file

@ -5,7 +5,7 @@ class_name Road
@export_tool_button("create_mesh") var action_generate = generate_mesh
@export_tool_button("clear_all") var action_clear = clear_all
@export var track : RoadPath
@export var track : SplinePath
@export var road_mesh_instance : MeshInstance3D
@export var road_shape : CollisionShape3D
@export var road_material : BaseMaterial3D

View file

@ -0,0 +1,11 @@
extends Node
class_name TimeManager
var time := 0.0
var started := true
func _process(delta: float) -> void:
if !started: return
time += delta

View file

@ -0,0 +1 @@
uid://dgnhvkjpmcohs

View file

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://mkchrw0fla7r"]
[ext_resource type="Script" uid="uid://dgnhvkjpmcohs" path="res://entities/timeManager/timeManager.gd" id="1_5yljf"]
[node name="TimeManager" type="Node"]
script = ExtResource("1_5yljf")

View file

@ -1,10 +1,11 @@
extends Control
@onready var game_ui: GameUI = $"../GameUi"
@export var timeManager : TimeManager
@onready var time_label: Label = $VBoxContainer/Time
func _on_check_point_manager_end_track() -> void:
time_label.text = str(round(game_ui.time*100)/100)+"s"
time_label.text = str(round(timeManager.time*100)/100)+"s"
show()
get_tree().paused = true