public int GetTakenPlace(Game.Result result) {
if (result == null) return UnremarkablePlace;
var drift = result.GetExtraByType<Game.ResultExtraDrift>();
if (drift != null && Type == PlaceConditionsType.Points) {
return GetTakenPlace(drift.Points);
}
var timeAttack = result.GetExtraByType<Game.ResultExtraTimeAttack>();
if (timeAttack != null && Type == PlaceConditionsType.Points) {
return GetTakenPlace(timeAttack.Points);
}
switch (Type) {
case PlaceConditionsType.Points:
return UnremarkablePlace;
case PlaceConditionsType.Position:
var place = result.Sessions.LastOrDefault(x => x.BestLaps.Any())?.CarPerTakenPlace?.IndexOf(0);
return place.HasValue ? GetTakenPlace(place.Value + 1) : UnremarkablePlace;
case PlaceConditionsType.Time:
var time = result.Sessions.LastOrDefault(x => x.BestLaps.Any())?.BestLaps.FirstOrDefault(x => x.CarNumber == 0)?.Time;
return time.HasValue ? GetTakenPlace((int)time.Value.TotalMilliseconds) : UnremarkablePlace;
default:
throw new ArgumentOutOfRangeException();
}
}