void x360::InputUpdate()
{
XINPUT_STATE state;
x360::InputManager& manager = x360::InputManager::get_instance();
for (int i=0; i<4; ++i)
{
ZeroMemory(&state, sizeof XINPUT_STATE);
if (XInputGetState(i,&state) == ERROR_SUCCESS)
{
if (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) {
manager.events.push(x360::Event(X360_PRESS,XINPUT_GAMEPAD_A));
}
if (state.Gamepad.wButtons & XINPUT_GAMEPAD_B) {
manager.events.push(x360::Event(X360_PRESS,XINPUT_GAMEPAD_B));
}
if (state.Gamepad.wButtons & XINPUT_GAMEPAD_X) {
manager.events.push(x360::Event(X360_PRESS,XINPUT_GAMEPAD_X));
}
if (state.Gamepad.wButtons & XINPUT_GAMEPAD_Y) {
manager.events.push(x360::Event(X360_PRESS,XINPUT_GAMEPAD_Y));
}
}
}
}
bool x360::GetEvent(x360::Event* eventptr)
{
x360::InputManager& manager = x360::InputManager::get_instance();
std::queue<x360::Event>::size_type previousSize = manager.events.size();
if (previousSize > 0)
{
*eventptr = manager.events.front();
manager.events.pop();
}
return previousSize != manager.events.size();
}
dm9pZCB4MzYwOjpJbnB1dFVwZGF0ZSgpCnsKICAgIFhJTlBVVF9TVEFURSBzdGF0ZTsKICAgIHgzNjA6OklucHV0TWFuYWdlciYgbWFuYWdlciA9IHgzNjA6OklucHV0TWFuYWdlcjo6Z2V0X2luc3RhbmNlKCk7CgogICAgZm9yIChpbnQgaT0wOyBpPDQ7ICsraSkKICAgIHsKICAgICAgICBaZXJvTWVtb3J5KCZzdGF0ZSwgc2l6ZW9mIFhJTlBVVF9TVEFURSk7CiAgICAgICAgaWYgKFhJbnB1dEdldFN0YXRlKGksJnN0YXRlKSA9PSBFUlJPUl9TVUNDRVNTKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHN0YXRlLkdhbWVwYWQud0J1dHRvbnMgJiBYSU5QVVRfR0FNRVBBRF9BKSB7CiAgICAgICAgICAgICAgICBtYW5hZ2VyLmV2ZW50cy5wdXNoKHgzNjA6OkV2ZW50KFgzNjBfUFJFU1MsWElOUFVUX0dBTUVQQURfQSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc3RhdGUuR2FtZXBhZC53QnV0dG9ucyAmIFhJTlBVVF9HQU1FUEFEX0IpIHsKICAgICAgICAgICAgICAgIG1hbmFnZXIuZXZlbnRzLnB1c2goeDM2MDo6RXZlbnQoWDM2MF9QUkVTUyxYSU5QVVRfR0FNRVBBRF9CKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdGF0ZS5HYW1lcGFkLndCdXR0b25zICYgWElOUFVUX0dBTUVQQURfWCkgewogICAgICAgICAgICAgICAgbWFuYWdlci5ldmVudHMucHVzaCh4MzYwOjpFdmVudChYMzYwX1BSRVNTLFhJTlBVVF9HQU1FUEFEX1gpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHN0YXRlLkdhbWVwYWQud0J1dHRvbnMgJiBYSU5QVVRfR0FNRVBBRF9ZKSB7CiAgICAgICAgICAgICAgICBtYW5hZ2VyLmV2ZW50cy5wdXNoKHgzNjA6OkV2ZW50KFgzNjBfUFJFU1MsWElOUFVUX0dBTUVQQURfWSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgpib29sIHgzNjA6OkdldEV2ZW50KHgzNjA6OkV2ZW50KiBldmVudHB0cikKewogICAgeDM2MDo6SW5wdXRNYW5hZ2VyJiBtYW5hZ2VyID0geDM2MDo6SW5wdXRNYW5hZ2VyOjpnZXRfaW5zdGFuY2UoKTsKICAgIHN0ZDo6cXVldWU8eDM2MDo6RXZlbnQ+OjpzaXplX3R5cGUgcHJldmlvdXNTaXplID0gbWFuYWdlci5ldmVudHMuc2l6ZSgpOwoKICAgIGlmIChwcmV2aW91c1NpemUgPiAwKQogICAgewogICAgICAgICpldmVudHB0ciA9IG1hbmFnZXIuZXZlbnRzLmZyb250KCk7CiAgICAgICAgbWFuYWdlci5ldmVudHMucG9wKCk7CiAgICB9CgogICAgcmV0dXJuIHByZXZpb3VzU2l6ZSAhPSBtYW5hZ2VyLmV2ZW50cy5zaXplKCk7Cn0=