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
|
||||
|
||||
@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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
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
|
||||
@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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue