small racing game im working on
-rw-r--r--classes/track.gd2
-rw-r--r--race.gd2
-rw-r--r--race.tscn19
-rw-r--r--tracks/multilap_test.tres1
-rw-r--r--ui/assets/flag.pngbin0 -> 210 bytes
-rw-r--r--ui/assets/flag.png.import34
-rw-r--r--ui/assets/line.pngbin0 -> 97 bytes
-rw-r--r--ui/assets/line.png.import34
-rw-r--r--ui/intro_cam.gd3
-rw-r--r--ui/map.gd23
10 files changed, 107 insertions, 11 deletions
diff --git a/classes/track.gd b/classes/track.gd
index c07ae6d..349dc78 100644
--- a/classes/track.gd
+++ b/classes/track.gd
@@ -22,6 +22,8 @@ class_name TrackResource
## Sun y rotation ( its a game, the sun rotates around us )
@export_range(-360, 360) var sun_y := 0
@export_group("", "")
+## The height of the overview cam
+@export var overview_height := 300.0
## The name of this track
@export var name: String = ""
## Does the track loop around?
diff --git a/race.gd b/race.gd
index 0404cc9..86dd023 100644
--- a/race.gd
+++ b/race.gd
@@ -5,7 +5,7 @@ extends Node3D
@export var track: TrackLoader
@export var splits: Control
@export var timer: Control
-@onready var data := TrackSaveableData.new(track.checkpoints.size(), track.track.laps)
+@onready var data := TrackSaveableData.new(track.checkpoints.size(), track.track.laps if track.track.laps else 1)
@onready var best_time_data := TrackSaveableData._load(saves % track.track.name)
var car: Car
var ghost: GhostCar
diff --git a/race.tscn b/race.tscn
index 271d867..622e5ba 100644
--- a/race.tscn
+++ b/race.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=23 format=3 uid="uid://dmkcxlevx4c7g"]
+[gd_scene load_steps=26 format=3 uid="uid://cech6c4yrmcvq"]
[ext_resource type="Script" path="res://race.gd" id="1_ckbwd"]
[ext_resource type="Environment" uid="uid://biwshm46yl62v" path="res://default_env.tres" id="2_pnp7e"]
@@ -15,8 +15,10 @@
[ext_resource type="Script" path="res://ui/map.gd" id="10_58kgt"]
[ext_resource type="PackedScene" uid="uid://clw61td2wh84w" path="res://scenes/track.tscn" id="11_6q53c"]
[ext_resource type="PackedScene" uid="uid://nkh2xi7tnumc" path="res://ui/splits/splits.tscn" id="14_ge1w6"]
+[ext_resource type="Texture2D" uid="uid://bfe4ytl0vjosb" path="res://ui/assets/line.png" id="14_n0r0n"]
[ext_resource type="Script" path="res://ui/intro_cam.gd" id="14_yajvg"]
[ext_resource type="Script" path="res://ui/laps.gd" id="16_mxur4"]
+[ext_resource type="Texture2D" uid="uid://b3nmp7eyu0hjk" path="res://ui/assets/flag.png" id="16_rp311"]
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_tkhh8"]
@@ -24,6 +26,10 @@
material = ExtResource("4_i1mlf")
size = Vector2(5000, 5000)
+[sub_resource type="Gradient" id="Gradient_2kvil"]
+offsets = PackedFloat32Array(0, 0.178744, 0.454106, 0.719807, 1)
+colors = PackedColorArray(0.85098, 0.85098, 0.85098, 1, 0.942823, 0.942823, 0.942822, 1, 0.868985, 0.868985, 0.868985, 1, 0.838897, 0.838897, 0.838897, 1, 0.85098, 0.85098, 0.85098, 1)
+
[sub_resource type="Animation" id="Animation_2si4r"]
length = 0.001
tracks/0/type = "value"
@@ -189,13 +195,17 @@ vertical_alignment = 1
script = ExtResource("9_dn61b")
[node name="MiniMap" type="Line2D" parent="CanvasLayer" node_paths=PackedStringArray("track")]
-position = Vector2(300, 145)
-default_color = Color(0.588235, 0.588235, 0.588235, 0.537255)
-joint_mode = 2
+texture_repeat = 2
+points = PackedVector2Array(96, 29, -44, 43, 27, -54, 183, 9)
+default_color = Color(0.854902, 0.854902, 0.854902, 1)
+gradient = SubResource("Gradient_2kvil")
+texture = ExtResource("14_n0r0n")
+texture_mode = 1
antialiased = true
script = ExtResource("10_58kgt")
track = NodePath("../../Track")
player_color = Color(1, 0.388235, 0.321569, 0.803922)
+finish_indicator = ExtResource("16_rp311")
[node name="Splits" parent="CanvasLayer" instance=ExtResource("14_ge1w6")]
visible = false
@@ -261,6 +271,5 @@ libraries = {
[connection signal="created_car" from="." to="CanvasLayer/HBoxContainer/Panel/Speedometer" method="_on_race_created_car"]
[connection signal="created_car" from="." to="CanvasLayer/MiniMap" method="_on_race_created_car"]
[connection signal="created_car" from="." to="IntroCamera" method="_on_race_created_car"]
-[connection signal="finished" from="." to="CanvasLayer/Laps" method="increment"]
[connection signal="next_lap" from="." to="CanvasLayer/Laps" method="increment"]
[connection signal="race_started" from="IntroCamera" to="." method="_on_intro_camera_race_started"]
diff --git a/tracks/multilap_test.tres b/tracks/multilap_test.tres
index b8894b9..05ef141 100644
--- a/tracks/multilap_test.tres
+++ b/tracks/multilap_test.tres
@@ -18,6 +18,7 @@ left_barrier = true
right_barrier = true
sun_x = -50
sun_y = 0
+overview_height = 250.0
name = "multilap test"
is_loop = true
offset = Vector3(0, 1, 0)
diff --git a/ui/assets/flag.png b/ui/assets/flag.png
new file mode 100644
index 0000000..dd3c63d
--- /dev/null
+++ b/ui/assets/flag.png
Binary files differ
diff --git a/ui/assets/flag.png.import b/ui/assets/flag.png.import
new file mode 100644
index 0000000..83baf36
--- /dev/null
+++ b/ui/assets/flag.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3nmp7eyu0hjk"
+path="res://.godot/imported/flag.png-ae4aee06cb6133fea5cfeec11a85a7a4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/assets/flag.png"
+dest_files=["res://.godot/imported/flag.png-ae4aee06cb6133fea5cfeec11a85a7a4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/ui/assets/line.png b/ui/assets/line.png
new file mode 100644
index 0000000..92fc568
--- /dev/null
+++ b/ui/assets/line.png
Binary files differ
diff --git a/ui/assets/line.png.import b/ui/assets/line.png.import
new file mode 100644
index 0000000..6e63f13
--- /dev/null
+++ b/ui/assets/line.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bfe4ytl0vjosb"
+path="res://.godot/imported/line.png-b33e28e32d8a52ddf96a3673a00aafcd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/assets/line.png"
+dest_files=["res://.godot/imported/line.png-b33e28e32d8a52ddf96a3673a00aafcd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/ui/intro_cam.gd b/ui/intro_cam.gd
index 26088d6..9838855 100644
--- a/ui/intro_cam.gd
+++ b/ui/intro_cam.gd
@@ -12,9 +12,8 @@ func _ready() -> void:
var box := AABB()
for point in track.track.track.get_baked_points():
box = box.expand(point)
- box = box.grow(200)
var box_center := box.get_center()
- var top_center := Vector3(box_center.x, -box.position.y, box_center.z)
+ var top_center := Vector3(box_center.x, track.track.overview_height, box_center.z)
global_position = top_center
await get_tree().create_timer(2).timeout
var tween := get_tree().create_tween().set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
diff --git a/ui/map.gd b/ui/map.gd
index 9ff8a79..d1af9ce 100644
--- a/ui/map.gd
+++ b/ui/map.gd
@@ -4,6 +4,7 @@ class_name MiniMap
var car: Node3D
@export var track: TrackLoader
@export var player_color: Color
+@export var finish_indicator: Texture
func _ready() -> void:
set_process(false)
@@ -12,20 +13,36 @@ func _ready() -> void:
if !track.track.is_loop:
end_cap_mode = LINE_CAP_ROUND
begin_cap_mode = LINE_CAP_ROUND
+
+ var box := Rect2()
for point_3d in track.curve.get_baked_points():
var p := flatten(point_3d)
+ box = box.expand(p)
add_point(p)
+ global_position = -box.position + Vector2(50, 50)
+
func _process(_delta: float) -> void:
queue_redraw()
func _draw() -> void:
if !car: return
+
+ draw_player()
+ draw_finish()
+
+func draw_player() -> void:
var point := flatten(track.curve.get_closest_point(car.global_position))
- draw_circle(point, width / 2, player_color)
+ draw_circle(point, (width - 2) / 2, player_color)
+
+func draw_finish() -> void:
+ draw_texture(finish_indicator, flatten(track.curve.get_closest_point(track.finish.global_position)) + Vector2.UP * 14)
+
+func vec(xy: float) -> Vector2:
+ return Vector2(xy, xy)
-func flatten(vec: Vector3) -> Vector2:
- return Vector2(vec.x, vec.z)
+func flatten(v: Vector3) -> Vector2:
+ return Vector2(v.x, v.z)
func _on_race_created_car(_car) -> void:
car = _car.ball