diff --git a/Source/OpenTK/Input/GamePad.cs b/Source/OpenTK/Input/GamePad.cs new file mode 100644 index 00000000..02c6d954 --- /dev/null +++ b/Source/OpenTK/Input/GamePad.cs @@ -0,0 +1,46 @@ + #region License + // + // The Open Toolkit Library License + // + // Copyright (c) 2006 - 2009 the Open Toolkit library. + // + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to deal + // in the Software without restriction, including without limitation the rights to + // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + // the Software, and to permit persons to whom the Software is furnished to do + // so, subject to the following conditions: + // + // The above copyright notice and this permission notice shall be included in all + // copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + // OTHER DEALINGS IN THE SOFTWARE. + // + #endregion + +using System; + +namespace OpenTK.Input +{ + /// + /// Provides access to GamePad devices. + /// + public class GamePad + { + #region Constructors + + static GamePad() + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/Source/OpenTK/Input/GamePadState.cs b/Source/OpenTK/Input/GamePadState.cs new file mode 100644 index 00000000..ed2d2fd0 --- /dev/null +++ b/Source/OpenTK/Input/GamePadState.cs @@ -0,0 +1,38 @@ + #region License + // + // The Open Toolkit Library License + // + // Copyright (c) 2006 - 2009 the Open Toolkit library. + // + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to deal + // in the Software without restriction, including without limitation the rights to + // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + // the Software, and to permit persons to whom the Software is furnished to do + // so, subject to the following conditions: + // + // The above copyright notice and this permission notice shall be included in all + // copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + // OTHER DEALINGS IN THE SOFTWARE. + // + #endregion + +using System; + +namespace OpenTK.Input +{ + /// + /// Encapsulates the state of a GamePad device. + /// + public struct GamePadState + { + } +} diff --git a/Source/OpenTK/Input/Keyboard.cs b/Source/OpenTK/Input/Keyboard.cs index e5b84a9d..8a99bd58 100644 --- a/Source/OpenTK/Input/Keyboard.cs +++ b/Source/OpenTK/Input/Keyboard.cs @@ -19,6 +19,7 @@ namespace OpenTK.Input static Keyboard() { + throw new NotImplementedException(); //driver = Platform.Factory.Default.CreateKeyboardDriver(); } @@ -32,7 +33,7 @@ namespace OpenTK.Input /// A structure containing the state of the keyboard device. public static KeyboardState GetState() { - throw new NotImplementedException(); + return new KeyboardState(); } /// @@ -42,7 +43,7 @@ namespace OpenTK.Input /// A structure containing the state of the keyboard device. public static KeyboardState GetState(int index) { - throw new NotImplementedException(); + return new KeyboardState(); } #endregion diff --git a/Source/OpenTK/Input/KeyboardState.cs b/Source/OpenTK/Input/KeyboardState.cs index 883e311d..acef0644 100644 --- a/Source/OpenTK/Input/KeyboardState.cs +++ b/Source/OpenTK/Input/KeyboardState.cs @@ -5,20 +5,58 @@ using System.Text; namespace OpenTK.Input { /// - /// Encapsulates the state of a keyboard device. + /// Encapsulates the state of a Keyboard device. /// public struct KeyboardState : IEquatable { - #region Constructors + #region Fields - internal KeyboardState(Key[] keys) - { - } + const int NumKeys = ((int)Key.LastKey + 16) / 32; + unsafe fixed int Keys[NumKeys]; + + #endregion + + #region Constructors #endregion #region Public Members + /// + /// Gets a indicating whether this key is down. + /// + /// The to check. + public bool IsKeyDown(Key key) + { + return ReadBit((int)key) != 0; + } + + /// + /// Gets a indicating whether this key is up. + /// + /// The to check. + public bool IsKeyUp(Key key) + { + return ReadBit((int)key) == 0; + } + + #endregion + + #region Internal Members + + internal int ReadBit(int offset) + { + return 0; + //unsafe { return (Keys[(offset / 32)] & (1 << (offset % 32))); } + } + + internal enum BitValue { Zero = 0, One = 1 } + internal void WriteBit(int offset, BitValue bit) + { + // Todo: this is completely broken. + //unsafe { Keys[offset / 32] = Keys[offset / 32] ^ (~(int)bit << (offset % 32)); } + } + #endregion #region IEquatable Members