Skip to content

Commit

Permalink
Improved handling of new entries and position changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ColonelChocomel committed Mar 4, 2022
1 parent eb5060b commit 3aaf904
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 11 deletions.
5 changes: 5 additions & 0 deletions ACCBroadcaster/Classes/Car.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ public void OnPropertyChanged(string propertyName)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

public void DestroyPropertyChanged()
{
PropertyChanged = null;
}

public string LapTimeMsToReadable(int? laptimeMs)
{
if (laptimeMs == null)
Expand Down
61 changes: 50 additions & 11 deletions ACCBroadcaster/Views/Broadcasting/CarListView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,30 +37,69 @@ public CarListView()

private void OnEntrylistUpdate(string sender, CarInfo carUpdate)
{
Car car = new Car
Car car;

if (Cars.Count > 0)
{
car = Cars.FirstOrDefault(x => x.Index == carUpdate.CarIndex);
if (car == null)
{
car = new Car
{
Index = carUpdate.CarIndex,
RaceNumber = carUpdate.RaceNumber,
DriverName = carUpdate.Drivers[carUpdate.CurrentDriverIndex].FirstName + " " + carUpdate.Drivers[carUpdate.CurrentDriverIndex].LastName,
Location = CarLocationEnum.Pitlane,
};
Cars.Add(car);
}
else
{
car.RaceNumber = carUpdate.RaceNumber;
car.DriverName = carUpdate.Drivers[carUpdate.CurrentDriverIndex].FirstName + " " + carUpdate.Drivers[carUpdate.CurrentDriverIndex].LastName;
car.Location = CarLocationEnum.Pitlane;
}
}
else
{
Index = carUpdate.CarIndex,
RaceNumber = carUpdate.RaceNumber,
DriverName = carUpdate.Drivers[carUpdate.CurrentDriverIndex].FirstName + " " + carUpdate.Drivers[carUpdate.CurrentDriverIndex].LastName,
Location = CarLocationEnum.Pitlane,
};
Cars.Add(car);
car = new Car
{
Index = carUpdate.CarIndex,
RaceNumber = carUpdate.RaceNumber,
DriverName = carUpdate.Drivers[carUpdate.CurrentDriverIndex].FirstName + " " + carUpdate.Drivers[carUpdate.CurrentDriverIndex].LastName,
Location = CarLocationEnum.Pitlane,
};
Cars.Add(car);
}
}

private void OnRealtimeCarUpdate(string sender, RealtimeCarUpdate carUpdate)
{
Car car = Cars.FirstOrDefault(x => x.Index == carUpdate.CarIndex);
if (car != null)
{
bool positionChanged = false;
car.Index = carUpdate.CarIndex;
car.Position = carUpdate.Position;
if (car.Position != carUpdate.Position)
{
car.Position = carUpdate.Position;
positionChanged = true;
}
car.Location = carUpdate.CarLocation;
car.LapDelta =car.DeltaMsToReadable(carUpdate.Delta);
car.LapDelta = car.DeltaMsToReadable(carUpdate.Delta);
car.CurrentLap = car.LapTimeMsToReadable(carUpdate.CurrentLap.LaptimeMS);
car.LastLap = car.LapTimeMsToReadable(carUpdate.LastLap.LaptimeMS);
car.BestLap = car.LapTimeMsToReadable(carUpdate.BestSessionLap.LaptimeMS);
Cars = new ObservableCollection<Car>(Cars.OrderBy(x => x.Position));
CarLV.ItemsSource = Cars;
if (positionChanged)
{
Cars = new ObservableCollection<Car>(Cars.OrderBy(x => x.Position));
foreach(Car listedCar in CarLV.Items)
{
// Destroy PropertyChanged on all instances in view list to stop memory clogging up
listedCar.DestroyPropertyChanged();
}
CarLV.ItemsSource = Cars;
}
}
}
}
Expand Down

0 comments on commit 3aaf904

Please sign in to comment.