diff options
| author | Sam C <[email protected]> | 2017-12-28 10:44:03 -0800 |
|---|---|---|
| committer | Sam C <[email protected]> | 2017-12-28 10:44:03 -0800 |
| commit | c801830bcc55380a23a32d9d11be106f4c2e50b6 (patch) | |
| tree | f330acd5433b2910daa088217e5230882a46da62 /project/vs2015.UWP/raylib.App.UWP | |
| parent | 9dbd30c44bd64fbefc78dce32128e196cb7f0da5 (diff) | |
| download | raylib-c801830bcc55380a23a32d9d11be106f4c2e50b6.tar.gz raylib-c801830bcc55380a23a32d9d11be106f4c2e50b6.zip | |
Add keyboard input
Diffstat (limited to 'project/vs2015.UWP/raylib.App.UWP')
15 files changed, 186 insertions, 15 deletions
diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/App.obj b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/App.obj Binary files differnew file mode 100644 index 00000000..1307178b --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/App.obj diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.obj b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.obj Binary files differnew file mode 100644 index 00000000..66a2b475 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.obj diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.pch b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.pch Binary files differnew file mode 100644 index 00000000..edd57b0f --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/pch.pch diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.command.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.command.1.tlog Binary files differnew file mode 100644 index 00000000..8ee21549 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.command.1.tlog diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.read.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.read.1.tlog Binary files differnew file mode 100644 index 00000000..c7e85852 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.read.1.tlog diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.write.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.write.1.tlog Binary files differnew file mode 100644 index 00000000..d9d745a6 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/CL.write.1.tlog diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.command.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.command.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.command.1.tlog @@ -0,0 +1 @@ +��
\ No newline at end of file diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.read.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.read.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.read.1.tlog @@ -0,0 +1 @@ +��
\ No newline at end of file diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.write.1.tlog b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.write.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/link.write.1.tlog @@ -0,0 +1 @@ +��
\ No newline at end of file diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/raylib.App.UWP.lastbuildstate b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/raylib.App.UWP.lastbuildstate new file mode 100644 index 00000000..a690e0ae --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/raylib.App.UWP.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.14393.0 +Release|ARM|C:\Users\Sam\Documents\GitHub\raylib\project\vs2015.UWP\| diff --git a/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/unsuccessfulbuild b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/unsuccessfulbuild new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/project/vs2015.UWP/raylib.App.UWP/ARM/Release/raylib.App.UWP.tlog/unsuccessfulbuild diff --git a/project/vs2015.UWP/raylib.App.UWP/App.cpp b/project/vs2015.UWP/raylib.App.UWP/App.cpp index 8fe9bc19..2b3c2d9a 100644 --- a/project/vs2015.UWP/raylib.App.UWP/App.cpp +++ b/project/vs2015.UWP/raylib.App.UWP/App.cpp @@ -23,14 +23,23 @@ using namespace raylibUWP; #define MAX_GAMEPADS 4 // Max number of gamepads supported #define MAX_GAMEPAD_BUTTONS 32 // Max bumber of buttons supported (per gamepad) #define MAX_GAMEPAD_AXIS 8 // Max number of axis supported (per gamepad) - static bool gamepadReady[MAX_GAMEPADS] = { false }; // Flag to know if gamepad is ready static float gamepadAxisState[MAX_GAMEPADS][MAX_GAMEPAD_AXIS]; // Gamepad axis state static char previousGamepadState[MAX_GAMEPADS][MAX_GAMEPAD_BUTTONS]; // Previous gamepad buttons state static char currentGamepadState[MAX_GAMEPADS][MAX_GAMEPAD_BUTTONS]; // Current gamepad buttons state +//#define MAX_KEYS 512 +static char previousKeyState[512] = { 0 }; // Contains previous frame keyboard state +static char currentKeyState[512] = { 0 }; // Contains current frame keyboard state + void UWP_PollInput() { + // Register previous keyboard state + for (int k = 0; k < 512; k++) previousKeyState[k] = currentKeyState[k]; + // NOTE: Since UWP updates key state while our game is processing, the current key state really is the CURRENT, most up to date key state - not the key state from last frame. + // If we register the current key state as the last key state right before processing the frame, prev and current keyboard states will nearly always be identical. + // In the future, we should either create a third cache for windows to write key changes into, or better yet, just poll the keyboard using CoreWindow's GetKeyState https://docs.microsoft.com/en-us/uwp/api/windows.ui.core.corewindow#Windows_UI_Core_CoreWindow_GetKeyState_Windows_System_VirtualKey_ + // Check if gamepads are ready for (int i = 0; i < MAX_GAMEPADS; i++) { @@ -77,9 +86,138 @@ void UWP_PollInput() gamepadAxisState[i][GAMEPAD_XBOX_AXIS_RT] = reading.RightTrigger; } } + +} + +// Stand-ins for "core.c" variables + + // NOTE(sam): We could also poll for all keys every frame using CoreWindow's GetKeyState https://docs.microsoft.com/en-us/uwp/api/windows.ui.core.corewindow#Windows_UI_Core_CoreWindow_GetKeyState_Windows_System_VirtualKey_ + // Helper to process key events +inline void ProcessKeyEvent(Windows::System::VirtualKey key, int action) +{ + using Windows::System::VirtualKey; + switch (key) + { + case VirtualKey::Space: currentKeyState[KEY_SPACE] = action; break; + case VirtualKey::Escape: currentKeyState[KEY_ESCAPE] = action; break; + case VirtualKey::Enter: currentKeyState[KEY_ENTER] = action; break; + case VirtualKey::Delete: currentKeyState[KEY_BACKSPACE] = action; break; + case VirtualKey::Right: currentKeyState[KEY_RIGHT] = action; break; + case VirtualKey::Left: currentKeyState[KEY_LEFT] = action; break; + case VirtualKey::Down: currentKeyState[KEY_DOWN] = action; break; + case VirtualKey::Up: currentKeyState[KEY_UP] = action; break; + case VirtualKey::F1: currentKeyState[KEY_F1] = action; break; + case VirtualKey::F2: currentKeyState[KEY_F2] = action; break; + case VirtualKey::F3: currentKeyState[KEY_F4] = action; break; + case VirtualKey::F4: currentKeyState[KEY_F5] = action; break; + case VirtualKey::F5: currentKeyState[KEY_F6] = action; break; + case VirtualKey::F6: currentKeyState[KEY_F7] = action; break; + case VirtualKey::F7: currentKeyState[KEY_F8] = action; break; + case VirtualKey::F8: currentKeyState[KEY_F9] = action; break; + case VirtualKey::F9: currentKeyState[KEY_F10] = action; break; + case VirtualKey::F10: currentKeyState[KEY_F11] = action; break; + case VirtualKey::F11: currentKeyState[KEY_F12] = action; break; + case VirtualKey::LeftShift: currentKeyState[KEY_LEFT_SHIFT] = action; break; + case VirtualKey::LeftControl: currentKeyState[KEY_LEFT_CONTROL] = action; break; + case VirtualKey::LeftMenu: currentKeyState[KEY_LEFT_ALT] = action; break; // NOTE: Potential UWP bug with Alt key: https://social.msdn.microsoft.com/Forums/windowsapps/en-US/9bebfb0a-7637-400e-8bda-e55620091407/unexpected-behavior-in-windowscoreuicorephysicalkeystatusismenukeydown + case VirtualKey::RightShift: currentKeyState[KEY_RIGHT_SHIFT] = action; break; + case VirtualKey::RightControl: currentKeyState[KEY_RIGHT_CONTROL] = action; break; + case VirtualKey::RightMenu: currentKeyState[KEY_RIGHT_ALT] = action; break; + case VirtualKey::Number0: currentKeyState[KEY_ZERO] = action; break; + case VirtualKey::Number1: currentKeyState[KEY_ONE] = action; break; + case VirtualKey::Number2: currentKeyState[KEY_TWO] = action; break; + case VirtualKey::Number3: currentKeyState[KEY_THREE] = action; break; + case VirtualKey::Number4: currentKeyState[KEY_FOUR] = action; break; + case VirtualKey::Number5: currentKeyState[KEY_FIVE] = action; break; + case VirtualKey::Number6: currentKeyState[KEY_SIX] = action; break; + case VirtualKey::Number7: currentKeyState[KEY_SEVEN] = action; break; + case VirtualKey::Number8: currentKeyState[KEY_EIGHT] = action; break; + case VirtualKey::Number9: currentKeyState[KEY_NINE] = action; break; + case VirtualKey::A: currentKeyState[KEY_A] = action; break; + case VirtualKey::B: currentKeyState[KEY_B] = action; break; + case VirtualKey::C: currentKeyState[KEY_C] = action; break; + case VirtualKey::D: currentKeyState[KEY_D] = action; break; + case VirtualKey::E: currentKeyState[KEY_E] = action; break; + case VirtualKey::F: currentKeyState[KEY_F] = action; break; + case VirtualKey::G: currentKeyState[KEY_G] = action; break; + case VirtualKey::H: currentKeyState[KEY_H] = action; break; + case VirtualKey::I: currentKeyState[KEY_I] = action; break; + case VirtualKey::J: currentKeyState[KEY_J] = action; break; + case VirtualKey::K: currentKeyState[KEY_K] = action; break; + case VirtualKey::L: currentKeyState[KEY_L] = action; break; + case VirtualKey::M: currentKeyState[KEY_M] = action; break; + case VirtualKey::N: currentKeyState[KEY_N] = action; break; + case VirtualKey::O: currentKeyState[KEY_O] = action; break; + case VirtualKey::P: currentKeyState[KEY_P] = action; break; + case VirtualKey::Q: currentKeyState[KEY_Q] = action; break; + case VirtualKey::R: currentKeyState[KEY_R] = action; break; + case VirtualKey::S: currentKeyState[KEY_S] = action; break; + case VirtualKey::T: currentKeyState[KEY_T] = action; break; + case VirtualKey::U: currentKeyState[KEY_U] = action; break; + case VirtualKey::V: currentKeyState[KEY_V] = action; break; + case VirtualKey::W: currentKeyState[KEY_W] = action; break; + case VirtualKey::X: currentKeyState[KEY_X] = action; break; + case VirtualKey::Y: currentKeyState[KEY_Y] = action; break; + case VirtualKey::Z: currentKeyState[KEY_Z] = action; break; + + } +} + +void App::OnKeyDown(CoreWindow ^ sender, KeyEventArgs ^ args) +{ + ProcessKeyEvent(args->VirtualKey, 1); +} + +void App::OnKeyUp(CoreWindow ^ sender, KeyEventArgs ^ args) +{ + ProcessKeyEvent(args->VirtualKey, 0); +} + +// The following functions were reimplemented for UWP from core.c +static bool GetKeyStatus(int key) +{ + return currentKeyState[key]; +} + +// The following functions were ripped from core.c +// Detect if a key has been pressed once +bool UWPIsKeyPressed(int key) +{ + bool pressed = false; + + if ((currentKeyState[key] != previousKeyState[key]) && (currentKeyState[key] == 1)) + pressed = true; + else pressed = false; + + return pressed; } -/* OTHER CODE*/ +// Detect if a key is being pressed (key held down) +bool UWPIsKeyDown(int key) +{ + if (GetKeyStatus(key) == 1) return true; + else return false; +} + +// Detect if a key has been released once +bool UWPIsKeyReleased(int key) +{ + bool released = false; + + if ((currentKeyState[key] != previousKeyState[key]) && (currentKeyState[key] == 0)) released = true; + else released = false; + + return released; +} + +// Detect if a key is NOT being pressed (key not held down) +bool UWPIsKeyUp(int key) +{ + if (GetKeyStatus(key) == 0) return true; + else return false; +} + +/* OTHER CODE */ // Helper to convert a length in device-independent pixels (DIPs) to a length in physical pixels. inline float ConvertDipsToPixels(float dips, float dpi) @@ -139,6 +277,8 @@ void App::SetWindow(CoreWindow^ window) currentDisplayInformation->DpiChanged += ref new TypedEventHandler<DisplayInformation^, Object^>(this, &App::OnDpiChanged); currentDisplayInformation->OrientationChanged += ref new TypedEventHandler<DisplayInformation^, Object^>(this, &App::OnOrientationChanged); + window->KeyDown += ref new TypedEventHandler<CoreWindow ^, KeyEventArgs ^>(this, &App::OnKeyDown); + window->KeyUp += ref new TypedEventHandler<CoreWindow ^, KeyEventArgs ^>(this, &App::OnKeyUp); // The CoreWindow has been created, so EGL can be initialized. InitWindow(800, 450, (EGLNativeWindowType)window); @@ -150,6 +290,8 @@ void App::Load(Platform::String^ entryPoint) // InitWindow() --> rlglInit() } +static int posX = 100; +static int posY = 100; // This method is called after the window becomes active. void App::Run() { @@ -157,18 +299,33 @@ void App::Run() { if (mWindowVisible) { - // Update - + // Draw BeginDrawing(); ClearBackground(RAYWHITE); - - DrawRectangle(100, 100, 400, 100, RED); + + + posX += gamepadAxisState[GAMEPAD_PLAYER1][GAMEPAD_XBOX_AXIS_LEFT_X] * 5; + posY += gamepadAxisState[GAMEPAD_PLAYER1][GAMEPAD_XBOX_AXIS_LEFT_Y] * -5; + DrawRectangle(posX, posY, 400, 100, RED); DrawLine(0, 0, GetScreenWidth(), GetScreenHeight(), BLUE); + + if(UWPIsKeyDown(KEY_S)) + { + DrawCircle(100, 100, 100, BLUE); + } + + if(UWPIsKeyPressed(KEY_A)) + { + posX -= 50; + } + EndDrawing(); + // Update + UWP_PollInput(); // TODO: Move to beginning of frame - currently at end of frame to accomodate keyboard callback CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); } diff --git a/project/vs2015.UWP/raylib.App.UWP/App.h b/project/vs2015.UWP/raylib.App.UWP/App.h index 3f27eeb0..66de6cc7 100644 --- a/project/vs2015.UWP/raylib.App.UWP/App.h +++ b/project/vs2015.UWP/raylib.App.UWP/App.h @@ -33,6 +33,10 @@ namespace raylibUWP void OnDpiChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); void OnOrientationChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); + // Input Event Handlers + void OnKeyDown(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::KeyEventArgs ^ args); + void OnKeyUp(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::KeyEventArgs ^ args); + private: bool mWindowClosed; diff --git a/project/vs2015.UWP/raylib.App.UWP/packages.config b/project/vs2015.UWP/raylib.App.UWP/packages.config index 4a5c0b55..70c3dea0 100644 --- a/project/vs2015.UWP/raylib.App.UWP/packages.config +++ b/project/vs2015.UWP/raylib.App.UWP/packages.config @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="ANGLE.WindowsStore" version="2.1.2" targetFramework="native" /> + <package id="ANGLE.WindowsStore" version="2.1.13" targetFramework="native" /> </packages>
\ No newline at end of file diff --git a/project/vs2015.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj b/project/vs2015.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj index 307c7394..bc7f27d2 100644 --- a/project/vs2015.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj +++ b/project/vs2015.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj @@ -58,10 +58,14 @@ <PropertyGroup> <PackageCertificateKeyFile>raylib.App.UWP.TemporaryKey.pfx</PackageCertificateKeyFile> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <IncludePath>C:\Users\Sam\Documents\GitHub\raylib\release\include;$(IncludePath)</IncludePath> + <LibraryPath>C:\Users\Sam\Documents\GitHub\raylib\project\vs2015.UWP\raylib\Debug;$(LibraryPath)</LibraryPath> + </PropertyGroup> <ItemDefinitionGroup Condition="'$(Platform)'=='ARM'"> <Link> - <AdditionalDependencies>mincore.lib; %(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm</AdditionalLibraryDirectories> + <AdditionalDependencies>mincore.lib;raylib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\arm;$(VCInstallDir)\lib\arm</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'"> @@ -73,7 +77,7 @@ <ItemDefinitionGroup Condition="'$(Platform)'=='x64'"> <Link> <AdditionalDependencies>mincore.lib;raylib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>C:\Users\Alumno\Downloads\angle\UWP_OpenGLES2\raylib;%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Users\Sam\Documents\GitHub\raylib\project\vs2015.UWP\x64\Debug;C:\Users\Alumno\Downloads\angle\UWP_OpenGLES2\raylib;%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> @@ -85,6 +89,9 @@ <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> + <ProjectReference> + <LinkLibraryDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkLibraryDependencies> + </ProjectReference> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> <ClCompile> @@ -122,19 +129,17 @@ <AppxManifest Include="Package.appxmanifest"> <SubType>Designer</SubType> </AppxManifest> - <None Include="raylib.App.UWP.TemporaryKey.pfx" /> - </ItemGroup> - <ItemGroup> <None Include="packages.config" /> + <None Include="raylib.App.UWP.TemporaryKey.pfx" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> - <Import Project="..\packages\ANGLE.WindowsStore.2.1.2\build\native\ANGLE.WindowsStore.targets" Condition="Exists('..\packages\ANGLE.WindowsStore.2.1.2\build\native\ANGLE.WindowsStore.targets')" /> + <Import Project="..\packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets" Condition="Exists('..\packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets')" /> </ImportGroup> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\ANGLE.WindowsStore.2.1.2\build\native\ANGLE.WindowsStore.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ANGLE.WindowsStore.2.1.2\build\native\ANGLE.WindowsStore.targets'))" /> + <Error Condition="!Exists('..\packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets'))" /> </Target> </Project>
\ No newline at end of file |
