Implemented mouse locking of a sort.

This commit is contained in:
Reece Mackie 2020-04-30 15:41:39 +01:00
parent 01e5c0da87
commit 175d888611
2 changed files with 23 additions and 5 deletions

View File

@ -91,6 +91,7 @@ void App::SetWindow(Windows::UI::Core::CoreWindow^ window)
void App::Load(Platform::String ^entryPoint) {} // Ignored for this example
static bool mouseLocked = false;
void App::Run()
{
// Set up our UWP implementation
@ -124,13 +125,13 @@ void App::Run()
UWPSetMouseLockFunc([]()
{
CoreWindow::GetForCurrentThread()->PointerCursor = nullptr;
// TODO:
mouseLocked = true;
});
UWPSetMouseUnlockFunc([]()
{
CoreWindow::GetForCurrentThread()->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0);
// TODO:
mouseLocked = false;
});
UWPSetMouseSetPosFunc([](int x, int y)
@ -170,8 +171,9 @@ void App::Run()
{
if (mWindowVisible)
{
ProcessGamepads();
PreProcessInputs();
GameLoop();
PostProcessInputs();
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
} else CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
}
@ -247,7 +249,7 @@ struct GamepadBinding
static GamepadBinding gGamepadBindings[MAX_GAMEPADS];
void App::ProcessGamepads()
void App::PreProcessInputs()
{
// Here, we will see if we have bound gamepads. If we do we check they are still present. If they aren't present we free the binding.
// if anyone does not have a binding but there is a gamepad available, we will bind it to the first player who is missing a controller.
@ -351,6 +353,21 @@ void App::ProcessGamepads()
}
}
void App::PostProcessInputs()
{
/*
* So here's the deal. UWP doesn't officially have mouse locking, so we're doing it ourselves here.
* If anyone has any better ideas on how to implement this feel free!
* This is done after the game loop so getting mouse delta etc. still works.
*/
if (mouseLocked)
{
auto w = GetScreenWidth();
auto h = GetScreenHeight();
SetMousePosition(w / 2, h / 2);
}
}
// Events
void App::OnActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
{

View File

@ -22,7 +22,8 @@ namespace raylibUWP
bool mSuspended = false;
void GameLoop();
void ProcessGamepads();
void PreProcessInputs();
void PostProcessInputs();
// Helpers
int GetRaylibKey(Windows::System::VirtualKey kVey);