Fix crash when 25 players are exceeded #5

Merged
hodasemi merged 3 commits from dev into master 2023-01-20 04:30:48 +00:00
4 changed files with 22 additions and 18 deletions
Showing only changes of commit 5300efff51 - Show all commits

View file

@ -128,9 +128,6 @@ impl LeaderBoard {
}
}
// TODO: when people disconnect there needs to be a remove function
// vehicle_scorings.len() != self.leaderboard_entries.len()
write_log!("create entries");
// check if entry count in grid is the same as the gathered entries
@ -145,6 +142,16 @@ impl LeaderBoard {
entry.snippet().set_visibility(false)?;
}
true
}
// there are more entries in leaderboard when someone leaves and ID doesn't get reused
else if self.leaderboard_entries.len() > vehicle_scorings.len() {
self.leaderboard_entries.retain(|entry| {
vehicle_scorings
.iter()
.any(|scoring| scoring.mID == entry.id())
});
true
} else {
false
@ -265,13 +272,12 @@ impl UiOverlay for LeaderBoard {}
impl DataReceiver for LeaderBoard {
fn game_phase_change(&mut self, phase: GamePhase) -> Result<()> {
match phase {
GamePhase::Practice | GamePhase::Qualifying => {
GamePhase::Practice | GamePhase::Qualifying | GamePhase::TestDay => {
for entry in self.leaderboard_entries.iter_mut() {
entry.update_best_lap(-1.0)?;
}
self.leaderboard.enable()?;
self.deltaboard.enable()?;
}
GamePhase::Race => {
@ -294,7 +300,9 @@ impl DataReceiver for LeaderBoard {
fn update_for_phase(&self, phase: GamePhase) -> bool {
match phase {
GamePhase::Practice | GamePhase::Qualifying | GamePhase::Race => true,
GamePhase::Practice | GamePhase::Qualifying | GamePhase::Race | GamePhase::TestDay => {
true
}
_ => false,
}
}
@ -307,7 +315,7 @@ impl DataReceiver for LeaderBoard {
write_log!("=================== leader board: scoring update ===================");
match phase {
GamePhase::Practice | GamePhase::Qualifying => {
GamePhase::Practice | GamePhase::Qualifying | GamePhase::TestDay => {
self.quali_leaderboard(vehicle_scorings)?;
}

View file

@ -237,7 +237,7 @@ impl UiOverlay for Pedals {}
impl DataReceiver for Pedals {
fn game_phase_change(&mut self, phase: GamePhase) -> Result<()> {
match phase {
GamePhase::None | GamePhase::TestDay => {
GamePhase::None => {
self.enable = false;
self.gui.disable()?;
}
@ -252,10 +252,8 @@ impl DataReceiver for Pedals {
fn update_for_phase(&self, phase: GamePhase) -> bool {
match phase {
GamePhase::Practice | GamePhase::Qualifying | GamePhase::Race | GamePhase::Warmup => {
true
}
_ => false,
GamePhase::None => false,
_ => true,
}
}

View file

@ -274,7 +274,7 @@ impl UiOverlay for Radar {}
impl DataReceiver for Radar {
fn game_phase_change(&mut self, phase: GamePhase) -> Result<()> {
match phase {
GamePhase::None | GamePhase::TestDay => self.enable = false,
GamePhase::None => self.enable = false,
_ => self.enable = true,
}
@ -283,10 +283,8 @@ impl DataReceiver for Radar {
fn update_for_phase(&self, phase: GamePhase) -> bool {
match phase {
GamePhase::Practice | GamePhase::Qualifying | GamePhase::Race | GamePhase::Warmup => {
true
}
_ => false,
GamePhase::None => false,
_ => true,
}
}

View file

@ -28,7 +28,7 @@ impl UiOverlay for Watermark {}
impl DataReceiver for Watermark {
fn game_phase_change(&mut self, phase: GamePhase) -> Result<()> {
match phase {
GamePhase::TestDay => self.gui.enable()?,
GamePhase::None => self.gui.enable()?,
_ => self.gui.disable()?,
}