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)