public static void SetTimingStages(TimingPlanData timingPlan) { List <TimingStageData> TimingStages = new List <TimingStageData>(); TimingStageData newTimingStage; byte StageNum = 1; //int PhaseSequenceIndex; //List<byte[]> PhaseSequence = new List<byte[]>(2); List <byte> PhaseSequence1 = new List <byte>(); List <byte> PhaseSequence2 = new List <byte>(); if (timingPlan.TimingRings[0] != null) { //foreach (PhaseData Phase in Ring.Phases) //foreach (PhaseData Phase in Ring.PhaseSequence) foreach (PhaseTimingData Phase in timingPlan.TimingRings[0].Phases) { //Ring.PhaseSequence.Add(Phase.Id); PhaseSequence1.Add(Phase.Id); } } if (timingPlan.TimingRings[1] != null) { //foreach (PhaseData Phase in Ring.Phases) //foreach (PhaseData Phase in Ring.PhaseSequence) foreach (PhaseTimingData Phase in timingPlan.TimingRings[1].Phases) { //Ring.PhaseSequence.Add(Phase.Id); PhaseSequence2.Add(Phase.Id); } } int MaxPhasesInRing = Math.Max(PhaseSequence1.Count, PhaseSequence2.Count); int[] PhaseTimes = new int[4]; int PhaseCounter = 0; for (int index = 0; index < MaxPhasesInRing; index++) { if (StageNum > 1) { foreach (byte PhaseNum in TimingStages[StageNum - 2].IncludedPhases) { //PhaseTimes[PhaseCounter] = timingPlan.TimingRings[1].Phases[PhaseNum].GreenMax; PhaseCounter++; } } newTimingStage = new TimingStageData(StageNum); newTimingStage.IncludedPhases.Add(PhaseSequence1[index]); newTimingStage.IncludedPhases.Add(PhaseSequence2[index]); TimingStages.Add(newTimingStage); StageNum++; } }
public static void SetPhaseTimes(TimingPlanData timingPlan) { bool[] IsPhaseInPreviousStage = new bool[9]; timingPlan.TimingRings[0].Phases.Clear(); timingPlan.TimingRings[1].Phases.Clear(); timingPlan.TimingRings[0].PhaseSequence.Clear(); timingPlan.TimingRings[1].PhaseSequence.Clear(); PhaseTimingData newPhase; newPhase = new PhaseTimingData(); timingPlan.TimingRings[0].Phases.Add(newPhase); //phase 0 is dummy phase newPhase = new PhaseTimingData(); timingPlan.TimingRings[1].Phases.Add(newPhase); for (int StageNum = 1; StageNum < timingPlan.TimingStages.Count; StageNum++) { foreach (byte phaseNum in timingPlan.TimingStages[StageNum].IncludedPhases) { if (phaseNum < 5) { bool PhaseAlreadyInTimingRing = timingPlan.TimingRings[0].Phases.Exists(Phase => Phase.Id.Equals(phaseNum)); //byte value = Array.Find(timingPlan.TimingRings[0].Phases, element => element.Equals(phaseNum)); //see if phase # already exists in ring if (PhaseAlreadyInTimingRing == false) { timingPlan.TimingRings[0].PhaseSequence.Add(phaseNum); } if (IsPhaseInPreviousStage[phaseNum] == false) { newPhase = new PhaseTimingData(phaseNum, timingPlan.TimingStages[StageNum].GreenMin, timingPlan.TimingStages[StageNum].GreenMax, timingPlan.TimingStages[StageNum].YellowTime, timingPlan.TimingStages[StageNum].AllRedTime); timingPlan.TimingRings[0].Phases.Add(newPhase); IsPhaseInPreviousStage[phaseNum] = true; } else { int PhaseIndex = timingPlan.TimingRings[0].Phases.Count - 1; //for overlapping phase, also include yellow+all-red time from previous timing stage in green time calc float AddedTime = timingPlan.TimingStages[StageNum - 1].YellowTime + timingPlan.TimingStages[StageNum - 1].AllRedTime + timingPlan.TimingStages[StageNum].GreenMax; timingPlan.TimingRings[0].Phases[PhaseIndex].GreenMax += AddedTime; IsPhaseInPreviousStage[phaseNum] = false; } } else { bool PhaseAlreadyInTimingRing = timingPlan.TimingRings[1].Phases.Exists(Phase => Phase.Id.Equals(phaseNum)); //byte value = Array.Find(timingPlan.TimingRings[1].Phases, element => element.Equals(phaseNum)); //see if phase # already exists in ring if (PhaseAlreadyInTimingRing == false) { timingPlan.TimingRings[1].PhaseSequence.Add(phaseNum); } if (IsPhaseInPreviousStage[phaseNum] == false) { newPhase = new PhaseTimingData(phaseNum, timingPlan.TimingStages[StageNum].GreenMin, timingPlan.TimingStages[StageNum].GreenMax, timingPlan.TimingStages[StageNum].YellowTime, timingPlan.TimingStages[StageNum].AllRedTime); timingPlan.TimingRings[1].Phases.Add(newPhase); IsPhaseInPreviousStage[phaseNum] = true; } else { int PhaseIndex = timingPlan.TimingRings[1].Phases.Count - 1; //for overlapping phase, also include yellow+all-red time from previous timing stage in green time calc float AddedTime = timingPlan.TimingStages[StageNum - 1].YellowTime + timingPlan.TimingStages[StageNum - 1].AllRedTime + timingPlan.TimingStages[StageNum].GreenMax; timingPlan.TimingRings[1].Phases[PhaseIndex].GreenMax += AddedTime; IsPhaseInPreviousStage[phaseNum] = false; } } } } }