Simplifying HID creation.

Part of #296.
This commit is contained in:
Ben Vanik
2015-06-27 09:42:30 -07:00
parent 883126d497
commit b38bf5c132
8 changed files with 57 additions and 88 deletions

View File

@@ -12,11 +12,57 @@
#include "xenia/emulator.h"
#include "xenia/cpu/processor.h"
#include "xenia/hid/input_driver.h"
#include "xenia/hid/hid-private.h"
#include "xenia/profiling.h"
#include "xenia/hid/nop/nop_hid.h"
#if XE_PLATFORM_WIN32
#include "xenia/hid/winkey/winkey_hid.h"
#include "xenia/hid/xinput/xinput_hid.h"
#endif // WIN32
namespace xe {
namespace hid {
std::unique_ptr<InputSystem> InputSystem::Create(Emulator* emulator) {
auto input_system = std::make_unique<InputSystem>(emulator);
if (FLAGS_hid.compare("nop") == 0) {
input_system->AddDriver(xe::hid::nop::Create(input_system.get()));
#if XE_PLATFORM_WIN32
} else if (FLAGS_hid.compare("winkey") == 0) {
input_system->AddDriver(xe::hid::winkey::Create(input_system.get()));
} else if (FLAGS_hid.compare("xinput") == 0) {
input_system->AddDriver(xe::hid::xinput::Create(input_system.get()));
#endif // WIN32
} else {
// Create all available.
bool any_created = false;
// NOTE: in any mode we create as many as we can, falling back to nop.
#if XE_PLATFORM_WIN32
auto xinput_driver = xe::hid::xinput::Create(input_system.get());
if (xinput_driver) {
input_system->AddDriver(std::move(xinput_driver));
any_created = true;
}
auto winkey_driver = xe::hid::winkey::Create(input_system.get());
if (winkey_driver) {
input_system->AddDriver(std::move(winkey_driver));
any_created = true;
}
#endif // WIN32
// Fallback to nop if none created.
if (!any_created) {
input_system->AddDriver(xe::hid::nop::Create(input_system.get()));
}
}
return input_system;
}
InputSystem::InputSystem(Emulator* emulator)
: emulator_(emulator), memory_(emulator->memory()) {}