public CWiiMoteChangedEventArgs(CWiiMoteStatus ws) { WiiMoteState = ws; }
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; }