Ejemplo n.º 1
0
 public CWiiMoteChangedEventArgs(CWiiMoteStatus ws)
 {
     WiiMoteState = ws;
 }
Ejemplo n.º 2
0
        private void _WmWiiMoteChanged(object sender, CWiiMoteChangedEventArgs args)
        {
            if (!_Active)
            {
                return;
            }

            CWiiMoteStatus ws = args.WiiMoteState;

            Point p = ws.IRState.Position;

            p.X = 1023 - p.X;

            EGesture gesture = _Gesture.GetGesture(p);
            bool     lb      = false;
            bool     rb      = gesture == EGesture.Back;

            var key = Keys.None;

            if (ws.ButtonState.A && !_ButtonStates[0])
            {
                lb = true;
            }
            else if (ws.ButtonState.B && !_ButtonStates[1])
            {
                _Gesture.SetLockPosition(p);
            }
            else if (!ws.ButtonState.B && _ButtonStates[1])
            {
                _Gesture.Reset();
            }
            else if (ws.ButtonState.Down && !_ButtonStates[2])
            {
                key = Keys.Right;
            }
            else if (ws.ButtonState.Up && !_ButtonStates[3])
            {
                key = Keys.Left;
            }
            else if (ws.ButtonState.Left && !_ButtonStates[4])
            {
                key = Keys.Down;
            }
            else if (ws.ButtonState.Right && !_ButtonStates[5])
            {
                key = Keys.Up;
            }
            else if (ws.ButtonState.Home && !_ButtonStates[6])
            {
                key = Keys.Space;
            }
            else if (ws.ButtonState.Minus && !_ButtonStates[7])
            {
                key = Keys.Subtract;
            }
            else if (ws.ButtonState.Plus && !_ButtonStates[8])
            {
                key = Keys.Add;
            }
            else if (ws.ButtonState.One && !_ButtonStates[9])
            {
                key = Keys.Enter;
            }
            else if (ws.ButtonState.Two && !_ButtonStates[10])
            {
                key = Keys.Escape;
            }

            _ButtonStates[0]  = ws.ButtonState.A;
            _ButtonStates[1]  = ws.ButtonState.B;
            _ButtonStates[2]  = ws.ButtonState.Down;
            _ButtonStates[3]  = ws.ButtonState.Up;
            _ButtonStates[4]  = ws.ButtonState.Left;
            _ButtonStates[5]  = ws.ButtonState.Right;
            _ButtonStates[6]  = ws.ButtonState.Home;
            _ButtonStates[7]  = ws.ButtonState.Minus;
            _ButtonStates[8]  = ws.ButtonState.Plus;
            _ButtonStates[9]  = ws.ButtonState.One;
            _ButtonStates[10] = ws.ButtonState.Two;


            if (key != Keys.None)
            {
                AddKeyEvent(new SKeyEvent(ESender.WiiMote, false, false, false, false, char.MinValue, key));
            }

            //mouse events
            const float reducing = 0.15f;
            const float factor   = 1f / (1f - reducing * 2f);
            float       rx       = ((p.X / 1024f) - reducing) * factor;
            float       ry       = ((p.Y / 768f) - reducing) * factor;

            var x = (int)(rx * CSettings.RenderW);
            var y = (int)(ry * CSettings.RenderH);


            bool lbh = !lb && ws.ButtonState.A;

            int wheel = 0;

            if (gesture == EGesture.ScrollUp)
            {
                wheel = -1;
            }
            if (gesture == EGesture.ScrollDown)
            {
                wheel = 1;
            }

            if (!lb && !rb && (p.X != _OldPosition.X || p.Y != _OldPosition.Y))
            {
                AddMouseEvent(new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, false, false, false, wheel, lbh, false, false, false));
            }
            else if (lb || rb)
            {
                AddMouseEvent(new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, lb, false, rb, wheel, false, false, false, false));
            }

            _OldPosition.X = p.X;
            _OldPosition.Y = p.Y;
        }