Compare commits

...

2 Commits

Author SHA1 Message Date
Jace 589ca45936 Removed debug output 2015-12-12 13:47:08 +01:00
Jace 0cff07101c Xbox Controller support 2015-12-12 13:42:46 +01:00
9 changed files with 293 additions and 102 deletions
+5 -7
View File
@@ -33,7 +33,6 @@ public:
void Initialize();
static const short MAX_GAMEPADS = 4;
void Update(double dt);
@@ -50,12 +49,6 @@ private:
std::array<int, GLFW_KEY_LAST+1> m_LastKeyState;
std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_CurrentMouseState;
std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_LastMouseState;
typedef std::array<float, static_cast<int>(Gamepad::Axis::LAST) + 1> GamepadAxisState;
std::array<GamepadAxisState, MAX_GAMEPADS> m_CurrentGamepadAxisState;
std::array<GamepadAxisState, MAX_GAMEPADS> m_LastGamepadAxisState;
typedef std::array<bool, static_cast<int>(Gamepad::Button::LAST) + 1> GamepadButtonState;
std::array<GamepadButtonState, MAX_GAMEPADS> m_CurrentGamepadButtonState;
std::array<GamepadButtonState, MAX_GAMEPADS> m_LastGamepadButtonState;
double m_CurrentMouseX, m_CurrentMouseY;
double m_LastMouseX, m_LastMouseY;
@@ -64,6 +57,11 @@ private:
void PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis);
void PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button button);
static void GLFWMouseButtonCallback(GLFWwindow* window, int button, int action, int mods)
{
LOG_DEBUG("Click! %i %i %i", button, action, mods);
}
};
#endif
@@ -0,0 +1,40 @@
#ifndef XboxControllerInputHandler_h__
#define XboxControllerInputHandler_h__
#include "InputHandler.h"
#include "Core/EKeyDown.h"
#include "Core/EKeyUp.h"
struct _XINPUT_STATE;
typedef _XINPUT_STATE XINPUT_STATE;
class XboxControllerInputHandler : public InputHandler
{
public:
XboxControllerInputHandler(EventBroker* eventBroker, InputProxy* inputProxy);
bool BindOrigin(std::string origin, std::string command, float value) override;
void Update(double dt) override;
virtual float GetCommandValue(std::string command) override;
private:
std::unordered_map<std::string, int> m_OriginButtons;
std::unordered_map<std::string, int> m_OriginAxes;
std::unordered_map<int, std::tuple<std::string, float>> m_ButtonBindings; // GLFW_KEY... -> command string & value
std::unordered_map<int, std::tuple<std::string, float>> m_AxisBindings; // GLFW_KEY... -> command string & value
std::unordered_map<std::string, float> m_CommandValues;
static const short MAX_GAMEPADS = 4;
float getAxisValue(XINPUT_STATE& state, int axis);
//typedef std::array<float, static_cast<int>(Gamepad::Axis::LAST) + 1> GamepadAxisState;
//std::array<GamepadAxisState, MAX_GAMEPADS> m_CurrentGamepadAxisState;
//std::array<GamepadAxisState, MAX_GAMEPADS> m_LastGamepadAxisState;
//typedef std::array<bool, static_cast<int>(Gamepad::Button::LAST) + 1> GamepadButtonState;
//std::array<GamepadButtonState, MAX_GAMEPADS> m_CurrentGamepadButtonState;
//std::array<GamepadButtonState, MAX_GAMEPADS> m_LastGamepadButtonState;
};
#endif
@@ -37,12 +37,12 @@ public:
void Update(double dt)
{
if (glm::length2(m_Velocity) > 0) {
m_Position += m_Orientation * (glm::normalize(m_Velocity) * m_BaseSpeed);
m_Position += (m_Orientation * (m_Velocity * m_BaseSpeed)) * (float)dt;
}
}
protected:
glm::vec3 m_Position = glm::vec3(0, 0, 0);
glm::vec3 m_Velocity = glm::vec3(0, 0, 0);
float m_BaseSpeed = 0.1f;
float m_BaseSpeed = 2.0f;
};
+1
View File
@@ -12,6 +12,7 @@
#include "Input/InputProxy.h"
#include "Input/KeyboardInputHandler.h"
#include "Input/MouseInputHandler.h"
#include "Input/XboxControllerInputHandler.h"
#include "Core/EKeyDown.h"
#include "Core/EntityXMLFile.h"
#include "Core/SystemPipeline.h"
+8
View File
@@ -14,3 +14,11 @@ R=Reload
Space=Jump
LeftControl=Crouch
LeftShift=Sprint
GamepadRightTrigger=PrimaryFire
GamepadRightX=Yaw
GamepadRightY=-Pitch
GamepadA=TestGamepadA
GamepadX=TestGamepadX
GamepadLeftX=Right
GamepadLeftY=Forward
+44 -90
View File
@@ -8,6 +8,8 @@ void InputManager::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &InputManager::OnLockMouse);
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &InputManager::OnUnlockMouse);
//glfwSetMouseButtonCallback(m_GLFWWindow, &InputManager::GLFWMouseButtonCallback);
}
void InputManager::Update(double dt)
@@ -73,6 +75,21 @@ void InputManager::Update(double dt)
m_EventBroker->Publish(e);
}
// Joysticks
//for (int i = 0; i < GLFW_JOYSTICK_LAST; i++) {
// if (glfwJoystickPresent(i) == GL_FALSE) {
// continue;
// }
// int count;
// const float* axes = glfwGetJoystickAxes(i, &count);
// LOG_DEBUG("Controller %i NumAxes: %i", i, count);
// m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftX)] = axes[0];
// m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftY)] = axes[1];
// m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightX)] = axes[2];
// m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightY)] = axes[3];
//}
// // Lock mouse while holding LMB
// if (m_CurrentMouseState[GLFW_MOUSE_BUTTON_LEFT])
// {
@@ -91,109 +108,46 @@ void InputManager::Update(double dt)
// }
// TODO: Xbox360 controller
/*DWORD dwResult;
for (int i = 0; i < MAX_GAMEPADS; i++)
{
XINPUT_STATE state = { 0 };
// Simply get the state of the controller from XInput.
dwResult = XInputGetState(i, &state);
if (dwResult == 0)
{
if(std::abs(state.Gamepad.sThumbLX) <= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
state.Gamepad.sThumbLX = 0;
if(std::abs(state.Gamepad.sThumbLY) <= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
state.Gamepad.sThumbLY = 0;
if(std::abs(state.Gamepad.sThumbRX) <= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
state.Gamepad.sThumbRX = 0;
if(std::abs(state.Gamepad.sThumbRY) <= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
state.Gamepad.sThumbRY = 0;
if(std::abs(state.Gamepad.bLeftTrigger) <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
state.Gamepad.bLeftTrigger = 0;
if(std::abs(state.Gamepad.bRightTrigger) <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
state.Gamepad.bRightTrigger = 0;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftX)] = state.Gamepad.sThumbLX / 32767.f;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftY)] = state.Gamepad.sThumbLY / 32767.f;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightX)] = state.Gamepad.sThumbRX / 32767.f;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightY)] = state.Gamepad.sThumbRY / 32767.f;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftTrigger)] = state.Gamepad.bLeftTrigger / 255.f;
m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightTrigger)] = state.Gamepad.bRightTrigger / 255.f;
PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftX);
PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftY);
PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightX);
PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightY);
PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftTrigger);
PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightTrigger);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Up)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Down)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Left)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Right)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Start)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_START);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Back)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::LeftThumb)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::RightThumb)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::LeftShoulder)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::RightShoulder)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::A)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_A);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::B)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_B);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::X)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_X);
m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Y)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_Y);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Up);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Down);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Left);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Right);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Start);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Back);
PublishGamepadButtonIfChanged(i, Gamepad::Button::LeftThumb);
PublishGamepadButtonIfChanged(i, Gamepad::Button::RightThumb);
PublishGamepadButtonIfChanged(i, Gamepad::Button::LeftShoulder);
PublishGamepadButtonIfChanged(i, Gamepad::Button::RightShoulder);
PublishGamepadButtonIfChanged(i, Gamepad::Button::A);
PublishGamepadButtonIfChanged(i, Gamepad::Button::B);
PublishGamepadButtonIfChanged(i, Gamepad::Button::X);
PublishGamepadButtonIfChanged(i, Gamepad::Button::Y);
}
}*/
/**/
m_LastKeyState = m_CurrentKeyState;
m_LastMouseState = m_CurrentMouseState;
m_LastMouseX = m_CurrentMouseX;
m_LastMouseY = m_CurrentMouseY;
m_LastGamepadAxisState = m_CurrentGamepadAxisState;
m_LastGamepadButtonState = m_CurrentGamepadButtonState;
//m_LastGamepadAxisState = m_CurrentGamepadAxisState;
//m_LastGamepadButtonState = m_CurrentGamepadButtonState;
}
void InputManager::PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis)
{
float currentValue = m_CurrentGamepadAxisState[gamepadID][static_cast<int>(axis)];
float lastValue = m_LastGamepadAxisState[gamepadID][static_cast<int>(axis)];
if (currentValue != lastValue) {
Events::GamepadAxis e;
e.GamepadID = gamepadID;
e.Axis = axis;
e.Value = currentValue;
m_EventBroker->Publish(e);
}
//float currentValue = m_CurrentGamepadAxisState[gamepadID][static_cast<int>(axis)];
//float lastValue = m_LastGamepadAxisState[gamepadID][static_cast<int>(axis)];
//if (currentValue != lastValue) {
// Events::GamepadAxis e;
// e.GamepadID = gamepadID;
// e.Axis = axis;
// e.Value = currentValue;
// m_EventBroker->Publish(e);
//}
}
void InputManager::PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button button)
{
bool currentState = m_CurrentGamepadButtonState[gamepadID][static_cast<int>(button)];
float lastState = m_LastGamepadButtonState[gamepadID][static_cast<int>(button)];
if (currentState != lastState) {
if (currentState == true) {
Events::GamepadButtonDown e;
e.GamepadID = gamepadID;
e.Button = button;
m_EventBroker->Publish(e);
} else {
Events::GamepadButtonUp e;
e.GamepadID = gamepadID;
e.Button = button;
m_EventBroker->Publish(e);
}
}
//bool currentState = m_CurrentGamepadButtonState[gamepadID][static_cast<int>(button)];
//float lastState = m_LastGamepadButtonState[gamepadID][static_cast<int>(button)];
//if (currentState != lastState) {
// if (currentState == true) {
// Events::GamepadButtonDown e;
// e.GamepadID = gamepadID;
// e.Button = button;
// m_EventBroker->Publish(e);
// } else {
// Events::GamepadButtonUp e;
// e.GamepadID = gamepadID;
// e.Button = button;
// m_EventBroker->Publish(e);
// }
//}
}
bool InputManager::OnLockMouse(const Events::LockMouse &event)
+5 -3
View File
@@ -25,11 +25,13 @@ MouseInputHandler::MouseInputHandler(EventBroker* eventBroker, InputProxy* input
bool MouseInputHandler::BindOrigin(std::string origin, std::string command, float value)
{
bool result = false;
auto originCode = m_OriginCodes.find(origin);
if (originCode != m_OriginCodes.end()) {
int code = originCode->second;
m_Bindings[code] = std::make_tuple(command, value);
return true;
result = true;
}
auto originAxis = m_OriginAxes.find(origin);
@@ -44,10 +46,10 @@ bool MouseInputHandler::BindOrigin(std::string origin, std::string command, floa
}
}
m_Axes[axis] = std::make_tuple(command, value * multiplier);
return true;
result = true;
}
return false;
return result;
}
float MouseInputHandler::GetCommandValue(std::string command)
@@ -0,0 +1,187 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <Xinput.h>
#pragma comment(lib, "Xinput.lib")
#pragma comment(lib, "Xinput9_1_0.lib")
#include "Input/XboxControllerInputHandler.h"
XboxControllerInputHandler::XboxControllerInputHandler(EventBroker* eventBroker, InputProxy* inputProxy)
: InputHandler(eventBroker, inputProxy)
{
m_OriginButtons["GamepadUp"] = XINPUT_GAMEPAD_DPAD_UP;
m_OriginButtons["GamepadDown"] = XINPUT_GAMEPAD_DPAD_DOWN;
m_OriginButtons["GamepadLeft"] = XINPUT_GAMEPAD_DPAD_LEFT;
m_OriginButtons["GamepadRight"] = XINPUT_GAMEPAD_DPAD_RIGHT;
m_OriginButtons["GamepadStart"] = XINPUT_GAMEPAD_START;
m_OriginButtons["GamepadBack"] = XINPUT_GAMEPAD_BACK;
m_OriginButtons["GamepadLeftStick"] = XINPUT_GAMEPAD_LEFT_THUMB;
m_OriginButtons["GamepadRightStick"] = XINPUT_GAMEPAD_RIGHT_THUMB;
m_OriginButtons["GamepadLeftBumper"] = XINPUT_GAMEPAD_LEFT_SHOULDER;
m_OriginButtons["GamepadRightBumper"] = XINPUT_GAMEPAD_RIGHT_SHOULDER;
m_OriginButtons["GamepadA"] = XINPUT_GAMEPAD_A;
m_OriginButtons["GamepadB"] = XINPUT_GAMEPAD_B;
m_OriginButtons["GamepadX"] = XINPUT_GAMEPAD_X;
m_OriginButtons["GamepadY"] = XINPUT_GAMEPAD_Y;
m_OriginAxes["GamepadLeftX"] = 0;
m_OriginAxes["GamepadLeftY"] = 1;
m_OriginAxes["GamepadRightX"] = 2;
m_OriginAxes["GamepadRightY"] = 3;
m_OriginAxes["GamepadLeftTrigger"] = 4;
m_OriginAxes["GamepadRightTrigger"] = 5;
}
bool XboxControllerInputHandler::BindOrigin(std::string origin, std::string command, float value)
{
bool result = false;
auto originIt = m_OriginButtons.find(origin);
if (originIt != m_OriginButtons.end()) {
int button = originIt->second;
m_ButtonBindings[button] = std::make_tuple(command, value);
result = true;
}
auto originAxis = m_OriginAxes.find(origin);
if (originAxis != m_OriginAxes.end()) {
char axis = originAxis->second;
float multiplier = 0.5f;
//// Sensitivity
//multiplier *= ResourceManager::Load<ConfigFile>("Input.ini")->Get<float>("Mouse.Sensitivity", 1.f);
//if (axis == 'Y') {
// if (ResourceManager::Load<ConfigFile>("Input.ini")->Get<bool>("Mouse.InvertPitch", false)) {
// multiplier *= -1.f;
// }
//}
m_AxisBindings[axis] = std::make_tuple(command, value * multiplier);
result = true;
}
return result;
}
void XboxControllerInputHandler::Update(double dt)
{
DWORD dwResult;
for (int i = 0; i < MAX_GAMEPADS; i++) {
XINPUT_STATE state = { 0 };
// Simply get the state of the controller from XInput.
dwResult = XInputGetState(i, &state);
if (dwResult == 0) {
if (std::abs(state.Gamepad.sThumbLX) <= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
state.Gamepad.sThumbLX = 0;
if (std::abs(state.Gamepad.sThumbLY) <= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
state.Gamepad.sThumbLY = 0;
if (std::abs(state.Gamepad.sThumbRX) <= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
state.Gamepad.sThumbRX = 0;
if (std::abs(state.Gamepad.sThumbRY) <= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
state.Gamepad.sThumbRY = 0;
if (std::abs(state.Gamepad.bLeftTrigger) <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
state.Gamepad.bLeftTrigger = 0;
if (std::abs(state.Gamepad.bRightTrigger) <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
state.Gamepad.bRightTrigger = 0;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftX)] = state.Gamepad.sThumbLX / 32767.f;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftY)] = state.Gamepad.sThumbLY / 32767.f;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightX)] = state.Gamepad.sThumbRX / 32767.f;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightY)] = state.Gamepad.sThumbRY / 32767.f;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::LeftTrigger)] = state.Gamepad.bLeftTrigger / 255.f;
//m_CurrentGamepadAxisState[i][static_cast<int>(Gamepad::Axis::RightTrigger)] = state.Gamepad.bRightTrigger / 255.f;
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftX);
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftY);
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightX);
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightY);
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::LeftTrigger);
//PublishGamepadAxisIfChanged(i, Gamepad::Axis::RightTrigger);
for (auto& pair : m_OriginAxes) {
const std::string& origin = pair.first;
int axis = pair.second;
auto& binding = m_AxisBindings.find(axis);
if (binding == m_AxisBindings.end()) {
continue;
}
std::string command;
float value;
std::tie(command, value) = binding->second;
Events::InputCommand e;
e.PlayerID = -1;
e.Command = command;
e.Value = value * getAxisValue(state, axis);
m_InputProxy->Publish(e);
}
for (auto& pair : m_OriginButtons) {
auto& binding = m_ButtonBindings.find(pair.second);
if (binding == m_ButtonBindings.end()) {
continue;
}
std::string command;
float value;
std::tie(command, value) = binding->second;
bool pressed = static_cast<bool>(state.Gamepad.wButtons & binding->first);
m_CommandValues[command] = (pressed) ? value : 0.f;
}
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Up)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Down)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Left)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Right)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Start)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_START);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Back)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::LeftThumb)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::RightThumb)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::LeftShoulder)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::RightShoulder)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::A)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_A);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::B)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_B);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::X)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_X);
//m_CurrentGamepadButtonState[i][static_cast<int>(Gamepad::Button::Y)] = static_cast<bool>(state.Gamepad.wButtons & XINPUT_GAMEPAD_Y);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Up);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Down);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Left);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Right);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Start);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Back);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::LeftThumb);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::RightThumb);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::LeftShoulder);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::RightShoulder);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::A);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::B);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::X);
//PublishGamepadButtonIfChanged(i, Gamepad::Button::Y);
}
}
}
float XboxControllerInputHandler::GetCommandValue(std::string command)
{
auto it = m_CommandValues.find(command);
if (it != m_CommandValues.end()) {
return m_CommandValues[command];
} else {
return 0.f;
}
}
float XboxControllerInputHandler::getAxisValue(XINPUT_STATE& state, int axis)
{
switch (axis) {
case 0:
return state.Gamepad.sThumbLX / 32767.f;
case 1:
return state.Gamepad.sThumbLY / 32767.f;
case 2:
return state.Gamepad.sThumbRX / 32767.f;
case 3:
return state.Gamepad.sThumbRY / 32767.f;
case 4:
return state.Gamepad.bLeftTrigger / 255.f;
case 5:
return state.Gamepad.bRightTrigger / 255.f;
}
}
+1
View File
@@ -32,6 +32,7 @@ Game::Game(int argc, char* argv[])
m_InputProxy = new InputProxy(m_EventBroker);
m_InputProxy->AddHandler<KeyboardInputHandler>();
m_InputProxy->AddHandler<MouseInputHandler>();
m_InputProxy->AddHandler<XboxControllerInputHandler>();
m_InputProxy->LoadBindings("Input.ini");
// Create the root level GUI frame