small racing game im working on
Diffstat (limited to 'ui/track_select.gd')
-rw-r--r--ui/track_select.gd65
1 files changed, 65 insertions, 0 deletions
diff --git a/ui/track_select.gd b/ui/track_select.gd
new file mode 100644
index 0000000..4a195a4
--- /dev/null
+++ b/ui/track_select.gd
@@ -0,0 +1,65 @@
+extends GridContainer
+class_name TrackSelect
+
+@export var editor: PackedScene = preload("res://ui/editor/track_editor.tscn")
+@export var race: PackedScene = preload("res://scenes/race_high.tscn")
+@export var ghost_watch: PackedScene = preload("res://scenes/ghost_watcher.tscn")
+@export var trackbutton: PackedScene = preload("res://ui/track_button.tscn")
+@export var editable := false
+@onready var dev = DirAccess.dir_exists_absolute("res://.git")
+
+func _ready() -> void:
+ if get_child_count() > 0:
+ (get_child(0) as TrackButton).button.grab_focus()
+
+## @virtual
+func _on_mkbutton(_button: TrackButton, _track: TrackResource) -> void:
+ pass
+
+func mkbutton(track: TrackResource) -> void:
+ var button := trackbutton.instantiate() as TrackButton
+ button.editable = editable
+ button.dev = dev
+ button.name = track.name
+ add_child(button)
+ button.init(track, lodg(track.name))
+
+ # this works perfectly because its all reference based, but the ghosts will change, so load them every time
+ button.watch.connect(func(): watch(track, lodg(track.name)))
+ button.delete.connect(delete.bind(track))
+ button.play.connect(func(): play(track, lodg(track.name)))
+ button.edit.connect(edit.bind(track))
+ _on_mkbutton(button, track)
+
+func mkbuttons(tracks: Array[TrackResource]) -> void:
+ for track in tracks:
+ mkbutton(track)
+
+func lodg(n: String) -> GhostData:
+ return GhostData._load(Globals.SAVES % n)
+
+func edit(track: TrackResource) -> void:
+ Globals.editing = track
+ add_to_main(editor)
+
+func play(track: TrackResource, ghost: GhostData) -> void:
+ Globals.playing = track
+ Globals.ghost = ghost
+ add_to_main(race)
+
+func watch(track: TrackResource, ghost: GhostData) -> void:
+ Globals.playing = track
+ Globals.ghost = ghost
+ add_to_main(ghost_watch)
+
+func add_to_main(p: PackedScene) -> void:
+ owner.hide()
+ var c := p.instantiate()
+ get_viewport().add_child(c)
+ c.tree_exited.connect(owner.show)
+
+static func delete(track: TrackResource):
+# OS.move_to_trash(Globals.TRACKS % track.name)
+ DirAccess.remove_absolute(Globals.TRACKS % track.name)
+ if FileAccess.file_exists(Globals.THUMBS % track.name):
+ DirAccess.remove_absolute(Globals.THUMBS % track.name)