Exemplo n.º 1
0
        private void EnsureInitialised()
        {
            if (state != DrillTowerState.None)
            {
                return;
            }

            // Initial state after eg. game load.
            // Infer current operation.
            if (pistonGroup.IsExtending)
            {
                // Probably already drilling. Do start-up checks again.
                state = DrillTowerState.Starting;
            }
            else if (pistonGroup.IsRetracting || pistonGroup.ExtensionPercentage > 0)
            {
                // Probably retrieving. Do retrieval checks again.
                state = DrillTowerState.Retrieving;
            }
            else
            {
                // Fallback. Do retrieval checks again, although we're probably already clamped.
                state = DrillTowerState.Retrieving;
            }
        }
Exemplo n.º 2
0
 public void EmergencyStop()
 {
     pistonGroup.Stop();
     StopRotor();
     drillHead.Stop();
     TryLockClamps();
     state = DrillTowerState.EmergencyStopped;
 }
Exemplo n.º 3
0
        private static string DescribeState(DrillTowerState state)
        {
            switch (state)
            {
            case DrillTowerState.None: return("Initialising");

            case DrillTowerState.Stopped: return("Idle");

            case DrillTowerState.Starting: return("Starting");

            case DrillTowerState.Drilling: return("Drilling");

            case DrillTowerState.Retrieving: return("Retrieving");

            case DrillTowerState.Stopping: return("Stopping");

            case DrillTowerState.EmergencyStopped: return("EMERGENCY STOP");
            }
            return("");
        }
Exemplo n.º 4
0
        /// <summary>
        /// Returns true if an operation is in progress and should regularly be updated.
        /// </summary>
        /// <returns></returns>
        public bool Run()
        {
            EnsureInitialised();

            if (!IsDrillViable())
            {
                EmergencyStop();
                return(false);
            }

            pistonGroup.UpdateState();
            drillHead.UpdateState();
            clampGroup.UpdateState();
            lights.UpdateState();

            switch (state)
            {
            case DrillTowerState.Starting:
                if (!clampGroup.IsViable)
                {
                    EmergencyStop();
                    return(false);
                }
                // If possible, lock the drill head while we spin up.
                pistonGroup.Stop();
                TryLockClamps();

                if (IsRotorRunning() && drillHead.IsDrilling)
                {
                    // Drill is operating. Prepare to extend.
                    state = DrillTowerState.Drilling;
                }
                StartRotor();
                drillHead.Start();
                return(true);

            case DrillTowerState.Drilling:
                if (!IsRotorRunning() || !drillHead.IsDrilling)
                {
                    // Should not be in this state.
                    EmergencyStop();
                    return(false);
                }
                if (!TryUnlockClamps())
                {
                    // Unable to release the clamps.
                    EmergencyStop();
                    return(false);
                }
                pistonGroup.Extend();
                return(true);

            case DrillTowerState.Retrieving:
                if (TryLockClamps())
                {
                    pistonGroup.Stop();
                    state = DrillTowerState.Stopping;
                    return(true);
                }
                pistonGroup.Retract();
                return(true);

            case DrillTowerState.Stopping:
                pistonGroup.Stop();
                if (!TryLockClamps())
                {
                    return(true);
                }

                StopRotor();
                drillHead.Stop();
                if (!IsRotorRunning())
                {
                    state = DrillTowerState.Stopped;
                    return(true);
                }
                return(true);

            case DrillTowerState.Stopped:
                pistonGroup.Stop();
                StopRotor();
                drillHead.Stop();
                return(false);

            case DrillTowerState.EmergencyStopped:
            default:
                EmergencyStop();
                return(false);
            }
        }
Exemplo n.º 5
0
 public void StopDrilling()
 {
     state = DrillTowerState.Retrieving;
 }
Exemplo n.º 6
0
 public void StartDrilling()
 {
     state = DrillTowerState.Starting;
 }