Esempio n. 1
0
 public override void MouseButtonClicked(MouseInputAction inputAction, bool inside)
 {
     if (inside)
     {
         OnButtonPressed?.Invoke(inputAction);
     }
 }
Esempio n. 2
0
    static int set_EventOnPointerEnter(IntPtr L)
    {
        try
        {
            OnButtonPressed obj  = (OnButtonPressed)ToLua.CheckObject(L, 1, typeof(OnButtonPressed));
            EventObject     arg0 = null;

            if (LuaDLL.lua_isuserdata(L, 2) != 0)
            {
                arg0 = (EventObject)ToLua.ToObject(L, 2);
            }
            else
            {
                return(LuaDLL.luaL_throw(L, "The event 'OnButtonPressed.EventOnPointerEnter' can only appear on the left hand side of += or -= when used outside of the type 'OnButtonPressed'"));
            }

            if (arg0.op == EventOp.Add)
            {
                OnButtonPressed.PointerEvent ev = (OnButtonPressed.PointerEvent)arg0.func;
                obj.EventOnPointerEnter += ev;
            }
            else if (arg0.op == EventOp.Sub)
            {
                OnButtonPressed.PointerEvent ev = (OnButtonPressed.PointerEvent)arg0.func;
                obj.EventOnPointerEnter -= ev;
            }

            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e));
        }
    }
Esempio n. 3
0
 private void CheckButtonPressed(XInputControllerState state)
 {
     if (state.State.Gamepad.Buttons != GamepadButtonFlags.None)
     {
         OnButtonPressed?.Invoke(state);
     }
 }
 public void CheckButton()
 {
     if (IsButtonPressed())
     {
         OnButtonPressed.Invoke();
         GetNewButton();
     }
 }
Esempio n. 5
0
 public override void Update(GameTime gameTime)
 {
     base.Update(gameTime);
     if (Rectangle.Contains(MouseInput.MouseState.Position) && MouseInput.MouseState.LeftButton == ButtonState.Pressed && MouseInput.LastMouseState.LeftButton == ButtonState.Released)
     {
         OnButtonPressed?.Invoke();
     }
 }
Esempio n. 6
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.tag == "Player")
     {
         FindObjectOfType <AudioManager>().Play("Open");
         OnButtonPressed?.Invoke(this, EventArgs.Empty);
         animator.Play("DoorButton_Pressed");
     }
 }
Esempio n. 7
0
 void Awake()
 {
     anim  = GetComponent <Animator>();
     audio = GetComponent <AudioSource>();
     Up    = ButtonUp.GetComponent <OnButtonPressed>();
     Down  = ButtonDown.GetComponent <OnButtonPressed>();
     Right = ButtonRight.GetComponent <OnButtonPressed>();
     Left  = ButtonLeft.GetComponent <OnButtonPressed>();
 }
Esempio n. 8
0
 /// <summary>
 /// Locks the button when pressed
 /// </summary>
 public void LockButton()
 {
     if (button == null)
     {
         return;
     }
     button.interactable = false;
     button.image.color  = new Color(0.08f, 0.27f, 0.48f);
     OnButtonPressed?.Invoke(txt.text);
 }
Esempio n. 9
0
    IEnumerator ButtonPressedCoroutine()
    {
        active = true;
        yield return(new WaitForSeconds(pressedTime));

        active  = false;
        pressed = false;
        anim.SetBool("Pressed", false);
        OnButtonPressed?.Invoke(id, false);
    }
Esempio n. 10
0
 public void OnPointerUp(PointerEventData eventData)
 {
     if (!_isActive)
     {
         return;
     }
     if (_isSelected == false)
     {
         _isSelected = true;
         OnButtonPressed?.Invoke();
         startButtonAnimator.SetTrigger("start");
     }
 }
Esempio n. 11
0
 private void CheckButton(int buttonId)
 {
     _bOldState = (_oldState & buttonId) == buttonId;
     _bNewState = (_state & buttonId) == buttonId;
     if (!_bOldState && _bNewState)
     {
         OnButtonPressed?.Invoke(this, buttonId);
     }
     if (_bOldState && !_bNewState)
     {
         OnButtonReleased?.Invoke(this, buttonId);
     }
 }
Esempio n. 12
0
        private void FireMouseEvents()
        {
            foreach (MouseButton button in ButtonList)
            {
                if (button == MouseButton.LEFT)
                {
                    // Button is held down
                    if (CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        OnButtonDown?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }

                    // Button is pressed once
                    if (PrevMouseState.LeftButton == ButtonState.Released &&
                        CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        OnButtonPressed?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }


                    // Button is just released once
                    if (PrevMouseState.LeftButton == ButtonState.Pressed &&
                        CurrentMouseState.LeftButton == ButtonState.Released)
                    {
                        OnButtonUp?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }
                }
                else if (button == MouseButton.RIGHT)
                {
                    // Button is held down
                    if (CurrentMouseState.RightButton == ButtonState.Pressed)
                    {
                        OnButtonDown?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }

                    // Button is pressed once
                    if (PrevMouseState.RightButton == ButtonState.Released &&
                        CurrentMouseState.RightButton == ButtonState.Pressed)
                    {
                        OnButtonPressed?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }

                    // Button is just released
                    if (PrevMouseState.RightButton == ButtonState.Pressed &&
                        CurrentMouseState.RightButton == ButtonState.Released)
                    {
                        OnButtonUp?.Invoke(this, new MouseEventArgs(button, CurrentMouseState, PrevMouseState));
                    }
                }
            }
        }
Esempio n. 13
0
 static int OnPointerEnter(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 2);
         OnButtonPressed obj = (OnButtonPressed)ToLua.CheckObject <OnButtonPressed>(L, 1);
         UnityEngine.EventSystems.PointerEventData arg0 = (UnityEngine.EventSystems.PointerEventData)ToLua.CheckObject <UnityEngine.EventSystems.PointerEventData>(L, 2);
         obj.OnPointerEnter(arg0);
         return(0);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
        private void ReadButtons()
        {
            var previousButton = Buttons.None;

            while (true)
            {
                var currentButton = ButtonState;

                if (currentButton != previousButton)
                {
                    OnButtonPressed?.Invoke(this, ButtonState);
                    previousButton = currentButton;
                }
                Thread.Sleep(DEBOUNCE);
            }
        }
Esempio n. 15
0
    public static void Display(string text, string midOption, OnButtonPressed midPressed)
    {
        main.gameObject.SetActive(true);

        main.Erase();
        main.boxContent = text;
        main.DisplayCharacter();

        //main.leftText.text = leftOption;
        main.midText.text = midOption;
        //main.rightText.text = rightOption;

        //main.onLeftButtonPressed = leftPressed;
        main.onMidButtonPressed = midPressed;
        //main.onRightButtonPressed = rightPressed;
    }
Esempio n. 16
0
    private void Awake()
    {
        _blockButton.onClick.AddListener(delegate
        {
            OnButtonPressed?.Invoke(ButtonTypes.BlockButton);
        });

        _homeButton.onClick.AddListener(delegate
        {
            OnButtonPressed?.Invoke(ButtonTypes.HomeButton);
        });

        _gridButton.onClick.AddListener(delegate
        {
            OnButtonPressed?.Invoke(ButtonTypes.GridButton);
        });
    }
Esempio n. 17
0
        private void processButtons(bool[] buttonsPressed)
        {
            // count the buttons that have are pressed in this frame
            int buttonCount = buttonsPressed.Count(true);

            // if no button is pressed, do nothing and return
            if (buttonCount == 0)
            {
                return;
            }

            // if there are more than one buttons pressed: automatic failure and return
            if (buttonCount > 1)
            {
                Log.Verbose("Trigger: {0} buttons pressed at once, resetting sequence.", buttonCount);
                OnButtonPressed?.Invoke(this, new ButtonPressedEventArgs(-1, scenario.CurrentSequenceIndex, false));
                return;
            }

            // exactly one button pressed: process the pressed button
            int  sequenceIndex = scenario.CurrentSequenceIndex;
            int  buttonIndex   = Array.IndexOf(buttonsPressed, true);
            bool correct       = scenario.ProcessButtonPress(buttonIndex);

            // output for correct button
            if (correct)
            {
                if (scenario.SequenceCompleted) // game finished
                {
                    Log.Verbose("Trigger: Correct button pressed, sequence completed.");
                }
                else
                {
                    Log.Verbose("Trigger: Correct button pressed, sequence index advanced to {0}", scenario.CurrentSequenceIndex);
                }
            }

            // output for incorrect button and restart sequence
            if (!correct)
            {
                Log.Verbose("Trigger: Wrong button pressed, resetting sequence.");
                scenario.Restart();
            }

            OnButtonPressed?.Invoke(this, new ButtonPressedEventArgs(buttonIndex, sequenceIndex, correct));
        }
        internal void InitGamePadHandlers()
        {
            _gamePadHandlers = new GamePadHandler[MaxGamePads];
            for (int i = 0; i < MaxGamePads; i++)
            {
                var handle = _gamePadHandlers[i] = new GamePadHandler(i);

                // Redirect Events.
                handle.OnConnection += () => OnConnection?.Invoke(handle);
                handle.OnDisconnect += () => OnDisconnected?.Invoke(handle);

                handle.OnButtonDown     += (button, value) => OnButtonDown?.Invoke(handle, button, value);
                handle.OnButtonUp       += (button, value) => OnButtonUp?.Invoke(handle, button, value);
                handle.OnButtonPressed  += (button, value) => OnButtonPressed?.Invoke(handle, button, value);
                handle.OnButtonClicked  += (button, value) => OnButtonClicked?.Invoke(handle, button, value);
                handle.OnButtonReleased += (button, value) => OnButtonReleased?.Invoke(handle, button, value);
            }
        }
Esempio n. 19
0
    void Update()
    {
        var      catCollider = Physics2D.OverlapCircle(transform.position, 0.1f, playerMask);
        CongaCat cat         = null;

        if (catCollider)
        {
            cat = catCollider.GetComponent <CongaCat>();
        }
        bool isChonker = cat && cat.Type == CatType.Chonk;

        if (!isChonker && !active && pressed)
        {
            StartCoroutine(ButtonPressedCoroutine());
        }
        else if (isChonker && !pressed)
        {
            pressed = true;
            anim.SetBool("Pressed", true);
            OnButtonPressed?.Invoke(id, true);
        }
    }
        private void RunNotifyButtonPressed(int pins)
        {
            bool isAdded = true;
            var  changed = pins - _pinsChanged;

            if (changed < 0)
            {
                isAdded  = false;
                changed *= -1;
            }

            for (int i = 16; i > 0; i--)
            {
                var pin = 1 << i;
                if (changed >= pin)
                {
                    OnButtonPressed?.Invoke((TFTWING_BUTTON)pin, isAdded);
                    changed -= pin;
                }
            }
            _pinsChanged = pins;
        }
Esempio n. 21
0
        private void ButtonPressed(ButtonType buttonType, InputAction.CallbackContext context)
        {
            CurrentInputSource = GetInputSource(context);

            OnButtonPressed?.Invoke(buttonType, CurrentInputSource);
        }
Esempio n. 22
0
 protected virtual void PressButton(InputButton inputButton)
 {
     OnButtonPressed?.Invoke(inputButton);
 }
Esempio n. 23
0
 public void ButtonPressed()
 {
     OnButtonPressed?.Invoke();
 }
 public void Click()
 {
     action?.Invoke();
     OnButtonPressed?.Invoke(this);
 }
Esempio n. 25
0
 public static void InvokeButtonPress(bool action, XR_Enum.Hand hand, XR_Enum.FeatureUsageButton usageButton)
 {
     //Debug.Log(hand.ToString() + " InvokeButtonPress " + action + " UsageType: " + usageButton);
     OnButtonPressed?.Invoke(action, hand, usageButton);
 }
Esempio n. 26
0
 public void registerButtonPress(OnButtonPressed function)
 {
     onButtonPressed += function;
 }
Esempio n. 27
0
    override public void OnGUI(Rect rect)
    {
        //@@@@@@@@@@@@@@@@@@@@@@@
        //Show notice if no items there.
        if (_items.Count == 0)
        {
            EditorGUILayout.LabelField("");
            EditorGUILayout.LabelField("No elements here :(. Either your diagram is empty, or there's some association problem.",
                                       EditorStyles.boldLabel);
            return;
        }

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Title.
        EditorGUILayout.LabelField("Code Generator", EditorStyles.boldLabel);
        EditorGUILayout.BeginHorizontal();

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Set general UI properties.
        EditorGUIUtility.labelWidth = 70;

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Place the "Search" text field.
        _filterValue = EditorGUILayout.TextField("Search:", _filterValue);
        if (GUILayout.Button("Generate", GUILayout.Width(100)))
        {
            Debug.Log("Generating!");
            //Send selected items via event.
            var selectedItems = new List <SearchListItem>();
            foreach (SearchListItem sli in _items)
            {
                if (sli.Checked)
                {
                    selectedItems.Add(sli);
                }
            }
            OnButtonPressed?.Invoke(selectedItems);
            editorWindow.Close();
        }

        EditorGUILayout.EndHorizontal();
        DrawLineInInspector(Color.black, 2, 10);

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Create Tag Buttons.
        EditorGUILayout.BeginHorizontal();
        int buttonsPerRow = (int)Math.Floor((double)Screen.width / 65);
        int currentRow    = 0;
        int currentButton = 1;

        //Create Tag filter buttons.
        foreach (ITagProvider node in _tags)
        {
            node.Checked = EditorGUILayout.Toggle(node.Checked, GUILayout.MaxWidth(15),
                                                  GUILayout.Height(_someTagsHaveImages ? _maxTagHeight : 15));
            GUIContent buttonContent = new GUIContent(node.Aspect);
            buttonContent.text    = "";
            buttonContent.tooltip = (node.Checked ? "Un-select" : "Select") + " " + node.Name + "s";
            if (GUILayout.Button(buttonContent, GUILayout.MaxWidth(30), GUILayout.Height(30)))
            {
                node.Checked = !node.Checked;
            }

            EditorGUILayout.Space(5);

            //Exceeded number of buttons per row?
            if (currentButton++ > buttonsPerRow)
            {
                //Align everything to left.
                GUILayout.FlexibleSpace();
                //New row;
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
                currentButton = 1;
                currentRow++;
            }
        }

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Was any Tag filtering done?
        bool anyTagChecked = false;

        foreach (SearchListItem item in _items)
        {
            //More items may have the same TagProvider, and its Checked property is controlled above, in node.Checked.
            if (item.TagProvider != null && item.TagProvider.Checked)
            {
                anyTagChecked = true;
                break;
            }
        }

        //@@@@@@@@@@@@@@@@@@@@@@@
        //Mass-selection buttons.

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Select:", GUILayout.Width(69));
        if (GUILayout.Button("All", GUILayout.Width(70)))
        {
            foreach (SearchListItem item in _items)
            {
                if (ShouldBeVisible(item, anyTagChecked))
                {
                    item.Checked = true;
                }
            }
        }

        if (GUILayout.Button("None", GUILayout.Width(70)))
        {
            foreach (SearchListItem item in _items)
            {
                if (ShouldBeVisible(item, anyTagChecked))
                {
                    item.Checked = false;
                }
            }
        }

        if (GUILayout.Button("Inverse", GUILayout.Width(70)))
        {
            foreach (SearchListItem item in _items)
            {
                if (ShouldBeVisible(item, anyTagChecked))
                {
                    item.Checked = !item.Checked;
                }
            }
        }

        EditorGUILayout.EndHorizontal();

        //@@@@@@@@@@@@@@@@@@@@@@@
        //List of items.

        //Since the above UI element the last before the Scroll View, get its rect. We'll need it to determine scroll view height.
        if (Event.current.type == EventType.Repaint)
        {
            lastRectBeforeScrollView = GUILayoutUtility.GetLastRect();
        }
        float scrollViewHeight = _height - (lastRectBeforeScrollView.y + lastRectBeforeScrollView.height) - 10;

        DrawLineInInspector(Color.black, 1, 5);

        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(Screen.width - 10), GUILayout.Height(scrollViewHeight));

        foreach (SearchListItem item in _items)
        {
            if (!ShouldBeVisible(item, anyTagChecked))
            {
                continue;
            }

            EditorGUILayout.BeginHorizontal();

            //Add Image, if any.
            if (item.TagProvider != null && item.TagProvider.Aspect != null)
            {
                GUILayout.Box(item.TagProvider.Aspect);
            }
            //If there's no image, but other items have images, add a placeholder.
            else if (_someListItemsHaveTagsWithImages)
            {
                GUILayout.Box(new Texture2D(_maxListItemTagWidth, _maxListItemTagHeight));
            }

            //Configure Checkbox.
            List <GUILayoutOption> toggleLayoutOptions = new List <GUILayoutOption>();
            toggleLayoutOptions.Add(GUILayout.MaxWidth(15));
            //If we have images, make sure the checkbox is aligned with them.
            if (_someListItemsHaveTagsWithImages)
            {
                toggleLayoutOptions.Add(GUILayout.Height(_maxListItemTagHeight + (_maxListItemTagHeight / 2)));
            }
            //Add Checkbox.
            item.Checked = EditorGUILayout.Toggle(item.Checked, toggleLayoutOptions.ToArray());

            //Configure Label.
            List <GUILayoutOption> labelLayoutOptions = new List <GUILayoutOption>();
            //If we have images, make sure the label is aligned with them.
            if (_someListItemsHaveTagsWithImages)
            {
                labelLayoutOptions.Add(GUILayout.Height(_maxListItemTagHeight + (_maxListItemTagHeight / 2)));
            }
            //Add Label.
            EditorGUILayout.LabelField(item.Name, labelLayoutOptions.ToArray());

            //Next line!
            EditorGUILayout.EndHorizontal();
        }

        EditorGUILayout.EndScrollView();
    }
Esempio n. 28
0
        public static void InvokeEvents()
        {
            if (OnLeftButtonDown != null && IsButtonDown(MouseButton.Left))
            {
                OnLeftButtonDown.Invoke(currentState);
            }
            if (OnLeftButtonPressed != null && IsButtonPressed(MouseButton.Left))
            {
                OnLeftButtonPressed.Invoke(currentState);
            }
            if (OnLeftButtonReleased != null && IsButtonReleased(MouseButton.Left))
            {
                OnLeftButtonReleased.Invoke(currentState);
            }

            if (OnRightButtonDown != null && IsButtonDown(MouseButton.Right))
            {
                OnRightButtonDown.Invoke(currentState);
            }
            if (OnRightButtonPressed != null && IsButtonPressed(MouseButton.Right))
            {
                OnRightButtonPressed.Invoke(currentState);
            }
            if (OnRightButtonReleased != null && IsButtonReleased(MouseButton.Right))
            {
                OnRightButtonReleased.Invoke(currentState);
            }

            if (OnMiddleButtonDown != null && IsButtonDown(MouseButton.Middle))
            {
                OnMiddleButtonDown.Invoke(currentState);
            }
            if (OnMiddleButtonPressed != null && IsButtonPressed(MouseButton.Middle))
            {
                OnMiddleButtonPressed.Invoke(currentState);
            }
            if (OnMiddleButtonReleased != null && IsButtonReleased(MouseButton.Middle))
            {
                OnMiddleButtonReleased.Invoke(currentState);
            }

            if (OnXButton1Down != null && IsButtonDown(MouseButton.XButton1))
            {
                OnXButton1Down.Invoke(currentState);
            }
            if (OnXButton1Pressed != null && IsButtonPressed(MouseButton.XButton1))
            {
                OnXButton1Pressed.Invoke(currentState);
            }
            if (OnXButton1Released != null && IsButtonReleased(MouseButton.XButton1))
            {
                OnXButton1Released.Invoke(currentState);
            }

            if (OnXButton2Down != null && IsButtonDown(MouseButton.XButton2))
            {
                OnXButton2Down.Invoke(currentState);
            }
            if (OnXButton2Pressed != null && IsButtonPressed(MouseButton.XButton2))
            {
                OnXButton2Pressed.Invoke(currentState);
            }
            if (OnXButton2Released != null && IsButtonReleased(MouseButton.XButton2))
            {
                OnXButton2Released.Invoke(currentState);
            }

            if (OnButtonDown != null && IsButtonDown(MouseButton.Any))
            {
                OnButtonDown.Invoke(currentState, GetDownButtons());
            }
            if (OnButtonPressed != null && IsButtonPressed(MouseButton.Any))
            {
                OnButtonPressed.Invoke(currentState, GetPressedButtons());
            }
            if (OnButtonReleased != null && IsButtonReleased(MouseButton.Any))
            {
                OnButtonReleased.Invoke(currentState, GetReleasedButtons());
            }

            if (OnMouseWheelUp != null && IsMouseWheelUp())
            {
                OnMouseWheelUp.Invoke(currentState);
            }
            if (OnMouseWheelDown != null && IsMouseWheelDown())
            {
                OnMouseWheelDown.Invoke(currentState);
            }

            if (OnMouseMove != null && IsMouseMoving())
            {
                OnMouseMove.Invoke(currentState, GetMoveDirection());
            }
        }
Esempio n. 29
0
 public void ButtonPressed(Location location, ButtonEvent buttonEvent)
 {
     OnButtonPressed?.Invoke(this, Tuple.Create(location, buttonEvent));
 }
Esempio n. 30
0
        private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (_isRunning)
            {
                return;
            }

            _isRunning = true;

            try {
                Execute(OpCode.QUERY_PACKET, 100);

                _buffer.AddRange(IO.ReadBytes(IO.BytesToRead));

                while (_buffer.Count >= 80 && _timer != null)
                {
                    var data = _buffer.Take(80).ToArray();

                    _buffer.RemoveRange(0, 80);

                    var sensorData = new SensorData(data);

                    ARC.Scripting.VariableManager.SetVariable("$RoombaAngle", sensorData.Angle);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaBatteryCapacity", sensorData.BatteryCapacity);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaBatteryCharge", sensorData.BatteryCharge);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaBumpLeft", sensorData.BumpLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaBumpRight", sensorData.BumpRight);

                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonClean", sensorData.ButtonClean);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonClock", sensorData.ButtonClock);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonDay", sensorData.ButtonDay);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonDock", sensorData.ButtonDock);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonHour", sensorData.ButtonHour);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonMinute", sensorData.ButtonMinute);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonSchedule", sensorData.ButtonSchedule);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaButtonSpot", sensorData.ButtonSpot);

                    bool btnState = sensorData.ButtonState > 0;

                    if (btnState && !_lastButtonState)
                    {
                        OnButtonPressed?.Invoke(this, btnState);
                    }

                    _lastButtonState = btnState;

                    ARC.Scripting.VariableManager.SetVariable("$RoombaChargingSourceHomeBase", sensorData.ChargingSourceHomeBase);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaChargingSourceCharger", sensorData.ChargingSourceInternalCharger);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaChargingState", sensorData.ChargingState);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffFrontLeft", sensorData.CliffFrontLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffFrontLeftSignal", sensorData.CliffFrontLeftSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffFrontRight", sensorData.CliffFrontRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffFrontRightSignal", sensorData.CliffFrontRightSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffLeft", sensorData.CliffLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffLeftSignal", sensorData.CliffLeftSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffRight", sensorData.CliffRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCliffRightSignal", sensorData.CliffRightSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaCurrent", sensorData.Current);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaDirtDetect", sensorData.DirtDetect);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaDistance", sensorData.Distance);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaInfraredCharacterLeft", sensorData.InfraredCharacterLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaInfraredCharacterOmni", sensorData.InfraredCharacterOmni);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaInfraredCharacterRight", sensorData.InfraredCharacterRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLeftEncoderCounts", sensorData.LeftEncoderCounts);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLeftMotorCurrent", sensorData.LeftMotorCurrent);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperCenterLeft", sensorData.LightBumperCenterLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperCenterLeftSignal", sensorData.LightBumperCenterLeftSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperCenterRight", sensorData.LightBumperCenterRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperCenterRightSignal", sensorData.LightBumperCenterRightSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperFrontLeft", sensorData.LightBumperFrontLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperFrontLeftSignal", sensorData.LightBumperFrontLeftSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperFrontRight", sensorData.LightBumperFrontRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperFrontRightSignal", sensorData.LightBumperFrontRightSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperLeft", sensorData.LightBumperLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperLeftSignal", sensorData.LightBumperLeftSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperRight", sensorData.LightBumperRight);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaLightBumperRightSignal", sensorData.LightBumperRightSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaMainBrushMotorCurrent", sensorData.MainBrushMotorCurrent);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaNumberOfStreamPackets", sensorData.NumberOfStreamPackets);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaOIMode", sensorData.OIMode);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaOverCurrentLeftWheel", sensorData.OverCurrentLeftWheel);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaOverCurrentMainBrush", sensorData.OverCurrentMainBrush);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaOverCurrentRightWheel", sensorData.OverCurrentRightWheel);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaOverCurrentSideBrush", sensorData.OverCurrentSideBrush);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRequestedLeftVelocity", sensorData.RequestedLeftVelocity);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRequestedRadius", sensorData.RequestedRadius);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRequestedRightVelocity", sensorData.RequestedRightVelocity);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRequestedVelocity", sensorData.RequestedVelocity);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRightEncoderCounts", sensorData.RightEncoderCounts);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaRightMotorCurrent", sensorData.RightMotorCurrent);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaSideBrushMotorCurrent", sensorData.SideBrushMotorCurrent);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaSongNumber", sensorData.SongNumber);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaSongPlaying", sensorData.SongPlaying);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaStatis", sensorData.Statis);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaTemperature", sensorData.Temperature);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaVirtualWall", sensorData.VirtualWall);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaVoltage", Math.Round((decimal)sensorData.Voltage / 1000, 2));
                    ARC.Scripting.VariableManager.SetVariable("$RoombaWall", sensorData.Wall);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaWallSignal", sensorData.WallSignal);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaWheelDropLeft", sensorData.WheelDropLeft);
                    ARC.Scripting.VariableManager.SetVariable("$RoombaWheelDropRight", sensorData.WheelDropRight);

                    //if (_sendNMS) {

                    //  var distance = ((sensorData.RightEncoderCounts + sensorData.LeftEncoderCounts) / 2d) / 25.8d;

                    //  ARC.MessagingService.Navigation2DV1.Messenger.UpdateLocation(
                    //      (int)EZ_B.Functions.DegX2(distance, sensorData.Angle),
                    //      (int)EZ_B.Functions.DegY2(distance, sensorData.Angle),
                    //      255,
                    //      (int)delta);
                    //}

                    _streamPacketCnt++;

                    OnStreamPacketCnt?.Invoke(this, _streamPacketCnt);

                    sensorData = null;
                }
            } catch (Exception ex) {
                OnError?.Invoke(this, ex);

                StopStreaming();
            } finally {
                _isRunning = false;
            }
        }