// Token: 0x060018CA RID: 6346 RVA: 0x0002C0DC File Offset: 0x0002B0DC
        public virtual void OnUpdate(EntrantInfo entrant, Event evnt, float dt)
        {
            InstancedEvent   instancedEvent   = evnt as InstancedEvent;
            DragScoringState dragScoringState = entrant.ScoringState as DragScoringState;

            if (dragScoringState != null)
            {
                dragScoringState.FractionCompleted   = this.GetFractionCompleted(dragScoringState, entrant, instancedEvent);
                dragScoringState.DistanceToStartLine = instancedEvent.GetDistanceToStartLine(entrant.Opponent.Vehicle);
                float speed = entrant.Opponent.Vehicle.GetSpeed();
                if (speed > dragScoringState.TopSpeed)
                {
                    dragScoringState.TopSpeed = speed;
                }
                if (entrant.Opponent.Vehicle.GetCurrentAirborneTime() > dragScoringState.LongestAirTimeInSeconds)
                {
                    dragScoringState.LongestAirTimeInSeconds = entrant.Opponent.Vehicle.GetCurrentAirborneTime();
                }
                if (entrant.Opponent.Vehicle.GetNumWheelsOnGround() == 0)
                {
                    dragScoringState.SumAirTimeInSeconds += dt;
                }
                if (entrant.Opponent.InternalOpponent.GetNumOpponentsCollidedWith() > dragScoringState.NumOpponentsTagged)
                {
                    dragScoringState.NumOpponentsTagged = entrant.Opponent.InternalOpponent.GetNumOpponentsCollidedWith();
                }
                entrant.Opponent.InternalOpponent.SetFractionEventComplete(dragScoringState.FractionCompleted);
            }
        }
        // Token: 0x060018D2 RID: 6354 RVA: 0x0002C58C File Offset: 0x0002B58C
        public EventResult Arbitrated(Event evnt, XmlString xmlString)
        {
            InstancedEvent  instancedEvent = evnt as InstancedEvent;
            DragEventResult dragEventResult;

            if (XSD2CPP.ReadDragEventResult(xmlString, out dragEventResult) && dragEventResult.EventSessionId == instancedEvent.EventSessionId)
            {
                foreach (DragEntrantResult dragEntrantResult in dragEventResult.Entrants)
                {
                    if (dragEntrantResult.FinishReason != 0)
                    {
                        EntrantInfo entrantInfo = evnt.FindEntrant(dragEntrantResult.PersonaId);
                        if (entrantInfo != null)
                        {
                            DragScoringState dragScoringState = entrantInfo.ScoringState as DragScoringState;
                            if (dragScoringState != null && !dragScoringState.HasArbitrated)
                            {
                                dragScoringState.HasArbitrated = true;
                                dragScoringState.FinishReason  = (FinishReason)dragEntrantResult.FinishReason;
                                dragScoringState.EventDurationInMilliseconds = dragEntrantResult.EventDurationInMilliseconds;
                                dragScoringState.Rank     = dragEntrantResult.Ranking;
                                dragScoringState.TopSpeed = dragEntrantResult.TopSpeed;
                            }
                        }
                    }
                }
                Marshal.Get().SetLocalPlayersDurability(dragEventResult.Durability);
                return(dragEventResult);
            }
            return(null);
        }
        // Token: 0x060018D4 RID: 6356 RVA: 0x0002C6FC File Offset: 0x0002B6FC
        public bool IsPowerupRestricted(Restriction restriction, EntrantInfo entrantInfo, Event evnt)
        {
            if (entrantInfo == null)
            {
                return(true);
            }
            LocalHumanOpponent localHumanOpponent = entrantInfo.Opponent as LocalHumanOpponent;
            DragScoringState   dragScoringState   = entrantInfo.ScoringState as DragScoringState;

            if (dragScoringState == null)
            {
                return(true);
            }
            if (dragScoringState.EventDurationInSeconds < evnt.EventDef.PowerupBlackoutAtEventStart() && localHumanOpponent != null && !this.IsJumpStartActive(entrantInfo, evnt))
            {
                return(true);
            }
            switch (restriction)
            {
            case Restriction.kPowerupRestriction_NobodyHasFinishedEvent:
                foreach (EntrantInfo entrantInfo2 in evnt.Entrants)
                {
                    DragScoringState dragScoringState2 = entrantInfo2.ScoringState as DragScoringState;
                    if (dragScoringState2 != null && dragScoringState2.FractionCompleted > 0.95f)
                    {
                        return(true);
                    }
                }
                break;

            case Restriction.kPowerupRestriction_IAmNotInFirstPlace:
            {
                if (dragScoringState.Rank == 1)
                {
                    return(true);
                }
                int num = 999;
                foreach (EntrantInfo entrantInfo3 in evnt.Entrants)
                {
                    bool flag = entrantInfo3.Opponent.IsStatus(OpponentStatus.kOpponent_Disconnected);
                    RouteScoringState routeScoringState = entrantInfo3.ScoringState as RouteScoringState;
                    if (routeScoringState != null && routeScoringState.FinishReason == FinishReason.Unknown && !flag && routeScoringState.Rank < num)
                    {
                        num = routeScoringState.Rank;
                    }
                }
                if (num == dragScoringState.Rank)
                {
                    return(true);
                }
                break;
            }
            }
            return(false);
        }
        // Token: 0x060018C9 RID: 6345 RVA: 0x0002C098 File Offset: 0x0002B098
        public virtual void Conclude(ScoringState state)
        {
            state.EventTimer.Stop();
            state.SecureEventTimer.Stop();
            DragScoringState dragScoringState = state as DragScoringState;

            if (dragScoringState != null && dragScoringState.FinishReason == FinishReason.CrossedFinish)
            {
                dragScoringState.FractionCompleted = 1f;
            }
        }
        // Token: 0x060018CC RID: 6348 RVA: 0x0002C1E0 File Offset: 0x0002B1E0
        protected virtual float GetFractionCompleted(DragScoringState state, EntrantInfo entrant, InstancedEvent evnt)
        {
            float num = evnt.TrackLayout.GetLapStartToVehicleDistance(entrant.Opponent.Vehicle);
            float lapStartToCheckpointDistance = evnt.TrackLayout.GetLapStartToCheckpointDistance(entrant.RoutingState.NextIndex);

            if (num > lapStartToCheckpointDistance)
            {
                num -= evnt.TrackLayout.GetLapLength(0);
            }
            num = Math.Max(num, 0f);
            return(Math.Min(num / evnt.TrackLayout.GetLength(evnt.NumLaps), 0.99999f));
        }
        // Token: 0x060018C3 RID: 6339 RVA: 0x0002BE7C File Offset: 0x0002AE7C
        public void Fill(LivePacket livePacket, EntrantInfo entrant)
        {
            DragLivePacket   dragLivePacket   = livePacket as DragLivePacket;
            DragScoringState dragScoringState = entrant.ScoringState as DragScoringState;

            if (dragScoringState != null && null != dragLivePacket)
            {
                DragEntrantLivePacket dragEntrantLivePacket = dragLivePacket.CreateEntrantLivePacket();
                dragEntrantLivePacket.SetPersonaName(entrant.Opponent.OpponentName);
                dragEntrantLivePacket.PersonaId    = entrant.PersonaId;
                dragEntrantLivePacket.FinishReason = dragScoringState.FinishReason;
                dragEntrantLivePacket.Rank         = dragScoringState.Rank;
                dragEntrantLivePacket.IsLocal      = (entrant.Opponent is LocalHumanOpponent);
                dragEntrantLivePacket.Percentage   = (float)((int)(dragScoringState.FractionCompleted * 100f)) / 100f;
                System.TimeSpan span = System.TimeSpan.FromMilliseconds(dragScoringState.EventTimer.ElapsedInMilliseconds);
                span.Fill(dragEntrantLivePacket.GetElapsedTime());
            }
        }
        // Token: 0x060018D1 RID: 6353 RVA: 0x0002C508 File Offset: 0x0002B508
        public void EntrantResultReceived(Event evnt, XmlString xmlString)
        {
            InstancedEvent    instancedEvent = evnt as InstancedEvent;
            DragEntrantResult dragEntrantResult;

            if (XSD2CPP.ReadDragEntrantResult(xmlString, out dragEntrantResult) && dragEntrantResult.EventSessionId == instancedEvent.EventSessionId)
            {
                EntrantInfo entrantInfo = evnt.FindEntrant(dragEntrantResult.PersonaId);
                if (entrantInfo == null)
                {
                    return;
                }
                DragScoringState dragScoringState = entrantInfo.ScoringState as DragScoringState;
                if (dragScoringState != null)
                {
                    dragScoringState.HasArbitrated = true;
                    dragScoringState.FinishReason  = (FinishReason)dragEntrantResult.FinishReason;
                    dragScoringState.EventDurationInMilliseconds = dragEntrantResult.EventDurationInMilliseconds;
                    dragScoringState.Rank     = dragEntrantResult.Ranking;
                    dragScoringState.TopSpeed = dragEntrantResult.TopSpeed;
                }
            }
        }
        // Token: 0x060018D0 RID: 6352 RVA: 0x0002C45C File Offset: 0x0002B45C
        public ArbitrationPacket FillArbitrationRecord(EntrantInfo entrant)
        {
            DragScoringState dragScoringState = entrant.ScoringState as DragScoringState;

            if (dragScoringState != null)
            {
                return(new DragArbitrationPacket
                {
                    Rank = dragScoringState.Rank,
                    EventDurationInMilliseconds = dragScoringState.EventDurationInMilliseconds,
                    AlternateEventDurationInMilliseconds = dragScoringState.SecureEventDurationInMilliseconds,
                    HacksDetected = SecurityManager.GetHacks(),
                    FinishReason = (int)dragScoringState.FinishReason,
                    FractionCompleted = dragScoringState.FractionCompleted,
                    TopSpeed = dragScoringState.TopSpeed,
                    LongestJumpDurationInMilliseconds = dragScoringState.LongestAirTimeInMilliseconds,
                    SumOfJumpsDurationInMilliseconds = dragScoringState.SumAirTimeInMilliseconds,
                    PerfectStart = (int)dragScoringState.PerfectStart,
                    NumberOfCollisions = dragScoringState.NumOpponentsTagged
                });
            }
            return(null);
        }
        // Token: 0x060018C6 RID: 6342 RVA: 0x0002BF78 File Offset: 0x0002AF78
        public void Fill(ArbitratedPacket arbitratedPacket, EntrantInfo entrant)
        {
            DragArbitratedPacket dragArbitratedPacket = arbitratedPacket as DragArbitratedPacket;
            DragScoringState     dragScoringState     = entrant.ScoringState as DragScoringState;

            if (dragScoringState != null && null != dragArbitratedPacket)
            {
                DragEntrantArbitratedPacket dragEntrantArbitratedPacket = dragArbitratedPacket.CreateEntrantArbitratedPacket();
                Marshal.Get().FillFEPlayerPersona(entrant.PersonaId, dragEntrantArbitratedPacket);
                dragEntrantArbitratedPacket.PersonaId = entrant.PersonaId;
                dragEntrantArbitratedPacket.SetPersonaName(entrant.Opponent.OpponentName);
                dragEntrantArbitratedPacket.SetMotto(entrant.Opponent.Motto);
                dragEntrantArbitratedPacket.HasArbitrated = dragScoringState.HasArbitrated;
                dragEntrantArbitratedPacket.FinishReason  = dragScoringState.FinishReason;
                dragEntrantArbitratedPacket.Rank          = dragScoringState.Rank;
                dragEntrantArbitratedPacket.Level         = dragScoringState.Level;
                dragEntrantArbitratedPacket.IconIndex     = (long)((ulong)entrant.Opponent.IconIndex);
                dragEntrantArbitratedPacket.IsLocal       = (entrant.Opponent is LocalHumanOpponent);
                dragEntrantArbitratedPacket.EventDuration = dragScoringState.EventDurationInSeconds;
                Powerups.FillEntrantArbitratedPacket(dragEntrantArbitratedPacket);
                entrant.Opponent.FillCarData(dragEntrantArbitratedPacket.GetCarData());
                dragEntrantArbitratedPacket.TopSpeed = dragScoringState.TopSpeed;
            }
        }
        // Token: 0x060018D3 RID: 6355 RVA: 0x0002C680 File Offset: 0x0002B680
        private unsafe bool IsJumpStartActive(EntrantInfo entrantInfo, Event evnt)
        {
            LocalHumanOpponent localHumanOpponent = entrantInfo.Opponent as LocalHumanOpponent;
            DragScoringState   dragScoringState   = entrantInfo.ScoringState as DragScoringState;

            if (dragScoringState == null || localHumanOpponent == null)
            {
                return(false);
            }
            if (localHumanOpponent.Vehicle.IsStaging())
            {
                return(false);
            }
            float num;

            if (!localHumanOpponent.Vehicle.GetSkillModEffectAmount(SkillModEffectType.JumpStart, &num))
            {
                return(false);
            }
            float num2 = evnt.EventDef.PowerupBlackoutAtEventStart();
            float num3 = num2 - num;

            return(dragScoringState.EventDurationInSeconds <= num2 && dragScoringState.EventDurationInSeconds > num3);
        }
        // Token: 0x060018CF RID: 6351 RVA: 0x0002C288 File Offset: 0x0002B288
        private int Sort(EntrantInfo le, EntrantInfo re)
        {
            DragScoringState dragScoringState  = le.ScoringState as DragScoringState;
            DragScoringState dragScoringState2 = re.ScoringState as DragScoringState;

            if (dragScoringState == null || dragScoringState2 == null)
            {
                return(0);
            }
            if (!dragScoringState.IsFinishReason(FinishReason.Disconnected) && dragScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                return(-1);
            }
            if (dragScoringState.IsFinishReason(FinishReason.Disconnected) && !dragScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                return(1);
            }
            if (dragScoringState.IsFinishReason(FinishReason.Disconnected) && dragScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                if (dragScoringState.FractionCompleted <= dragScoringState2.FractionCompleted)
                {
                    return(1);
                }
                return(-1);
            }
            else
            {
                if (!dragScoringState.IsFinishReason(FinishReason.DidNotFinish) && dragScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    return(-1);
                }
                if (dragScoringState.IsFinishReason(FinishReason.DidNotFinish) && !dragScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    return(1);
                }
                if (dragScoringState.IsFinishReason(FinishReason.DidNotFinish) && dragScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    if (dragScoringState.FinishReason == dragScoringState2.FinishReason && dragScoringState2.FractionCompleted != dragScoringState.FractionCompleted)
                    {
                        if (dragScoringState.FractionCompleted <= dragScoringState2.FractionCompleted)
                        {
                            return(1);
                        }
                        return(-1);
                    }
                }
                else
                {
                    if (dragScoringState.IsFinishReason(FinishReason.Completed) && !dragScoringState2.IsFinishReason(FinishReason.Completed))
                    {
                        return(-1);
                    }
                    if (!dragScoringState.IsFinishReason(FinishReason.Completed) && dragScoringState2.IsFinishReason(FinishReason.Completed))
                    {
                        return(1);
                    }
                    if (dragScoringState.IsFinishReason(FinishReason.CrossedFinish) && dragScoringState2.IsFinishReason(FinishReason.CrossedFinish))
                    {
                        if (dragScoringState.EventDurationInMilliseconds != dragScoringState2.EventDurationInMilliseconds)
                        {
                            if (dragScoringState.EventDurationInMilliseconds >= dragScoringState2.EventDurationInMilliseconds)
                            {
                                return(1);
                            }
                            return(-1);
                        }
                    }
                    else if (dragScoringState.FractionCompleted == 0f && dragScoringState2.FractionCompleted == 0f)
                    {
                        if (dragScoringState.DistanceToStartLine != dragScoringState2.DistanceToStartLine)
                        {
                            if (dragScoringState.DistanceToStartLine >= dragScoringState2.DistanceToStartLine)
                            {
                                return(1);
                            }
                            return(-1);
                        }
                    }
                    else if (dragScoringState.FractionCompleted != dragScoringState2.FractionCompleted)
                    {
                        if (dragScoringState.FractionCompleted <= dragScoringState2.FractionCompleted)
                        {
                            return(1);
                        }
                        return(-1);
                    }
                }
                return(le.Opponent.GridIndex - re.Opponent.GridIndex);
            }
        }