camera preview + start templating
This commit is contained in:
parent
8486b56d12
commit
0969ef4ec4
12 changed files with 215 additions and 24 deletions
|
@ -1,11 +1,28 @@
|
||||||
extends Camera3D
|
extends Camera3D
|
||||||
|
|
||||||
|
@export var camera_preview : SplinePath
|
||||||
@export var follow_point : Node3D
|
@export var follow_point : Node3D
|
||||||
@export var follow_speed := 10.0
|
@export var follow_speed := 10.0
|
||||||
@export var rotation_speed := 8.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:
|
func _physics_process(delta: float) -> void:
|
||||||
var target_basis = follow_point.global_transform.basis
|
t += delta
|
||||||
var current_basis = global_transform.basis
|
if t <= path_preview_time:
|
||||||
global_transform.origin = global_transform.origin.lerp(follow_point.global_position, follow_speed * delta)
|
var offset = lerpf(0, curve_length, 1-t/path_preview_time)
|
||||||
global_transform.basis = current_basis.slerp(target_basis, rotation_speed * delta)
|
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)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends RigidBody3D
|
extends RigidBody3D
|
||||||
class_name Car
|
class_name Car
|
||||||
|
|
||||||
@export var road_path : RoadPath
|
@export var road_path : SplinePath
|
||||||
|
|
||||||
@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
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
class_name CheckPointManager
|
||||||
|
|
||||||
@export var nb_checkpoints := 3
|
@export var nb_checkpoints := 3
|
||||||
@export var max_lap := 3
|
@export var max_lap := 3
|
||||||
|
|
||||||
signal new_lap(value)
|
|
||||||
signal end_track
|
signal end_track
|
||||||
|
|
||||||
var current_checkpoint := 0
|
var current_checkpoint := 0
|
||||||
|
@ -16,7 +16,6 @@ func checkPointEnter(check_point_id):
|
||||||
if check_point_id == 0:
|
if check_point_id == 0:
|
||||||
current_lap += 1
|
current_lap += 1
|
||||||
current_checkpoint += 1
|
current_checkpoint += 1
|
||||||
new_lap.emit(current_lap)
|
|
||||||
else:
|
else:
|
||||||
current_checkpoint += 1
|
current_checkpoint += 1
|
||||||
current_checkpoint %= nb_checkpoints
|
current_checkpoint %= nb_checkpoints
|
||||||
|
|
|
@ -1,20 +1,12 @@
|
||||||
extends Control
|
extends Control
|
||||||
class_name GameUI
|
class_name GameUI
|
||||||
|
|
||||||
var time : float
|
@export var timeManager : TimeManager
|
||||||
var lap : int
|
@export var checkPointManager : CheckPointManager
|
||||||
|
|
||||||
@onready var lap_label: Label = $VBoxContainer/LapLabel
|
@onready var lap_label: Label = $VBoxContainer/LapLabel
|
||||||
@onready var time_label: Label = $VBoxContainer/TimeLabel
|
@onready var time_label: Label = $VBoxContainer/TimeLabel
|
||||||
|
|
||||||
func _ready():
|
|
||||||
time = 0
|
|
||||||
lap = 0.0
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
time += delta
|
lap_label.text = "Lap " + str(checkPointManager.current_lap) + "/" + str(checkPointManager.max_lap)
|
||||||
lap_label.text = "Lap " + str(lap) + "/3"
|
time_label.text = str(round(timeManager.time*100)/100)
|
||||||
time_label.text = str(round(time*100)/100)
|
|
||||||
|
|
||||||
func _on_check_point_manager_new_lap(value: Variant) -> void:
|
|
||||||
lap = value
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
@tool
|
@tool
|
||||||
extends Path3D
|
extends Path3D
|
||||||
class_name RoadPath
|
class_name SplinePath
|
||||||
@export_tool_button("update_control_points") var action = update_control_points
|
@export_tool_button("update_control_points") var action = update_control_points
|
||||||
@export var tilt_scale : float = 0.0005
|
@export var tilt_scale : float = 0.0005
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ class_name Road
|
||||||
@export_tool_button("create_mesh") var action_generate = generate_mesh
|
@export_tool_button("create_mesh") var action_generate = generate_mesh
|
||||||
@export_tool_button("clear_all") var action_clear = clear_all
|
@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_mesh_instance : MeshInstance3D
|
||||||
@export var road_shape : CollisionShape3D
|
@export var road_shape : CollisionShape3D
|
||||||
@export var road_material : BaseMaterial3D
|
@export var road_material : BaseMaterial3D
|
||||||
|
|
11
entities/timeManager/timeManager.gd
Normal file
11
entities/timeManager/timeManager.gd
Normal 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
|
||||||
|
|
1
entities/timeManager/timeManager.gd.uid
Normal file
1
entities/timeManager/timeManager.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://dgnhvkjpmcohs
|
6
entities/timeManager/timeManager.tscn
Normal file
6
entities/timeManager/timeManager.tscn
Normal 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")
|
|
@ -1,10 +1,11 @@
|
||||||
extends Control
|
extends Control
|
||||||
@onready var game_ui: GameUI = $"../GameUi"
|
|
||||||
|
@export var timeManager : TimeManager
|
||||||
@onready var time_label: Label = $VBoxContainer/Time
|
@onready var time_label: Label = $VBoxContainer/Time
|
||||||
|
|
||||||
|
|
||||||
func _on_check_point_manager_end_track() -> void:
|
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()
|
show()
|
||||||
get_tree().paused = true
|
get_tree().paused = true
|
||||||
|
|
||||||
|
|
165
scenes/levels/level0_template.tscn
Normal file
165
scenes/levels/level0_template.tscn
Normal file
File diff suppressed because one or more lines are too long
|
@ -198,7 +198,6 @@ mesh = SubResource("ArrayMesh_7xqvt")
|
||||||
skeleton = NodePath("")
|
skeleton = NodePath("")
|
||||||
|
|
||||||
[connection signal="end_track" from="CheckPointManager" to="WinMenu" method="_on_check_point_manager_end_track"]
|
[connection signal="end_track" from="CheckPointManager" to="WinMenu" method="_on_check_point_manager_end_track"]
|
||||||
[connection signal="new_lap" from="CheckPointManager" to="GameUi" method="_on_check_point_manager_new_lap"]
|
|
||||||
|
|
||||||
[editable path="Car"]
|
[editable path="Car"]
|
||||||
[editable path="Node3D/Checkpoint"]
|
[editable path="Node3D/Checkpoint"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue