public static bool[] SetPhaseStatus(TimingStageData timingStage, int phaseNum, int activeStage) // ref bool[,] IsPhaseActive) { bool[] PhaseListSettings = new bool[2]; bool WasPhaseExcludedFromList = false; bool WasPhasePreviouslyInList = false; bool IsPhaseNumInList = timingStage.IncludedPhases.Exists(item => item == phaseNum); if (IsPhaseNumInList == true) { int PhaseNumIndex = timingStage.IncludedPhases.FindIndex(item => item == phaseNum); timingStage.IncludedPhases.RemoveAt(PhaseNumIndex); //user has clicked on previously active phase in the stage, now remove it PhaseBeingRemovedFromStage(timingStage, phaseNum, activeStage); WasPhasePreviouslyInList = true; } else { WasPhaseExcludedFromList = AddPhaseToStageIfNoConflict(timingStage, phaseNum, activeStage); } PhaseListSettings[0] = WasPhaseExcludedFromList; PhaseListSettings[1] = WasPhasePreviouslyInList; return(PhaseListSettings); }
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 PhaseBeingRemovedFromStage(TimingStageData timingStage, int phaseNum, int activeStage) { bool IsPhaseNumInList2; switch (phaseNum) { case 1: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 2, 3, 4); if (IsPhaseNumInList2 == false) { IsRing1Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 2, 5, 6); if (IsPhaseNumInList2 == false) { IsConcurGroup1Active[activeStage] = false; } break; case 2: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 3, 4); if (IsPhaseNumInList2 == false) { IsRing1Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 5, 6); if (IsPhaseNumInList2 == false) { IsConcurGroup1Active[activeStage] = false; } break; case 3: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 2, 4); if (IsPhaseNumInList2 == false) { IsRing1Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 4, 7, 8); if (IsPhaseNumInList2 == false) { IsConcurGroup2Active[activeStage] = false; } break; case 4: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 2, 3); if (IsPhaseNumInList2 == false) { IsRing1Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 3, 7, 8); if (IsPhaseNumInList2 == false) { IsConcurGroup2Active[activeStage] = false; } break; case 5: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 6, 7, 8); if (IsPhaseNumInList2 == false) { IsRing2Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 2, 6); if (IsPhaseNumInList2 == false) { IsConcurGroup1Active[activeStage] = false; } break; case 6: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 5, 7, 8); if (IsPhaseNumInList2 == false) { IsRing2Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 1, 2, 5); if (IsPhaseNumInList2 == false) { IsConcurGroup1Active[activeStage] = false; } break; case 7: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 5, 6, 8); if (IsPhaseNumInList2 == false) { IsRing2Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 3, 4, 8); if (IsPhaseNumInList2 == false) { IsConcurGroup2Active[activeStage] = false; } break; case 8: IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 5, 6, 7); if (IsPhaseNumInList2 == false) { IsRing2Active[activeStage] = false; } IsPhaseNumInList2 = CheckForPhasesPresentInTimingStage(timingStage.IncludedPhases, 3, 4, 7); if (IsPhaseNumInList2 == false) { IsConcurGroup2Active[activeStage] = false; } break; } }
public static bool AddPhaseToStageIfNoConflict(TimingStageData timingStage, int phaseNum, int activeStage) { bool DoNotEnablePhase = false; switch (phaseNum) { case 1: if (IsRing1Active[activeStage] == true || IsConcurGroup2Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing1Active[activeStage] = true; IsConcurGroup1Active[activeStage] = true; } break; case 2: if (IsRing1Active[activeStage] == true || IsConcurGroup2Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing1Active[activeStage] = true; IsConcurGroup1Active[activeStage] = true; } break; case 3: if (IsRing1Active[activeStage] == true || IsConcurGroup1Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing1Active[activeStage] = true; IsConcurGroup2Active[activeStage] = true; } break; case 4: if (IsRing1Active[activeStage] == true || IsConcurGroup1Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing1Active[activeStage] = true; IsConcurGroup2Active[activeStage] = true; } break; case 5: if (IsRing2Active[activeStage] == true || IsConcurGroup2Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing2Active[activeStage] = true; IsConcurGroup1Active[activeStage] = true; } break; case 6: if (IsRing2Active[activeStage] == true || IsConcurGroup2Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing2Active[activeStage] = true; IsConcurGroup1Active[activeStage] = true; } break; case 7: if (IsRing2Active[activeStage] == true || IsConcurGroup1Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing2Active[activeStage] = true; IsConcurGroup2Active[activeStage] = true; } break; case 8: if (IsRing2Active[activeStage] == true || IsConcurGroup1Active[activeStage] == true) { DoNotEnablePhase = true; } else { IsRing2Active[activeStage] = true; IsConcurGroup2Active[activeStage] = true; } break; } if (DoNotEnablePhase == false) { //IsPhaseActive[activeStage, phaseNum] = true; timingStage.IncludedPhases.Add((byte)phaseNum); } return(DoNotEnablePhase); }