예제 #1
0
        private bool verifyAndCompileIfStatement(string v)
        {
            if (Regex.Matches(v, ifPattern).Count != 1)
            {
                return(false);
            }

            ConditionalDirections direction = getConditionalDirectionFromCodeLine(v);
            ConditionalLights     led       = getLedFromCodeLine(v);
            ActuatorState         state     = getLedStateFromCodeLine(v);

            ConditionalCmnds.Add(new ConditionalLightCommand(direction, led, state));

            return(true);
        }
예제 #2
0
    private static ActuatorState GetActuatorState(int joystick, Actuator actuator, ActuatorState oldState)
    {
        ActuatorState newState = oldState;

        float inputValue;
        bool  inputButton;
        bool  inputDown;
        bool  inputUp;

        if (actuator.inputIsAxis)
        {
            string axisName = InputAxisNames[joystick, actuator.inputAxis];
            float  rawValue = Input.GetAxisRaw(axisName);
            if (actuator.inputFalseZero && !newState.handledFalseZero)
            {
                if (Mathf.Approximately(rawValue, 0f))
                {
                    rawValue = actuator.inputMin;
                }
                else
                {
                    newState.handledFalseZero = true;
                }
            }
            inputValue  = Mathf.InverseLerp(actuator.inputMin, actuator.inputMax, rawValue);
            inputButton = (inputValue >= 0.75f);
            inputDown   = false;
            inputUp     = false;
        }
        else
        {
            string keyName  = InputButtonKeyNames[joystick, actuator.inputButton];
            bool   rawValue = Input.GetKey(keyName);
            inputValue  = rawValue ? actuator.inputMax : actuator.inputMin;
            inputButton = rawValue;
            inputDown   = Input.GetKeyDown(keyName);
            inputUp     = Input.GetKeyUp(keyName);
        }

        // FIXME - handle dead zone
        // return Mathf.InverseLerp(config.deadZone, 1,  Mathf.Abs(value)) * Mathf.Sign(value);
        newState.axis       = Mathf.Lerp(actuator.outputMin, actuator.outputMax, inputValue);
        newState.button     = inputButton;
        newState.buttonDown = inputDown;
        newState.buttonUp   = inputUp;

        return(newState);
    }
예제 #3
0
        private ActuatorState getLedStateFromCodeLine(string v)
        {
            ActuatorState state = ActuatorState.Off;

            MatchCollection matchedValues = Regex.Matches(v, LedStatePattern);

            if (matchedValues.Count != 1)
            {
                return(state);
            }

            Enum.TryParse(matchedValues[0].Value, out state);

            if (matchedValues[0].Value == "Loop")
            {
                state = ActuatorState.Looping;
            }

            return(state);
        }
        public void OnUpdateActuatorData(ActuatorState state, String actuatorDuration)
        {
            try
            {
                _incubatorManager.State = state;

                buttonStartTilt.IsEnabled = !(state == ActuatorState.Paused);

                if (state != ActuatorState.Paused)
                {
                    if (state == ActuatorState.Unknown || state == ActuatorState.Stopped)
                    {
                        ActuatorButtonText = "Démarrer l'inclinaison";
                    }
                    else
                    {
                        ActuatorButtonText = "Arrêter l'inclinaison";
                    }

                    labelTilt.Content = "[ " + actuatorDuration + " ] ";
                    labelTilt.Foreground = Brushes.Black;
                    buttonOpenActuator.IsEnabled = true;
                    buttonCloseActuator.IsEnabled = true;

                    switch (state)
                    {
                        case ActuatorState.Open:
                            {
                                labelTilt.Foreground = Brushes.OrangeRed;
                                labelTilt.Content += "Incliné à gauche";
                            }
                            break;
                        case ActuatorState.Close:
                            {
                                labelTilt.Foreground = Brushes.OrangeRed;
                                labelTilt.Content += "Incliné à droite";
                            }
                            break;
                        case ActuatorState.Opening:
                            {
                                labelTilt.Foreground = Brushes.Green;
                                labelTilt.Content += "Inclinaison vers la gauche...";
                                buttonOpenActuator.IsEnabled = false;
                                buttonCloseActuator.IsEnabled = false;
                            }
                            break;
                        case ActuatorState.Closing:
                            {
                                labelTilt.Foreground = Brushes.Green;
                                labelTilt.Content += "Inclinaison vers la droite...";
                                buttonOpenActuator.IsEnabled = false;
                                buttonCloseActuator.IsEnabled = false;
                            }
                            break;
                        case ActuatorState.Stopped:
                            labelTilt.Content += "Inclinaison arrêté";
                            break;
                        case ActuatorState.Unknown:
                            labelTilt.Content += "Inclinaison inconnue";
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
 internal ConditionalLightView(Level3ViewModel dataContext, ConditionalDirections direction, ConditionalLights light, ActuatorState state)
 {
     InitializeComponent();
     DataContext = new ConditionalLightViewModel(dataContext, direction, light, state);
 }
 public void Continue()
 {
     if (_actuatorState == ActuatorState.Paused)
     {
         _actuatorState = _actuatorPreviousState;
     }
 }
 public void Pause()
 {
     _actuatorState = ActuatorState.Paused;
     SetOutputState();
 }
        public void ManageState()
        {
            if (_duration > TimeSpan.Zero && _actuatorState != ActuatorState.Paused)
            {
                _duration = _duration.Subtract(new TimeSpan(0, 0, 1));
            }

            if (_actuatorCommand == ActuatorCommand.Start)
            {
                if (_autoModeReady)
                {
                    if (_actuatorState == ActuatorState.Closing)
                    {
                        if (_duration == TimeSpan.Zero)
                        {
                            //Start waiting period
                            _duration = new TimeSpan(TILT_INTERVAL, 0, 0);
                            _actuatorState = ActuatorState.Close;
                        }
                    }
                    else if (_actuatorState == ActuatorState.Open || _actuatorState == ActuatorState.Close || _actuatorState == ActuatorState.Stopped)
                    {
                        if (_duration == TimeSpan.Zero)
                        {
                            //Start moving actuator
                            _duration = new TimeSpan(0, 0, ACTUARTOR_DELAY);

                            if (_actuatorState == ActuatorState.Open)
                            {
                                _actuatorState = ActuatorState.Closing;
                            }
                            else if (_actuatorState == ActuatorState.Close)
                            {
                                _actuatorState = ActuatorState.Opening;
                            }
                        }
                    }
                    else if (_actuatorState == ActuatorState.Opening)
                    {
                        if (_duration == TimeSpan.Zero)
                        {
                            //Start waiting period
                            _duration = new TimeSpan(TILT_INTERVAL, 0, 0);
                            _actuatorState = ActuatorState.Open;
                        }
                    }
                    else if (_actuatorState == ActuatorState.Paused)
                    {
                        _actuatorState = _actuatorPreviousState;
                    }
                }
                else
                {
                    if (_duration == TimeSpan.Zero)
                    {
                        if (_autoModeInitializing)
                        {
                            //Initializing actuator completed
                            _autoModeReady = true;
                            _autoModeInitializing = false;
                        }
                        else
                        {
                            //Start initializing actuator
                            _duration = new TimeSpan(0, 0, ACTUARTOR_DELAY);

                            _autoModeInitializing = true;
                            _actuatorState = ActuatorState.Closing;
                        }
                    }
                }
            }
            else if (_actuatorCommand == ActuatorCommand.Stop)
            {
                _actuatorState = ActuatorState.Stopped;
                _duration = TimeSpan.Zero;
                _autoModeReady = false;
                _autoModeInitializing = false;
            }
            else if (_actuatorCommand == ActuatorCommand.Pause)
            {
                _actuatorState = ActuatorState.Paused;
            }

            if (_actuatorPreviousState != _actuatorState)
            {
                SetOutputState();

                if (_actuatorState != ActuatorState.Paused)
                {
                    _actuatorPreviousState = _actuatorState;
                }
            }
        }
예제 #9
0
 public ConditionalLightViewModel(Level3ViewModel parent, ConditionalDirections direction, ConditionalLights light, ActuatorState state)
 {
     _parent            = parent;
     ConditionalCommand = new ConditionalLightCommand(direction, light, state);
     _parent.AddToConditionalCommandList(ConditionalCommand);
     ChangeState = new RelayCommand(changeState);
 }