PRoConEvents.MULTIbalancer.GetUnstackTicketRatio C# (CSharp) Method

GetUnstackTicketRatio() private method

private GetUnstackTicketRatio ( PerModeSettings perMode ) : double
perMode PerModeSettings
return double
        private double GetUnstackTicketRatio(PerModeSettings perMode)
        {
            Phase phase = GetPhase(perMode, false);
            Population pop = GetPopulation(perMode, false);
            double unstackTicketRatio = 0;

            if (perMode.CheckTeamStackingAfterFirstMinutes == 0) return 0;

            switch (phase) {
            case Phase.Early:
            switch (pop) {
                case Population.Low: unstackTicketRatio = EarlyPhaseTicketPercentageToUnstack[0]; break;
                case Population.Medium: unstackTicketRatio = EarlyPhaseTicketPercentageToUnstack[1]; break;
                case Population.High: unstackTicketRatio = EarlyPhaseTicketPercentageToUnstack[2]; break;
                default: break;
            }
            break;
            case Phase.Mid:
            switch (pop) {
                case Population.Low: unstackTicketRatio = MidPhaseTicketPercentageToUnstack[0]; break;
                case Population.Medium: unstackTicketRatio = MidPhaseTicketPercentageToUnstack[1]; break;
                case Population.High: unstackTicketRatio = MidPhaseTicketPercentageToUnstack[2]; break;
                default: break;
            }
            break;
            case Phase.Late:
            switch (pop) {
                case Population.Low: unstackTicketRatio = LatePhaseTicketPercentageToUnstack[0]; break;
                case Population.Medium: unstackTicketRatio = LatePhaseTicketPercentageToUnstack[1]; break;
                case Population.High: unstackTicketRatio = LatePhaseTicketPercentageToUnstack[2]; break;
                default: break;
            }
            break;
            default: break;
            }

            // apply rush adjustment
            if (IsRush() && fRushStage > 0 && fRushStage <= 5 && unstackTicketRatio > 100) {
            double adj = 0;
            switch (fRushStage) {
            case 1: adj = perMode.Stage1TicketPercentageToUnstackAdjustment; break;
            case 2: adj = perMode.Stage2TicketPercentageToUnstackAdjustment; break;
            case 3: adj = perMode.Stage3TicketPercentageToUnstackAdjustment; break;
            case 4: adj = perMode.Stage4And5TicketPercentageToUnstackAdjustment; break;
            case 5: adj = perMode.Stage4And5TicketPercentageToUnstackAdjustment; break;
            default: break;
            }
            if (adj != 0) unstackTicketRatio = unstackTicketRatio + adj;
            }

            if (unstackTicketRatio <= 100) unstackTicketRatio = 0;

            if (AdjustForMetro(perMode)) {
            double old = unstackTicketRatio;
            switch (phase) {
            case Phase.Early: unstackTicketRatio = 0; break;
            // case Phase.Mid: speed = Speed.Slow; break; // use whatever is specified
            case Phase.Late: unstackTicketRatio = 0; break;
            }
            if (old != unstackTicketRatio) ConsoleDebug("GetUnstackTicketRatio: Adjusted for Metro from " + old + " to " + unstackTicketRatio);
            }

            return (unstackTicketRatio/100.0);
        }
MULTIbalancer