end camera preview

This commit is contained in:
Crizomb 2025-08-06 07:23:29 +02:00
parent 22ff2601e5
commit 8463e7cc23
10 changed files with 139 additions and 26 deletions

View file

@ -1,14 +1,22 @@
extends Camera3D
@export var camera_preview : SplinePath
@export var follow_point : Node3D
@export var cameraPreview : SplinePath
@export var followPoint : Node3D
@export var previewUi : Control
@export var follow_speed := 10.0
@export var rotation_speed := 8.0
@export var path_preview_time := 5.0
@export var total_preview_time := 5.0
@export var go_to_first_point_time := 2.0
@export var lerp_speed_preview_coeff := 0.1
@export var lerp_speed_go_to_first_point_coeff := 0.1
var t := 0.0
@onready var curve_length := camera_preview.curve.get_baked_length()
var is_in_preview := true
@onready var curve_length := cameraPreview.curve.get_baked_length()
@onready var path_preview_time := total_preview_time - go_to_first_point_time
signal preview_ended
func follow_trans(delta : float, trans : Transform3D, speed_coeff := 1.0) -> void:
var target_basis = trans.basis
@ -16,13 +24,29 @@ func follow_trans(delta : float, trans : Transform3D, speed_coeff := 1.0) -> voi
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 go_to_first_point(delta):
var trans = cameraPreview.curve.sample_baked_with_rotation(0, true, true)
var global_trans = (cameraPreview.transform*trans).orthonormalized().rotated_local(Vector3.UP, PI)
follow_trans(delta, global_trans, lerp_speed_go_to_first_point_coeff)
func follow_preview_path(delta):
var pt = t - go_to_first_point_time
var offset = lerpf(0, curve_length, 1-pt/path_preview_time)
var trans = cameraPreview.curve.sample_baked_with_rotation(offset, true, true)
var global_trans = (cameraPreview.transform*trans).orthonormalized().rotated_local(Vector3.UP, PI)
follow_trans(delta, global_trans, lerp_speed_preview_coeff)
func _physics_process(delta: float) -> void:
if is_in_preview && Input.is_action_pressed("skip_intro"):
t = total_preview_time
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)
if t < go_to_first_point_time:
go_to_first_point(delta)
elif t < total_preview_time:
follow_preview_path(delta)
else:
follow_trans(delta, follow_point.global_transform)
follow_trans(delta, followPoint.global_transform)
if is_in_preview:
is_in_preview = false
previewUi.queue_free()
preview_ended.emit()

View file

@ -8,8 +8,6 @@ class_name Car
@export var steer_speed: float = 2.0
@export var base_lateral_friction: float = 5.0
@export var lateral_velocity_start_drift_threshold: float = 10.0
@export var lateral_velocity_total_drift_threshold: float = 15.0
@onready var forward_left: RayCast3D = $ForwardLeft
@onready var forward_right: RayCast3D = $ForwardRight

View file

@ -0,0 +1,27 @@
[gd_scene load_steps=2 format=3 uid="uid://b5qovp8ccycse"]
[ext_resource type="LabelSettings" uid="uid://dyfwkfdm7affw" path="res://fonts/ui_label_set.tres" id="1_3se3j"]
[node name="PreviewUi" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -113.0
offset_top = -42.0
offset_right = 114.0
offset_bottom = -19.0
grow_horizontal = 2
grow_vertical = 0
text = "Press \"Space\" to skip preview"
label_settings = ExtResource("1_3se3j")

View file

@ -0,0 +1,29 @@
[gd_scene load_steps=3 format=3 uid="uid://d453m6wc7v0e"]
[ext_resource type="Script" uid="uid://egjk6w4jomvk" path="res://entities/startCounter/start_counter.gd" id="1_gfj77"]
[ext_resource type="LabelSettings" uid="uid://cru5yoau1mluh" path="res://fonts/BigTextLabelSettings.tres" id="2_xvo28"]
[node name="StartCounter" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_gfj77")
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -11.5
offset_right = 20.0
offset_bottom = 11.5
grow_horizontal = 2
grow_vertical = 2
text = "3"
label_settings = ExtResource("2_xvo28")

View file

@ -0,0 +1,24 @@
extends Control
class_name StartCounter
@onready var label: Label = $Label
@export var car: Car
@export var timeManager : TimeManager
var count_down_started := false
var count_down := 3.0
func _physics_process(delta: float) -> void:
if !count_down_started: return
if count_down < 0:
car.freeze = false # Activating car
timeManager.process_mode = Node.PROCESS_MODE_INHERIT
queue_free() # Delete counter
count_down -= delta
label.text = str(int(count_down))
func _on_camera_3d_preview_ended() -> void:
show()
count_down_started = true

View file

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

View file

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