end camera preview
This commit is contained in:
parent
22ff2601e5
commit
8463e7cc23
10 changed files with 139 additions and 26 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
27
entities/preview_ui/preview_ui.tscn
Normal file
27
entities/preview_ui/preview_ui.tscn
Normal 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")
|
29
entities/startCounter/StartCounter.tscn
Normal file
29
entities/startCounter/StartCounter.tscn
Normal 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")
|
24
entities/startCounter/start_counter.gd
Normal file
24
entities/startCounter/start_counter.gd
Normal 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
|
1
entities/startCounter/start_counter.gd.uid
Normal file
1
entities/startCounter/start_counter.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://egjk6w4jomvk
|
|
@ -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
|
||||
|
||||
|
|
|
@ -61,6 +61,11 @@ pause={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
skip_intro={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=26 format=4 uid="uid://c3mood6wrgggw"]
|
||||
[gd_scene load_steps=28 format=4 uid="uid://c3mood6wrgggw"]
|
||||
|
||||
[ext_resource type="PhysicsMaterial" uid="uid://xghhl0tserq3" path="res://entities/road/road_phy_mat.tres" id="1_7gsxw"]
|
||||
[ext_resource type="Script" uid="uid://bgt66573ipmub" path="res://entities/road/road.gd" id="2_quo62"]
|
||||
|
@ -13,9 +13,11 @@
|
|||
[ext_resource type="PackedScene" uid="uid://bbl6ouj0ew23c" path="res://entities/gameUI/gameUI.tscn" id="11_ujhos"]
|
||||
[ext_resource type="PackedScene" uid="uid://dlmjehxav11dx" path="res://entities/pauseMenu/pauseMenu.tscn" id="12_rd3p3"]
|
||||
[ext_resource type="PackedScene" uid="uid://n4qqt180m2fo" path="res://entities/winMenu/winMenu.tscn" id="13_kfo6a"]
|
||||
[ext_resource type="PackedScene" uid="uid://d453m6wc7v0e" path="res://entities/startCounter/StartCounter.tscn" id="14_bbgq5"]
|
||||
[ext_resource type="PackedScene" uid="uid://cu5r7oxtqa2c0" path="res://entities/checkpoint/CheckPointManager.tscn" id="14_p1hka"]
|
||||
[ext_resource type="PackedScene" uid="uid://mkchrw0fla7r" path="res://entities/timeManager/timeManager.tscn" id="15_4u804"]
|
||||
[ext_resource type="PackedScene" uid="uid://6i2l1pc0hcxd" path="res://world_env/directional_light_3d.tscn" id="15_8cdjg"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5qovp8ccycse" path="res://entities/preview_ui/preview_ui.tscn" id="15_u4oya"]
|
||||
|
||||
[sub_resource type="Curve3D" id="Curve3D_4u804"]
|
||||
closed = true
|
||||
|
@ -107,19 +109,19 @@ shape = SubResource("ConcavePolygonShape3D_5ntmo")
|
|||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0846112, 0.37944, -0.427136)
|
||||
physics_material_override = ExtResource("6_yw11j")
|
||||
freeze = true
|
||||
road_path = NodePath("../Road/Track")
|
||||
base_lateral_friction = 100.0
|
||||
lateral_velocity_start_drift_threshold = 100.0
|
||||
lateral_velocity_total_drift_threshold = 200.0
|
||||
|
||||
[node name="CameraFollowPoint" parent="Car" index="6"]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, -3.12697e-08, 0.933843, 0.357684, 8.16391e-08, 0.357684, -0.933843, 0, 1.48636, -2.93594)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="." node_paths=PackedStringArray("camera_preview", "follow_point")]
|
||||
[node name="Camera3D" type="Camera3D" parent="." node_paths=PackedStringArray("cameraPreview", "followPoint", "previewUi")]
|
||||
transform = Transform3D(-0.995019, -1.11202e-08, -0.0996845, -0.0423712, 0.905169, 0.422936, 0.0902313, 0.425053, -0.90066, -24.6506, 25.5741, -51.8213)
|
||||
script = ExtResource("7_icp1j")
|
||||
camera_preview = NodePath("../CameraPreview")
|
||||
follow_point = NodePath("../Car/CameraFollowPoint")
|
||||
cameraPreview = NodePath("../CameraPreview")
|
||||
followPoint = NodePath("../Car/CameraFollowPoint")
|
||||
previewUi = NodePath("../PreviewUi")
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_0wfyh")
|
||||
|
@ -150,13 +152,22 @@ checkPointManager = NodePath("../CheckPointManager")
|
|||
visible = false
|
||||
timeManager = NodePath("../TimeManager")
|
||||
|
||||
[node name="StartCounter" parent="." node_paths=PackedStringArray("car", "timeManager") instance=ExtResource("14_bbgq5")]
|
||||
visible = false
|
||||
car = NodePath("../Car")
|
||||
timeManager = NodePath("../TimeManager")
|
||||
|
||||
[node name="PreviewUi" parent="." instance=ExtResource("15_u4oya")]
|
||||
|
||||
[node name="CheckPointManager" parent="." instance=ExtResource("14_p1hka")]
|
||||
|
||||
[node name="TimeManager" parent="." instance=ExtResource("15_4u804")]
|
||||
process_mode = 4
|
||||
|
||||
[node name="DirectionalLight3D" parent="." instance=ExtResource("15_8cdjg")]
|
||||
transform = Transform3D(0.903903, -0.229357, 0.361046, 0, 0.844085, 0.53621, -0.427737, -0.484682, 0.762971, 13.1045, 0, -3.82377)
|
||||
|
||||
[connection signal="preview_ended" from="Camera3D" to="StartCounter" method="_on_camera_3d_preview_ended"]
|
||||
[connection signal="end_track" from="CheckPointManager" to="WinMenu" method="_on_check_point_manager_end_track"]
|
||||
|
||||
[editable path="Car"]
|
||||
|
|
|
@ -135,16 +135,13 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0846112, 0.37944, -0.427136
|
|||
physics_material_override = ExtResource("6_gnai3")
|
||||
road_path = NodePath("../Road/Track")
|
||||
base_lateral_friction = 100.0
|
||||
lateral_velocity_start_drift_threshold = 100.0
|
||||
lateral_velocity_total_drift_threshold = 200.0
|
||||
|
||||
[node name="CameraFollowPoint" parent="Car" index="6"]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, -3.12697e-08, 0.933843, 0.357684, 8.16391e-08, 0.357684, -0.933843, 0, 1.48636, -2.93594)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="." node_paths=PackedStringArray("follow_point")]
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(-0.995019, -1.11202e-08, -0.0996845, -0.0423712, 0.905169, 0.422936, 0.0902313, 0.425053, -0.90066, 0.0940895, 1.90292, -3.12075)
|
||||
script = ExtResource("7_i8kv5")
|
||||
follow_point = NodePath("../Car/CameraFollowPoint")
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_0wfyh")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue