small racing game im working on
-rw-r--r--classes/ghost_data.gd5
-rw-r--r--classes/timer.gd6
-rw-r--r--race.gd31
-rw-r--r--scenes/race_high.tscn4
-rw-r--r--scenes/race_highlevel.gd18
-rw-r--r--start.tscn2
-rw-r--r--ui/assets/button_focus.styleboxbin0 -> 452 bytes
-rw-r--r--ui/assets/wide_button_focus.styleboxbin0 -> 465 bytes
-rw-r--r--ui/diff.gd14
-rw-r--r--ui/finish.gd30
-rw-r--r--ui/finish.tscn147
-rw-r--r--ui/hud.tscn2
-rw-r--r--ui/laps.gd3
-rw-r--r--ui/splits/difference.gd25
-rw-r--r--ui/splits/gains.tres2
-rw-r--r--ui/splits/splits.gd4
-rw-r--r--ui/splits/splits.tscn25
-rw-r--r--ui/theme.tres9
-rw-r--r--ui/ubuntu.tres1
19 files changed, 278 insertions, 50 deletions
diff --git a/classes/ghost_data.gd b/classes/ghost_data.gd
index 59d1e9d..1a5e9cc 100644
--- a/classes/ghost_data.gd
+++ b/classes/ghost_data.gd
@@ -19,7 +19,7 @@ func load_snap(i: int) -> Array:
return [positions[i], rotations[i], steering[i]]
func save(path: String) -> void:
- _save_file(path, {checkpoints = checkpoints, positions = positions, rotations = rotations, steering = steering, time = time, snaps = snaps})
+ GhostData._save_file(path, {checkpoints = checkpoints, positions = positions, rotations = rotations, steering = steering, time = time, snaps = snaps})
func _init(num_checkpoints := 0, laps := 0) -> void:
for i in laps:
@@ -38,6 +38,7 @@ func clear() -> void:
snaps = 0
func collect(lap: int, cp: int, now: float) -> void:
+ now = snappedf(now, .001) # 3dec precision
if lap == len(checkpoints) - 1 && cp == -1:
checkpoints[lap][cp] = now
time = now
@@ -48,7 +49,7 @@ func has_collected(lap: int, cp: int) -> bool:
return checkpoints[lap][cp] != -1
func get_time(lap: int, cp: int) -> float:
- return checkpoints[lap][cp]
+ return snappedf(checkpoints[lap][cp], .001) # ive noticed compression can add .00000157 so we snap it back down
static func from_d(d: Dictionary) -> GhostData:
var obj := GhostData.new()
diff --git a/classes/timer.gd b/classes/timer.gd
index a193c7f..25231c9 100644
--- a/classes/timer.gd
+++ b/classes/timer.gd
@@ -19,10 +19,14 @@ func reset() -> void:
func now() -> float:
return elapsed_time
-## format a number of seconds into m:s.ms
+## format a number of seconds into m:ss.ms with padding
static func format(time: float) -> String:
return "%01d:%02d.%02d" % [time / 60, fmod(time, 60), fmod(time * 1000, 100)]
+## format a number of seconds into mm:ss.msc without padding ( i really need to test these )
+static func format_precise(time: float) -> String:
+ return "%02d:%02d:%03d" % [time / 60, fmod(time, 60), fmod(time * 1000, 1000)]
+
func fmt_now() -> String:
return GameTimer.format(elapsed_time)
diff --git a/race.gd b/race.gd
index 69aeba5..a12a83e 100644
--- a/race.gd
+++ b/race.gd
@@ -23,9 +23,9 @@ const saves := "user://%s.ghost"
signal next_lap
signal created_car(car: Car)
signal created_ghost(ghost: GhostCar)
-signal finished
+signal finished(time: float, prev_time: float)
signal split(time: float, prev_time: float)
-signal reset
+signal did_reset
func _init(t: TrackResource, _car_scene, _ghost_scene, _track_loader_scene) -> void:
car_scene = _car_scene
@@ -80,15 +80,18 @@ func _ready() -> void:
func _input(event: InputEvent) -> void:
if event.is_action("reset") and playing:
- playing = false
- if best_time_data:
- if ghost:
- reset_ghost()
- await reset_car()
- set_physics_process(false)
- data.clear()
- timer.reset()
- reset.emit()
+ reset()
+
+func reset() -> void:
+ playing = false
+ if best_time_data:
+ if ghost:
+ reset_ghost()
+ await reset_car()
+ set_physics_process(false)
+ data.clear()
+ timer.reset()
+ did_reset.emit()
func connect_checkpoints() -> void:
for i in len(track.checkpoints):
@@ -104,13 +107,17 @@ func passed_finish() -> void:
return
collect(-1)
if track_res.laps - 1 == current_lap:
- finished.emit()
playing = false
print("finished")
timer.stop()
if not best_time_data or data.time < best_time_data.time:
print("new pb!")
+ finished.emit(data.time, -1)
data.save(saves % track_res.name)
+ best_time_data = data
+ else:
+ finished.emit(data.time, best_time_data.time)
+ data = GhostData.new(track_res.checkpoints.size(), track_res.laps)
else:
current_lap += 1
next_lap.emit()
diff --git a/scenes/race_high.tscn b/scenes/race_high.tscn
index 798b6b0..4bd48fb 100644
--- a/scenes/race_high.tscn
+++ b/scenes/race_high.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=7 format=3 uid="uid://dhiei0g5tr74s"]
+[gd_scene load_steps=8 format=3 uid="uid://dhiei0g5tr74s"]
[ext_resource type="Script" path="res://scenes/race_highlevel.gd" id="1_q8hua"]
[ext_resource type="PackedScene" uid="uid://vok7fdcyec68" path="res://ui/hud.tscn" id="3_xp6f0"]
[ext_resource type="PackedScene" uid="uid://c157wew5y33bo" path="res://assets/cars/kenney_sedan/sedan.tscn" id="4_0jpx1"]
+[ext_resource type="PackedScene" uid="uid://cr1mgp6bgxh64" path="res://ui/finish.tscn" id="4_c1jl5"]
[ext_resource type="PackedScene" uid="uid://clpo7rt0vkudy" path="res://ui/countdown.tscn" id="4_llox4"]
[ext_resource type="PackedScene" uid="uid://bbj2agqv581cd" path="res://assets/cars/kenney_sedan/sedan.blend" id="4_waubg"]
[ext_resource type="PackedScene" uid="uid://clw61td2wh84w" path="res://scenes/track.tscn" id="5_8mqbt"]
@@ -11,6 +12,7 @@
script = ExtResource("1_q8hua")
hud_scene = ExtResource("3_xp6f0")
countdown_scene = ExtResource("4_llox4")
+finish_scene = ExtResource("4_c1jl5")
car_scene = ExtResource("4_0jpx1")
ghost_scene = ExtResource("4_waubg")
track_loader_scene = ExtResource("5_8mqbt")
diff --git a/scenes/race_highlevel.gd b/scenes/race_highlevel.gd
index ba14ac3..aefead5 100644
--- a/scenes/race_highlevel.gd
+++ b/scenes/race_highlevel.gd
@@ -2,8 +2,10 @@ extends Splitscreen
@export var hud_scene: PackedScene
@export var countdown_scene: PackedScene
+@export var finish_scene: PackedScene
## For lowlevel race
+@export_group("racing stuff")
@export var car_scene: PackedScene
@export var ghost_scene: PackedScene
@export var track_loader_scene: PackedScene
@@ -13,13 +15,14 @@ var huds: Array[HUD]
func _ready() -> void:
race = Race.new(Globals.playing, car_scene, ghost_scene, track_loader_scene)
- race.reset.connect(count_in)
+ race.did_reset.connect(count_in)
add_child(race)
add_player()
super()
# cant call it join because of overriding and stuff
func add_player() -> void:
+ await get_tree().physics_frame
var c_cam := CarCamera.new(race.car)
var i_cam := IntroCam.new(Globals.playing, c_cam)
var v := join()
@@ -32,7 +35,18 @@ func add_player() -> void:
race.next_lap.connect(hud.laps.increment)
huds.append(hud)
i_cam.finished.connect(count_in)
- race.reset.connect(c_cam.reset)
+ race.did_reset.connect(c_cam.reset)
+ race.did_reset.connect(hud.laps.reset)
+ race.finished.connect(func(t: float, p_t: float):
+# get_tree().paussed = true
+ var finish: FinishUI = finish_scene.instantiate()
+ hud.add_child(finish)
+ finish.set_time(t, p_t)
+ finish.retry.connect(func():
+ race.reset()
+ finish.queue_free()
+ )
+ )
func count_in():
var countdown := countdown_scene.instantiate()
diff --git a/start.tscn b/start.tscn
index acc3cf9..4452fb0 100644
--- a/start.tscn
+++ b/start.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=7 format=3 uid="uid://bvfqaoqjsxj73"]
-[ext_resource type="Theme" uid="uid://ch2uo5qd8ubx6" path="res://ui/theme.tres" id="1_gm0ws"]
+[ext_resource type="Theme" uid="uid://ecnruuyrc8m" path="res://ui/theme.tres" id="1_gm0ws"]
[ext_resource type="Script" path="res://ui/tracks.gd" id="2_po2ce"]
[ext_resource type="Resource" uid="uid://crye0ijvmtsyb" path="res://tracks/multilap_test.tres" id="3_0yjp1"]
[ext_resource type="Resource" uid="uid://de46bcu1ivmtq" path="res://tracks/test.tres" id="4_3xqvr"]
diff --git a/ui/assets/button_focus.stylebox b/ui/assets/button_focus.stylebox
new file mode 100644
index 0000000..eb4aa4f
--- /dev/null
+++ b/ui/assets/button_focus.stylebox
Binary files differ
diff --git a/ui/assets/wide_button_focus.stylebox b/ui/assets/wide_button_focus.stylebox
new file mode 100644
index 0000000..e7200a4
--- /dev/null
+++ b/ui/assets/wide_button_focus.stylebox
Binary files differ
diff --git a/ui/diff.gd b/ui/diff.gd
new file mode 100644
index 0000000..e394ccc
--- /dev/null
+++ b/ui/diff.gd
@@ -0,0 +1,14 @@
+extends SplitsDifference
+
+@export var gain_color: Color
+@export var loss_color: Color
+
+func style(d: Change) -> void:
+ match d:
+ Change.LOSS: label_settings.font_color = loss_color
+ Change.GAIN: label_settings.font_color = gain_color
+ Change.EQUAL:
+ hide()
+
+func format(t: float) -> String:
+ return GameTimer.format_precise(t)
diff --git a/ui/finish.gd b/ui/finish.gd
new file mode 100644
index 0000000..b34ea64
--- /dev/null
+++ b/ui/finish.gd
@@ -0,0 +1,30 @@
+extends ColorRect
+class_name FinishUI
+
+@export var diff: SplitsDifference
+@export var time_: Label
+@export var flag: Label
+@export var focus: Control
+
+signal retry
+signal next
+signal quit
+signal difference(diff: SplitsDifference.Change)
+
+func set_time(time: float, prev_time: float):
+ time_.text = GameTimer.format_precise(time)
+ if prev_time < 0 or SplitsDifference.diff(time, prev_time) == SplitsDifference.Change.EQUAL:
+ diff.hide()
+ flag.text = "󰈻"
+ flag.vertical_alignment = VERTICAL_ALIGNMENT_TOP
+ else:
+ flag.vertical_alignment = VERTICAL_ALIGNMENT_BOTTOM
+ var d := SplitsDifference.diff(time, prev_time);
+ match d:
+ SplitsDifference.Change.LOSS: flag.text = "󰮙"
+ SplitsDifference.Change.GAIN: flag.text = "󰮚"
+ diff.update(time, prev_time)
+ difference.emit(d)
+
+func _ready() -> void:
+ focus.grab_focus()
diff --git a/ui/finish.tscn b/ui/finish.tscn
new file mode 100644
index 0000000..0af021a
--- /dev/null
+++ b/ui/finish.tscn
@@ -0,0 +1,147 @@
+[gd_scene load_steps=12 format=3 uid="uid://cr1mgp6bgxh64"]
+
+[ext_resource type="Theme" uid="uid://ecnruuyrc8m" path="res://ui/theme.tres" id="1_aykd4"]
+[ext_resource type="Script" path="res://ui/finish.gd" id="1_crs2w"]
+[ext_resource type="Script" path="res://ui/diff.gd" id="2_gtres"]
+[ext_resource type="StyleBox" uid="uid://bxi4jeh5lf468" path="res://ui/assets/wide_button_focus.stylebox" id="4_dck0l"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bgqa0"]
+bg_color = Color(0.027451, 0.211765, 0.258824, 1)
+border_width_left = 10
+border_width_top = 10
+border_width_right = 10
+border_width_bottom = 10
+border_color = Color(0.513726, 0.580392, 0.588235, 1)
+corner_radius_top_left = 150
+corner_radius_top_right = 150
+corner_radius_bottom_right = 150
+corner_radius_bottom_left = 150
+corner_detail = 18
+anti_aliasing_size = 1.0
+
+[sub_resource type="LabelSettings" id="LabelSettings_f3a8x"]
+line_spacing = 0.0
+font_size = 200
+font_color = Color(0.933333, 0.909804, 0.835294, 1)
+outline_size = 25
+outline_color = Color(0.25098, 0.25098, 0.25098, 1)
+
+[sub_resource type="SystemFont" id="SystemFont_0mxmp"]
+font_names = PackedStringArray("Cascadia Code")
+font_weight = 700
+oversampling = 5.0
+
+[sub_resource type="LabelSettings" id="LabelSettings_m62vt"]
+font = SubResource("SystemFont_0mxmp")
+font_size = 100
+font_color = Color(0.992157, 0.964706, 0.890196, 1)
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_22wem"]
+content_margin_left = 250.0
+
+[sub_resource type="LabelSettings" id="LabelSettings_irfee"]
+font = SubResource("SystemFont_0mxmp")
+font_size = 50
+font_color = Color(0.921569, 0.32549, 0.317647, 1)
+
+[sub_resource type="GDScript" id="GDScript_ihn3u"]
+resource_name = "retry_button"
+script/source = "extends Button
+
+func _on_finish_difference(diff: SplitsDifference.Change) -> void:
+ match diff:
+ SplitsDifference.Change.GAIN: text = \"play again\"
+ SplitsDifference.Change.LOSS: text = \"try again\"
+"
+
+[node name="finish" type="ColorRect" node_paths=PackedStringArray("diff", "time_", "flag", "focus")]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme = ExtResource("1_aykd4")
+color = Color(0.121569, 0.121569, 0.121569, 0.709804)
+script = ExtResource("1_crs2w")
+diff = NodePath("center/panel/container/splits/diff")
+time_ = NodePath("center/panel/container/splits/hcontainer/time")
+flag = NodePath("center/panel/container/splits/hcontainer/flag")
+focus = NodePath("center/panel/container/buttons/retry")
+
+[node name="center" type="CenterContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="panel" type="PanelContainer" parent="center"]
+custom_minimum_size = Vector2(1280, 720)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_bgqa0")
+
+[node name="container" type="VBoxContainer" parent="center/panel"]
+layout_mode = 2
+
+[node name="splits" type="VBoxContainer" parent="center/panel/container"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_constants/separation = -70
+
+[node name="hcontainer" type="HBoxContainer" parent="center/panel/container/splits"]
+custom_minimum_size = Vector2(0, 240)
+layout_mode = 2
+theme_override_constants/separation = 50
+alignment = 1
+
+[node name="flag" type="Label" parent="center/panel/container/splits/hcontainer"]
+layout_mode = 2
+size_flags_vertical = 1
+text = "󰮚"
+label_settings = SubResource("LabelSettings_f3a8x")
+horizontal_alignment = 1
+vertical_alignment = 2
+
+[node name="time" type="Label" parent="center/panel/container/splits/hcontainer"]
+layout_mode = 2
+text = "1:24.187"
+label_settings = SubResource("LabelSettings_m62vt")
+
+[node name="diff" type="Label" parent="center/panel/container/splits"]
+layout_mode = 2
+theme_override_styles/normal = SubResource("StyleBoxEmpty_22wem")
+text = "+0:00.125"
+label_settings = SubResource("LabelSettings_irfee")
+script = ExtResource("2_gtres")
+gain_color = Color(0.521569, 0.6, 0, 1)
+loss_color = Color(0.921569, 0.32549, 0.317647, 1)
+
+[node name="spacer" type="Control" parent="center/panel/container"]
+custom_minimum_size = Vector2(0, 70)
+layout_mode = 2
+
+[node name="buttons" type="VBoxContainer" parent="center/panel/container"]
+layout_mode = 2
+theme_override_constants/separation = 0
+
+[node name="retry" type="Button" parent="center/panel/container/buttons"]
+layout_mode = 2
+theme_override_styles/focus = ExtResource("4_dck0l")
+text = "play again"
+script = SubResource("GDScript_ihn3u")
+
+[node name="next" type="Button" parent="center/panel/container/buttons"]
+layout_mode = 2
+theme_override_styles/focus = ExtResource("4_dck0l")
+text = "next map"
+
+[node name="quit" type="Button" parent="center/panel/container/buttons"]
+layout_mode = 2
+theme_override_styles/focus = ExtResource("4_dck0l")
+text = "exit"
+
+[connection signal="difference" from="." to="center/panel/container/buttons/retry" method="_on_finish_difference"]
+[connection signal="pressed" from="center/panel/container/buttons/retry" to="." method="emit_signal" binds= [&"retry"]]
+[connection signal="pressed" from="center/panel/container/buttons/next" to="." method="emit_signal" binds= [&"next"]]
+[connection signal="pressed" from="center/panel/container/buttons/quit" to="." method="emit_signal" binds= [&"quit"]]
diff --git a/ui/hud.tscn b/ui/hud.tscn
index d453c77..5b8387c 100644
--- a/ui/hud.tscn
+++ b/ui/hud.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=17 format=3 uid="uid://vok7fdcyec68"]
-[ext_resource type="Theme" uid="uid://ch2uo5qd8ubx6" path="res://ui/theme.tres" id="1_ie2j2"]
+[ext_resource type="Theme" uid="uid://ecnruuyrc8m" path="res://ui/theme.tres" id="1_ie2j2"]
[ext_resource type="Script" path="res://ui/hud.gd" id="1_sfhpc"]
[ext_resource type="Script" path="res://ui/speedometer.gd" id="2_cvi37"]
[ext_resource type="Script" path="res://ui/timer.gd" id="3_poksb"]
diff --git a/ui/laps.gd b/ui/laps.gd
index 577b38c..df4fa5d 100644
--- a/ui/laps.gd
+++ b/ui/laps.gd
@@ -14,3 +14,6 @@ func assigned(_car, _ghost, _timer, _track: TrackLoader) -> void:
track = _track
visible = track.track.laps > 1
increment()
+
+func reset() -> void:
+ lap = 1
diff --git a/ui/splits/difference.gd b/ui/splits/difference.gd
index c9d33eb..39433d0 100644
--- a/ui/splits/difference.gd
+++ b/ui/splits/difference.gd
@@ -1,32 +1,35 @@
-extends PanelContainer
+extends Label
+class_name SplitsDifference
@export var gain_style: StyleBox
@export var loss_style: StyleBox
@export var neutral_style: StyleBox
-@export var label: Label
enum Change { GAIN, LOSS, EQUAL }
+func format(t: float) -> String:
+ return GameTimer.format(t)
+
func update(time: float, prev_time: float) -> void:
if prev_time < 0: # no time set
hide()
return
else:
show() # shouldnt be needed but just to be carefull
- var change := diff(time, prev_time)
+ var change := SplitsDifference.diff(time, prev_time)
style(change)
match change:
- Change.LOSS: label.text = "+" + GameTimer.format(time - prev_time)
- Change.GAIN: label.text = "-" + GameTimer.format(prev_time - time)
- Change.EQUAL: label.text = "0:00.00"
+ Change.LOSS: text = "+" + format(time - prev_time)
+ Change.GAIN: text = "-" + format(prev_time - time)
+ Change.EQUAL: text = format(0)
-func diff(t1: float, t2: float) -> int:
+static func diff(t1: float, t2: float) -> int:
if is_equal_approx(t1, t2):
return Change.EQUAL
return Change.GAIN if t1 < t2 else Change.LOSS
-func style(d: int) -> void:
+func style(d: Change) -> void:
match d:
- Change.LOSS: add_theme_stylebox_override(&"panel", loss_style)
- Change.GAIN: add_theme_stylebox_override(&"panel", gain_style)
- Change.EQUAL: add_theme_stylebox_override(&"panel", neutral_style)
+ Change.LOSS: add_theme_stylebox_override(&"normal", loss_style)
+ Change.GAIN: add_theme_stylebox_override(&"normal", gain_style)
+ Change.EQUAL: add_theme_stylebox_override(&"normal", neutral_style)
diff --git a/ui/splits/gains.tres b/ui/splits/gains.tres
index 9a74265..b9ac934 100644
--- a/ui/splits/gains.tres
+++ b/ui/splits/gains.tres
@@ -3,4 +3,4 @@
[resource]
content_margin_left = 5.0
content_margin_right = 5.0
-bg_color = Color(0.458824, 0.545098, 1, 0.886275)
+bg_color = Color(0.14902, 0.545098, 0.823529, 0.886275)
diff --git a/ui/splits/splits.gd b/ui/splits/splits.gd
index 8a160c6..0a8d9be 100644
--- a/ui/splits/splits.gd
+++ b/ui/splits/splits.gd
@@ -1,7 +1,7 @@
extends VBoxContainer
class_name Splits
-@export var diff: PanelContainer
+@export var diff: SplitsDifference
@export var current: Label
var timer: SceneTreeTimer
@@ -11,4 +11,4 @@ func update(time: float, prev_time: float) -> void:
diff.update(time, prev_time)
current.text = GameTimer.format(time)
timer = get_tree().create_timer(5)
- timer.timeout.connect(hide) \ No newline at end of file
+ timer.timeout.connect(hide)
diff --git a/ui/splits/splits.tscn b/ui/splits/splits.tscn
index e7237ee..556f230 100644
--- a/ui/splits/splits.tscn
+++ b/ui/splits/splits.tscn
@@ -19,31 +19,26 @@ grow_vertical = 2
theme = ExtResource("1_m5q5h")
script = ExtResource("2_2frki")
diff = NodePath("Difference")
-current = NodePath("Current/Label")
+current = NodePath("Current")
-[node name="Current" type="PanelContainer" parent="."]
+[node name="Current" type="Label" parent="."]
+custom_minimum_size = Vector2(170, 0)
layout_mode = 2
size_flags_horizontal = 4
-
-[node name="Label" type="Label" parent="Current"]
-custom_minimum_size = Vector2(160, 0)
-layout_mode = 2
+theme_override_styles/normal = ExtResource("4_ebhpa")
text = "0:00.00"
horizontal_alignment = 2
vertical_alignment = 1
-[node name="Difference" type="PanelContainer" parent="." node_paths=PackedStringArray("label")]
+[node name="Difference" type="Label" parent="."]
+custom_minimum_size = Vector2(170, 0)
layout_mode = 2
size_flags_horizontal = 4
+theme_override_styles/normal = ExtResource("4_ebhpa")
+text = "+0:00.00"
+horizontal_alignment = 2
+vertical_alignment = 1
script = ExtResource("3_4w6ms")
gain_style = ExtResource("4_uicx0")
loss_style = ExtResource("4_5hoie")
neutral_style = ExtResource("4_ebhpa")
-label = NodePath("Label")
-
-[node name="Label" type="Label" parent="Difference"]
-custom_minimum_size = Vector2(160, 0)
-layout_mode = 2
-text = "+0:00.00"
-horizontal_alignment = 2
-vertical_alignment = 1
diff --git a/ui/theme.tres b/ui/theme.tres
index 5c40ab7..07f6a92 100644
--- a/ui/theme.tres
+++ b/ui/theme.tres
@@ -1,12 +1,19 @@
-[gd_resource type="Theme" load_steps=4 format=3 uid="uid://ch2uo5qd8ubx6"]
+[gd_resource type="Theme" load_steps=5 format=3 uid="uid://ecnruuyrc8m"]
[ext_resource type="SystemFont" uid="uid://xriuk0v4f6wj" path="res://ui/ubuntu.tres" id="1_37cf0"]
[ext_resource type="StyleBox" uid="uid://cdth5nc7lbx1v" path="res://ui/panel_skewed.tres" id="1_g8q83"]
+[ext_resource type="StyleBox" uid="uid://bkxlhm4hc5lco" path="res://ui/assets/button_focus.stylebox" id="1_t7nt0"]
[ext_resource type="FontVariation" uid="uid://ba8ab6dti2fvo" path="res://ui/boldsans.tres" id="3_fpgf0"]
[resource]
default_font = ExtResource("1_37cf0")
default_font_size = 76
+Button/colors/font_color = Color(0.933333, 0.909804, 0.835294, 1)
+Button/colors/font_focus_color = Color(0.992157, 0.964706, 0.890196, 1)
+Button/colors/font_hover_color = Color(0.992157, 0.964706, 0.890196, 1)
+Button/colors/font_hover_pressed_color = Color(0.992157, 0.964706, 0.890196, 1)
+Button/colors/font_pressed_color = Color(0.576471, 0.631373, 0.631373, 1)
+Button/styles/focus = ExtResource("1_t7nt0")
Label/font_sizes/font_size = 76
Label/fonts/font = ExtResource("1_37cf0")
PanelContainer/styles/panel = ExtResource("1_g8q83")
diff --git a/ui/ubuntu.tres b/ui/ubuntu.tres
index 99b8a80..1640c7b 100644
--- a/ui/ubuntu.tres
+++ b/ui/ubuntu.tres
@@ -2,3 +2,4 @@
[resource]
font_names = PackedStringArray("UbuntuMono Nerd Font")
+oversampling = 3.0