small racing game im working on
| -rw-r--r-- | classes/track.gd | 2 | ||||
| -rw-r--r-- | race.gd | 2 | ||||
| -rw-r--r-- | race.tscn | 19 | ||||
| -rw-r--r-- | tracks/multilap_test.tres | 1 | ||||
| -rw-r--r-- | ui/assets/flag.png | bin | 0 -> 210 bytes | |||
| -rw-r--r-- | ui/assets/flag.png.import | 34 | ||||
| -rw-r--r-- | ui/assets/line.png | bin | 0 -> 97 bytes | |||
| -rw-r--r-- | ui/assets/line.png.import | 34 | ||||
| -rw-r--r-- | ui/intro_cam.gd | 3 | ||||
| -rw-r--r-- | ui/map.gd | 23 |
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? @@ -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 @@ -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 Binary files differnew file mode 100644 index 0000000..dd3c63d --- /dev/null +++ b/ui/assets/flag.png 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 Binary files differnew file mode 100644 index 0000000..92fc568 --- /dev/null +++ b/ui/assets/line.png 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) @@ -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 |