private void WaitForStageActivatorToActiveThenMoveToNextStage() { if (!activeStageActivator.IsActive()) { return; } isGateOpenedLastTimeCheck = false; //close and seal the gate so that it would not be opened again //DLog.Log("Close gate"); activeGateController.Close(); activeGateController.Seal(); int indexOfActiveStageActivator = stageActivators.IndexOf(activeStageActivator); if (indexOfActiveStageActivator < stageActivators.Count - 1) { activeStageActivator = stageActivators[indexOfActiveStageActivator + 1]; components.Remove(activeStageActivatorComponent); } int indexOfActiveGate = gates.IndexOf(activeGateController); if (indexOfActiveGate < gates.Count - 1) { activeGateController = gates[indexOfActiveGate + 1]; // components.Remove(activeGateComponent); } MoveToNextStage(); }