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
var race: Race
var huds: Array[HUD]
func _ready() -> void:
super()
scale = Globals.cfg.get_value(SettingsSaver.GRAPHIC, "viewport_scale") / 100
await get_tree().physics_frame
race = Race.new(Globals.playing, Globals.ghost, car_scene, ghost_scene, track_loader_scene)
race.did_reset.connect(count_in)
race.cars_needed = Globals.players
add_child(race)
for player in Globals.players:
add_player()
# cant call it join because of overriding and stuff
func add_player() -> void:
var car := len(players)
var v := join()
var c_cam := CarCamera.new(race.cars[car])
var i_cam := IntroCam.new(Globals.playing, c_cam)
v.viewport.add_child(c_cam)
v.viewport.add_child(i_cam)
var hud = hud_scene.instantiate()
hud.assigned.emit(race.cars[car], race.timers[car], race.track)
v.add_child(hud)
race.split.connect(func(t, p, n): if n == car: hud.splits.update(t, p))
race.next_lap.connect(hud.laps.increment)
huds.append(hud)
i_cam.finished.connect(count_in)
race.did_reset.connect(c_cam.reset)
race.did_reset.connect(hud.laps.reset)
race.finished.connect(func(t: float, p_t: float, n: int):
if n != car:
return
var finish: FinishUI = finish_scene.instantiate()
hud.add_child(finish)
finish.set_time(t, p_t)
finish.retry.disabled = players.size() > 1
finish.quit.disabled = players.size() > 1
race.all_finished.connect(func():
finish.retry.disabled = false
finish.quit.disabled = false
)
finish.retry.pressed.connect(race.reset)
race.did_reset.connect(finish.queue_free)
finish.quit.pressed.connect(queue_free)
)
func count_in():
if Globals.cfg.get_value(SettingsSaver.UTIL, "countdown_step_length") == 0:
race.start()
return
var countdown := countdown_scene.instantiate()
huds[0].add_child(countdown)
countdown.finished.connect(race.start)
countdown.finished.connect(countdown.queue_free)