3#include "ViewContext.h"
5#include <emscripten/html5.h>
7#include "Input/InputManager.h"
8#include "Input/GamepadMapping.h"
16 static EM_BOOL gamepadCallback(
int eventType,
const EmscriptenGamepadEvent *gamepadEvent,
void *userData);
23 this->view = viewContext;
25 emscripten_set_gamepadconnected_callback(
this, 1, gamepadCallback);
26 emscripten_set_gamepaddisconnected_callback(
this, 1, gamepadCallback);
29 const int axisMapping[6] = {
30 Gamepad::AxisNo::StickLeftX,
31 Gamepad::AxisNo::StickLeftY,
32 Gamepad::AxisNo::StickRightX,
33 Gamepad::AxisNo::StickRightY,
34 Gamepad::AxisNo::TriggerLeft,
35 Gamepad::AxisNo::TriggerRight,
38 const float axisMultiplier[6] = {
47 const int buttonMapping[16] = {
52 Gamepad::ButtonNo::LeftShoulder,
53 Gamepad::ButtonNo::RightShoulder,
54 Gamepad::ButtonNo::PlaceHolder0,
55 Gamepad::ButtonNo::PlaceHolder1,
56 Gamepad::ButtonNo::Back,
57 Gamepad::ButtonNo::Start,
58 Gamepad::ButtonNo::LeftThumb,
59 Gamepad::ButtonNo::RightThumb,
60 Gamepad::ButtonNo::DPadUp,
61 Gamepad::ButtonNo::DPadDown,
62 Gamepad::ButtonNo::DPadLeft,
63 Gamepad::ButtonNo::DPadRight,
71 if (EMSCRIPTEN_RESULT_SUCCESS == emscripten_sample_gamepad_data()) {
72 numGamepads = emscripten_get_num_gamepads();
75 for (
int i = 0; i < numGamepads; ++i) {
76 EmscriptenGamepadEvent g{};
77 emscripten_get_gamepad_status(i, &g);
79 auto & state = inputManager->getDevice((InputDevices::EValues)(InputDevices::Gamepad0 + i));
80 state.isConnected =
true;
82 state.axisMask = 0x000000000000003F;
83 state.buttonMask = 0x000000000000FFFF;
85 for (
int i = 0; i < g.numButtons; ++i) {
86 state.setButton(buttonMapping[i], g.digitalButton[i]);
89 for (
int i = 0; i < g.numAxes; ++i) {
90 state.setAxis(axisMapping[i], axisMultiplier[i] *
static_cast<float>(g.axis[i]));
99 EM_BOOL gamepadCallback(
int ,
const EmscriptenGamepadEvent *,
void * )
std::unique_ptr< class InputManager > inputManager
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
Contains all Cogs related functionality.