mirror of
https://github.com/esuo1198/TaikoArcadeLoader.git
synced 2026-09-30 18:58:03 +03:00
Change clang-format settings and format all codes
This commit is contained in:
+290
-287
@@ -3,8 +3,8 @@
|
||||
#include <windows.h>
|
||||
|
||||
struct {
|
||||
const char *string;
|
||||
uint8_t keycode;
|
||||
const char *string;
|
||||
uint8_t keycode;
|
||||
} ConfigKeyboardButtons[] = {
|
||||
// Reference:https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
||||
// Wayback Machine:https://web.archive.org/web/20231223135232/https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
||||
@@ -130,8 +130,8 @@ struct {
|
||||
};
|
||||
|
||||
struct {
|
||||
const char *string;
|
||||
SDL_GameControllerButton button;
|
||||
const char *string;
|
||||
SDL_GameControllerButton button;
|
||||
} ConfigControllerButtons[] = {
|
||||
{"SDL_A", SDL_CONTROLLER_BUTTON_A},
|
||||
{"SDL_B", SDL_CONTROLLER_BUTTON_B},
|
||||
@@ -157,27 +157,28 @@ struct {
|
||||
};
|
||||
|
||||
struct {
|
||||
const char *string;
|
||||
SDLAxis axis;
|
||||
const char *string;
|
||||
SDLAxis axis;
|
||||
} ConfigControllerAXIS[] = {
|
||||
{"SDL_LSTICK_LEFT", SDL_AXIS_LEFT_LEFT}, {"SDL_LSTICK_UP", SDL_AXIS_LEFT_UP}, {"SDL_LSTICK_DOWN", SDL_AXIS_LEFT_DOWN}, {"SDL_LSTICK_RIGHT", SDL_AXIS_LEFT_RIGHT},
|
||||
{"SDL_RSTICK_LEFT", SDL_AXIS_RIGHT_LEFT}, {"SDL_RSTICK_UP", SDL_AXIS_RIGHT_UP}, {"SDL_RSTICK_DOWN", SDL_AXIS_RIGHT_DOWN}, {"SDL_RSTICK_RIGHT", SDL_AXIS_RIGHT_RIGHT},
|
||||
{"SDL_LTRIGGER", SDL_AXIS_LTRIGGER_DOWN}, {"SDL_RTRIGGER", SDL_AXIS_RTRIGGER_DOWN},
|
||||
{"SDL_LSTICK_LEFT", SDL_AXIS_LEFT_LEFT}, {"SDL_LSTICK_UP", SDL_AXIS_LEFT_UP}, {"SDL_LSTICK_DOWN", SDL_AXIS_LEFT_DOWN},
|
||||
{"SDL_LSTICK_RIGHT", SDL_AXIS_LEFT_RIGHT}, {"SDL_RSTICK_LEFT", SDL_AXIS_RIGHT_LEFT}, {"SDL_RSTICK_UP", SDL_AXIS_RIGHT_UP},
|
||||
{"SDL_RSTICK_DOWN", SDL_AXIS_RIGHT_DOWN}, {"SDL_RSTICK_RIGHT", SDL_AXIS_RIGHT_RIGHT}, {"SDL_LTRIGGER", SDL_AXIS_LTRIGGER_DOWN},
|
||||
{"SDL_RTRIGGER", SDL_AXIS_RTRIGGER_DOWN},
|
||||
};
|
||||
|
||||
struct {
|
||||
const char *string;
|
||||
Scroll scroll;
|
||||
const char *string;
|
||||
Scroll scroll;
|
||||
} ConfigMouseScroll[] = {
|
||||
{"SCROLL_UP", MOUSE_SCROLL_UP},
|
||||
{"SCROLL_DOWN", MOUSE_SCROLL_DOWN},
|
||||
};
|
||||
|
||||
struct MouseState {
|
||||
POINT Position;
|
||||
POINT RelativePosition;
|
||||
bool ScrolledUp;
|
||||
bool ScrolledDown;
|
||||
POINT Position;
|
||||
POINT RelativePosition;
|
||||
bool ScrolledUp;
|
||||
bool ScrolledDown;
|
||||
} currentMouseState, lastMouseState;
|
||||
|
||||
bool currentKeyboardState[0xFF];
|
||||
@@ -193,297 +194,299 @@ SDL_GameController *controllers[255];
|
||||
|
||||
void
|
||||
SetConfigValue (toml_table_t *table, const char *key, Keybindings *keybind) {
|
||||
toml_array_t *array = toml_array_in (table, key);
|
||||
if (!array) {
|
||||
printWarning ("%s (%s): Cannot find array\n", __func__, key);
|
||||
return;
|
||||
}
|
||||
toml_array_t *array = toml_array_in (table, key);
|
||||
if (!array) {
|
||||
printWarning ("%s (%s): Cannot find array\n", __func__, key);
|
||||
return;
|
||||
}
|
||||
|
||||
memset (keybind, 0, sizeof (*keybind));
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->buttons); i++)
|
||||
keybind->buttons[i] = SDL_CONTROLLER_BUTTON_INVALID;
|
||||
memset (keybind, 0, sizeof (*keybind));
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->buttons); i++)
|
||||
keybind->buttons[i] = SDL_CONTROLLER_BUTTON_INVALID;
|
||||
|
||||
for (size_t i = 0;; i++) {
|
||||
toml_datum_t bind = toml_string_at (array, i);
|
||||
if (!bind.ok) break;
|
||||
ConfigValue value = StringToConfigEnum (bind.u.s);
|
||||
free (bind.u.s);
|
||||
for (size_t i = 0;; i++) {
|
||||
toml_datum_t bind = toml_string_at (array, i);
|
||||
if (!bind.ok) break;
|
||||
ConfigValue value = StringToConfigEnum (bind.u.s);
|
||||
free (bind.u.s);
|
||||
|
||||
switch (value.type) {
|
||||
case keycode:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->keycodes); i++) {
|
||||
if (keybind->keycodes[i] == 0) {
|
||||
keybind->keycodes[i] = value.keycode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case button:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->buttons); i++) {
|
||||
if (keybind->buttons[i] == SDL_CONTROLLER_BUTTON_INVALID) {
|
||||
keybind->buttons[i] = value.button;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case axis:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->axis); i++) {
|
||||
if (keybind->axis[i] == 0) {
|
||||
keybind->axis[i] = value.axis;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case scroll:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->scroll); i++) {
|
||||
if (keybind->scroll[i] == 0) {
|
||||
keybind->scroll[i] = value.scroll;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
switch (value.type) {
|
||||
case keycode:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->keycodes); i++) {
|
||||
if (keybind->keycodes[i] == 0) {
|
||||
keybind->keycodes[i] = value.keycode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case button:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->buttons); i++) {
|
||||
if (keybind->buttons[i] == SDL_CONTROLLER_BUTTON_INVALID) {
|
||||
keybind->buttons[i] = value.button;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case axis:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->axis); i++) {
|
||||
if (keybind->axis[i] == 0) {
|
||||
keybind->axis[i] = value.axis;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case scroll:
|
||||
for (size_t i = 0; i < COUNTOFARR (keybind->scroll); i++) {
|
||||
if (keybind->scroll[i] == 0) {
|
||||
keybind->scroll[i] = value.scroll;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
InitializePoll (HWND windowHandle) {
|
||||
bool hasRumble = true;
|
||||
SDL_SetMainReady ();
|
||||
bool hasRumble = true;
|
||||
SDL_SetMainReady ();
|
||||
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS4, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS5, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS4, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS5, "1");
|
||||
SDL_SetHint (SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1");
|
||||
|
||||
if (SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO) != 0) {
|
||||
if (SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO) == 0) {
|
||||
hasRumble = false;
|
||||
} else {
|
||||
printError ("SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO): "
|
||||
"%s\n",
|
||||
SDL_GetError ());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO) != 0) {
|
||||
if (SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO) == 0) {
|
||||
hasRumble = false;
|
||||
} else {
|
||||
printError ("SDL_Init (SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVENTS | SDL_INIT_VIDEO): "
|
||||
"%s\n",
|
||||
SDL_GetError ());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
auto configPath = std::filesystem::current_path () / "gamecontrollerdb.txt";
|
||||
if (SDL_GameControllerAddMappingsFromFile (configPath.string ().c_str ()) == -1) printError ("%s (): Cannot read gamecontrollerdb.txt\n", __func__);
|
||||
SDL_GameControllerEventState (SDL_ENABLE);
|
||||
SDL_JoystickEventState (SDL_ENABLE);
|
||||
auto configPath = std::filesystem::current_path () / "gamecontrollerdb.txt";
|
||||
if (SDL_GameControllerAddMappingsFromFile (configPath.string ().c_str ()) == -1)
|
||||
printError ("%s (): Cannot read gamecontrollerdb.txt\n", __func__);
|
||||
SDL_GameControllerEventState (SDL_ENABLE);
|
||||
SDL_JoystickEventState (SDL_ENABLE);
|
||||
|
||||
for (int i = 0; i < SDL_NumJoysticks (); i++) {
|
||||
if (!SDL_IsGameController (i)) continue;
|
||||
for (int i = 0; i < SDL_NumJoysticks (); i++) {
|
||||
if (!SDL_IsGameController (i)) continue;
|
||||
|
||||
SDL_GameController *controller = SDL_GameControllerOpen (i);
|
||||
if (!controller) {
|
||||
printWarning ("Could not open gamecontroller %s: %s\n", SDL_GameControllerNameForIndex (i), SDL_GetError ());
|
||||
continue;
|
||||
}
|
||||
controllers[i] = controller;
|
||||
}
|
||||
SDL_GameController *controller = SDL_GameControllerOpen (i);
|
||||
if (!controller) {
|
||||
printWarning ("Could not open gamecontroller %s: %s\n", SDL_GameControllerNameForIndex (i), SDL_GetError ());
|
||||
continue;
|
||||
}
|
||||
controllers[i] = controller;
|
||||
}
|
||||
|
||||
window = SDL_CreateWindowFrom (windowHandle);
|
||||
if (window == NULL) printError ("SDL_CreateWindowFrom (windowHandle): %s\n", SDL_GetError ());
|
||||
window = SDL_CreateWindowFrom (windowHandle);
|
||||
if (window == NULL) printError ("SDL_CreateWindowFrom (windowHandle): %s\n", SDL_GetError ());
|
||||
|
||||
atexit (DisposePoll);
|
||||
atexit (DisposePoll);
|
||||
|
||||
return hasRumble;
|
||||
return hasRumble;
|
||||
}
|
||||
|
||||
void
|
||||
UpdatePoll (HWND windowHandle) {
|
||||
if (windowHandle == NULL || GetForegroundWindow () != windowHandle) return;
|
||||
if (windowHandle == NULL || GetForegroundWindow () != windowHandle) return;
|
||||
|
||||
memcpy (lastKeyboardState, currentKeyboardState, 255);
|
||||
memcpy (lastControllerButtonsState, currentControllerButtonsState, 21);
|
||||
lastMouseState = currentMouseState;
|
||||
lastControllerAxisState = currentControllerAxisState;
|
||||
memcpy (lastKeyboardState, currentKeyboardState, 255);
|
||||
memcpy (lastControllerButtonsState, currentControllerButtonsState, 21);
|
||||
lastMouseState = currentMouseState;
|
||||
lastControllerAxisState = currentControllerAxisState;
|
||||
|
||||
for (uint8_t i = 0; i < 0xFF; i++)
|
||||
currentKeyboardState[i] = GetAsyncKeyState (i) != 0;
|
||||
for (uint8_t i = 0; i < 0xFF; i++)
|
||||
currentKeyboardState[i] = GetAsyncKeyState (i) != 0;
|
||||
|
||||
currentMouseState.ScrolledUp = false;
|
||||
currentMouseState.ScrolledDown = false;
|
||||
currentMouseState.ScrolledUp = false;
|
||||
currentMouseState.ScrolledDown = false;
|
||||
|
||||
GetCursorPos (¤tMouseState.Position);
|
||||
ScreenToClient (windowHandle, ¤tMouseState.Position);
|
||||
GetCursorPos (¤tMouseState.Position);
|
||||
ScreenToClient (windowHandle, ¤tMouseState.Position);
|
||||
|
||||
SDL_Event event;
|
||||
SDL_GameController *controller;
|
||||
while (SDL_PollEvent (&event) != 0) {
|
||||
switch (event.type) {
|
||||
case SDL_CONTROLLERDEVICEADDED:
|
||||
if (!SDL_IsGameController (event.cdevice.which)) break;
|
||||
SDL_Event event;
|
||||
SDL_GameController *controller;
|
||||
while (SDL_PollEvent (&event) != 0) {
|
||||
switch (event.type) {
|
||||
case SDL_CONTROLLERDEVICEADDED:
|
||||
if (!SDL_IsGameController (event.cdevice.which)) break;
|
||||
|
||||
controller = SDL_GameControllerOpen (event.cdevice.which);
|
||||
if (!controller) {
|
||||
printError ("%s (): Could not open gamecontroller %s: %s\n", __func__, SDL_GameControllerNameForIndex (event.cdevice.which), SDL_GetError ());
|
||||
continue;
|
||||
}
|
||||
controllers[event.cdevice.which] = controller;
|
||||
break;
|
||||
case SDL_CONTROLLERDEVICEREMOVED:
|
||||
if (!SDL_IsGameController (event.cdevice.which)) break;
|
||||
SDL_GameControllerClose (controllers[event.cdevice.which]);
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
if (event.wheel.y > 0) currentMouseState.ScrolledUp = true;
|
||||
else if (event.wheel.y < 0) currentMouseState.ScrolledDown = true;
|
||||
break;
|
||||
case SDL_CONTROLLERBUTTONUP:
|
||||
case SDL_CONTROLLERBUTTONDOWN: currentControllerButtonsState[event.cbutton.button] = event.cbutton.state; break;
|
||||
case SDL_CONTROLLERAXISMOTION:
|
||||
if (event.caxis.value > 1) {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX: currentControllerAxisState.LeftRight = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY: currentControllerAxisState.LeftDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX: currentControllerAxisState.RightRight = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY: currentControllerAxisState.RightDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT: currentControllerAxisState.LTriggerDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: currentControllerAxisState.RTriggerDown = (float)event.caxis.value / 32767; break;
|
||||
}
|
||||
} else if (event.caxis.value < -1) {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX: currentControllerAxisState.LeftLeft = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY: currentControllerAxisState.LeftUp = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX: currentControllerAxisState.RightLeft = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY: currentControllerAxisState.RightUp = (float)event.caxis.value / -32768; break;
|
||||
}
|
||||
} else {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX:
|
||||
currentControllerAxisState.LeftRight = 0;
|
||||
currentControllerAxisState.LeftLeft = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY:
|
||||
currentControllerAxisState.LeftDown = 0;
|
||||
currentControllerAxisState.LeftUp = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX:
|
||||
currentControllerAxisState.RightRight = 0;
|
||||
currentControllerAxisState.RightLeft = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY:
|
||||
currentControllerAxisState.RightDown = 0;
|
||||
currentControllerAxisState.RightUp = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT: currentControllerAxisState.LTriggerDown = 0; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: currentControllerAxisState.RTriggerDown = 0; break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
controller = SDL_GameControllerOpen (event.cdevice.which);
|
||||
if (!controller) {
|
||||
printError ("%s (): Could not open gamecontroller %s: %s\n", __func__, SDL_GameControllerNameForIndex (event.cdevice.which),
|
||||
SDL_GetError ());
|
||||
continue;
|
||||
}
|
||||
controllers[event.cdevice.which] = controller;
|
||||
break;
|
||||
case SDL_CONTROLLERDEVICEREMOVED:
|
||||
if (!SDL_IsGameController (event.cdevice.which)) break;
|
||||
SDL_GameControllerClose (controllers[event.cdevice.which]);
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
if (event.wheel.y > 0) currentMouseState.ScrolledUp = true;
|
||||
else if (event.wheel.y < 0) currentMouseState.ScrolledDown = true;
|
||||
break;
|
||||
case SDL_CONTROLLERBUTTONUP:
|
||||
case SDL_CONTROLLERBUTTONDOWN: currentControllerButtonsState[event.cbutton.button] = event.cbutton.state; break;
|
||||
case SDL_CONTROLLERAXISMOTION:
|
||||
if (event.caxis.value > 1) {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX: currentControllerAxisState.LeftRight = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY: currentControllerAxisState.LeftDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX: currentControllerAxisState.RightRight = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY: currentControllerAxisState.RightDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT: currentControllerAxisState.LTriggerDown = (float)event.caxis.value / 32767; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: currentControllerAxisState.RTriggerDown = (float)event.caxis.value / 32767; break;
|
||||
}
|
||||
} else if (event.caxis.value < -1) {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX: currentControllerAxisState.LeftLeft = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY: currentControllerAxisState.LeftUp = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX: currentControllerAxisState.RightLeft = (float)event.caxis.value / -32768; break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY: currentControllerAxisState.RightUp = (float)event.caxis.value / -32768; break;
|
||||
}
|
||||
} else {
|
||||
switch (event.caxis.axis) {
|
||||
case SDL_CONTROLLER_AXIS_LEFTX:
|
||||
currentControllerAxisState.LeftRight = 0;
|
||||
currentControllerAxisState.LeftLeft = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY:
|
||||
currentControllerAxisState.LeftDown = 0;
|
||||
currentControllerAxisState.LeftUp = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX:
|
||||
currentControllerAxisState.RightRight = 0;
|
||||
currentControllerAxisState.RightLeft = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY:
|
||||
currentControllerAxisState.RightDown = 0;
|
||||
currentControllerAxisState.RightUp = 0;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT: currentControllerAxisState.LTriggerDown = 0; break;
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: currentControllerAxisState.RTriggerDown = 0; break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
DisposePoll () {
|
||||
SDL_DestroyWindow (window);
|
||||
SDL_Quit ();
|
||||
SDL_DestroyWindow (window);
|
||||
SDL_Quit ();
|
||||
}
|
||||
|
||||
ConfigValue
|
||||
StringToConfigEnum (const char *value) {
|
||||
ConfigValue rval;
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); ++i)
|
||||
if (!strcmp (value, ConfigKeyboardButtons[i].string)) {
|
||||
rval.type = keycode;
|
||||
rval.keycode = ConfigKeyboardButtons[i].keycode;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerButtons); ++i)
|
||||
if (!strcmp (value, ConfigControllerButtons[i].string)) {
|
||||
rval.type = button;
|
||||
rval.button = ConfigControllerButtons[i].button;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerAXIS); ++i)
|
||||
if (!strcmp (value, ConfigControllerAXIS[i].string)) {
|
||||
rval.type = axis;
|
||||
rval.axis = ConfigControllerAXIS[i].axis;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigMouseScroll); ++i)
|
||||
if (!strcmp (value, ConfigMouseScroll[i].string)) {
|
||||
rval.type = scroll;
|
||||
rval.scroll = ConfigMouseScroll[i].scroll;
|
||||
return rval;
|
||||
}
|
||||
ConfigValue rval;
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); ++i)
|
||||
if (!strcmp (value, ConfigKeyboardButtons[i].string)) {
|
||||
rval.type = keycode;
|
||||
rval.keycode = ConfigKeyboardButtons[i].keycode;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerButtons); ++i)
|
||||
if (!strcmp (value, ConfigControllerButtons[i].string)) {
|
||||
rval.type = button;
|
||||
rval.button = ConfigControllerButtons[i].button;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerAXIS); ++i)
|
||||
if (!strcmp (value, ConfigControllerAXIS[i].string)) {
|
||||
rval.type = axis;
|
||||
rval.axis = ConfigControllerAXIS[i].axis;
|
||||
return rval;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigMouseScroll); ++i)
|
||||
if (!strcmp (value, ConfigMouseScroll[i].string)) {
|
||||
rval.type = scroll;
|
||||
rval.scroll = ConfigMouseScroll[i].scroll;
|
||||
return rval;
|
||||
}
|
||||
|
||||
printError ("%s (%s): Unknown value\n", __func__, value);
|
||||
return rval;
|
||||
printError ("%s (%s): Unknown value\n", __func__, value);
|
||||
return rval;
|
||||
}
|
||||
|
||||
InternalButtonState
|
||||
GetInternalButtonState (Keybindings bindings) {
|
||||
InternalButtonState buttons = {0};
|
||||
InternalButtonState buttons = {0};
|
||||
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); i++) {
|
||||
if (bindings.keycodes[i] == 0) continue;
|
||||
if (KeyboardIsReleased (bindings.keycodes[i])) buttons.Released = 1;
|
||||
if (KeyboardIsDown (bindings.keycodes[i])) buttons.Down = 1;
|
||||
if (KeyboardIsTapped (bindings.keycodes[i])) buttons.Tapped = 1;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerButtons); i++) {
|
||||
if (bindings.buttons[i] == SDL_CONTROLLER_BUTTON_INVALID) continue;
|
||||
if (ControllerButtonIsReleased (bindings.buttons[i])) buttons.Released = 1;
|
||||
if (ControllerButtonIsDown (bindings.buttons[i])) buttons.Down = 1;
|
||||
if (ControllerButtonIsTapped (bindings.buttons[i])) buttons.Tapped = 1;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerAXIS); i++) {
|
||||
if (bindings.axis[i] == 0) continue;
|
||||
if (float val = ControllerAxisIsReleased (bindings.axis[i])) buttons.Released = val;
|
||||
if (float val = ControllerAxisIsDown (bindings.axis[i])) buttons.Down = val;
|
||||
if (float val = ControllerAxisIsTapped (bindings.axis[i])) buttons.Tapped = val;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigMouseScroll); i++) {
|
||||
if (bindings.scroll[i] == 0) continue;
|
||||
if (GetMouseScrollIsReleased (bindings.scroll[i])) buttons.Released = 1;
|
||||
if (GetMouseScrollIsDown (bindings.scroll[i])) buttons.Down = 1;
|
||||
if (GetMouseScrollIsTapped (bindings.scroll[i])) buttons.Tapped = 1;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); i++) {
|
||||
if (bindings.keycodes[i] == 0) continue;
|
||||
if (KeyboardIsReleased (bindings.keycodes[i])) buttons.Released = 1;
|
||||
if (KeyboardIsDown (bindings.keycodes[i])) buttons.Down = 1;
|
||||
if (KeyboardIsTapped (bindings.keycodes[i])) buttons.Tapped = 1;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerButtons); i++) {
|
||||
if (bindings.buttons[i] == SDL_CONTROLLER_BUTTON_INVALID) continue;
|
||||
if (ControllerButtonIsReleased (bindings.buttons[i])) buttons.Released = 1;
|
||||
if (ControllerButtonIsDown (bindings.buttons[i])) buttons.Down = 1;
|
||||
if (ControllerButtonIsTapped (bindings.buttons[i])) buttons.Tapped = 1;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigControllerAXIS); i++) {
|
||||
if (bindings.axis[i] == 0) continue;
|
||||
if (float val = ControllerAxisIsReleased (bindings.axis[i])) buttons.Released = val;
|
||||
if (float val = ControllerAxisIsDown (bindings.axis[i])) buttons.Down = val;
|
||||
if (float val = ControllerAxisIsTapped (bindings.axis[i])) buttons.Tapped = val;
|
||||
}
|
||||
for (size_t i = 0; i < COUNTOFARR (ConfigMouseScroll); i++) {
|
||||
if (bindings.scroll[i] == 0) continue;
|
||||
if (GetMouseScrollIsReleased (bindings.scroll[i])) buttons.Released = 1;
|
||||
if (GetMouseScrollIsDown (bindings.scroll[i])) buttons.Down = 1;
|
||||
if (GetMouseScrollIsTapped (bindings.scroll[i])) buttons.Tapped = 1;
|
||||
}
|
||||
|
||||
return buttons;
|
||||
return buttons;
|
||||
}
|
||||
|
||||
void
|
||||
SetRumble (int left, int right, int length) {
|
||||
for (size_t i = 0; i < COUNTOFARR (controllers); i++) {
|
||||
if (!controllers[i] || !SDL_GameControllerHasRumble (controllers[i])) continue;
|
||||
for (size_t i = 0; i < COUNTOFARR (controllers); i++) {
|
||||
if (!controllers[i] || !SDL_GameControllerHasRumble (controllers[i])) continue;
|
||||
|
||||
SDL_GameControllerRumble (controllers[i], left, right, length);
|
||||
}
|
||||
SDL_GameControllerRumble (controllers[i], left, right, length);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardIsDown (uint8_t keycode) {
|
||||
return currentKeyboardState[keycode];
|
||||
return currentKeyboardState[keycode];
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardIsUp (uint8_t keycode) {
|
||||
return !KeyboardIsDown (keycode);
|
||||
return !KeyboardIsDown (keycode);
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardIsTapped (uint8_t keycode) {
|
||||
return KeyboardIsDown (keycode) && KeyboardWasUp (keycode);
|
||||
return KeyboardIsDown (keycode) && KeyboardWasUp (keycode);
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardIsReleased (uint8_t keycode) {
|
||||
return KeyboardIsUp (keycode) && KeyboardWasDown (keycode);
|
||||
return KeyboardIsUp (keycode) && KeyboardWasDown (keycode);
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardWasDown (uint8_t keycode) {
|
||||
return lastKeyboardState[keycode];
|
||||
return lastKeyboardState[keycode];
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardWasUp (uint8_t keycode) {
|
||||
return !KeyboardWasDown (keycode);
|
||||
return !KeyboardWasDown (keycode);
|
||||
}
|
||||
|
||||
POINT
|
||||
@@ -500,142 +503,142 @@ GetLastMouseRelativePosition () { return lastMouseState.RelativePosition; }
|
||||
|
||||
void
|
||||
SetMousePosition (POINT newPosition) {
|
||||
currentMouseState.Position = newPosition;
|
||||
currentMouseState.Position = newPosition;
|
||||
}
|
||||
|
||||
bool
|
||||
GetMouseScrollUp () {
|
||||
return currentMouseState.ScrolledUp;
|
||||
return currentMouseState.ScrolledUp;
|
||||
}
|
||||
|
||||
bool
|
||||
GetMouseScrollDown () {
|
||||
return currentMouseState.ScrolledDown;
|
||||
return currentMouseState.ScrolledDown;
|
||||
}
|
||||
|
||||
bool
|
||||
GetWasMouseScrollUp () {
|
||||
return lastMouseState.ScrolledUp;
|
||||
return lastMouseState.ScrolledUp;
|
||||
}
|
||||
|
||||
bool
|
||||
GetWasMouseScrollDown () {
|
||||
return lastMouseState.ScrolledDown;
|
||||
return lastMouseState.ScrolledDown;
|
||||
}
|
||||
|
||||
bool
|
||||
GetMouseScrollIsReleased (Scroll scroll) {
|
||||
if (scroll == MOUSE_SCROLL_UP) return !GetMouseScrollUp () && GetWasMouseScrollUp ();
|
||||
else return !GetMouseScrollDown () && GetWasMouseScrollDown ();
|
||||
if (scroll == MOUSE_SCROLL_UP) return !GetMouseScrollUp () && GetWasMouseScrollUp ();
|
||||
else return !GetMouseScrollDown () && GetWasMouseScrollDown ();
|
||||
}
|
||||
|
||||
bool
|
||||
GetMouseScrollIsDown (Scroll scroll) {
|
||||
if (scroll == MOUSE_SCROLL_UP) return GetMouseScrollUp ();
|
||||
else return GetMouseScrollDown ();
|
||||
if (scroll == MOUSE_SCROLL_UP) return GetMouseScrollUp ();
|
||||
else return GetMouseScrollDown ();
|
||||
}
|
||||
|
||||
bool
|
||||
GetMouseScrollIsTapped (Scroll scroll) {
|
||||
if (scroll == MOUSE_SCROLL_UP) return GetMouseScrollUp () && !GetWasMouseScrollUp ();
|
||||
else return GetMouseScrollDown () && !GetWasMouseScrollDown ();
|
||||
if (scroll == MOUSE_SCROLL_UP) return GetMouseScrollUp () && !GetWasMouseScrollUp ();
|
||||
else return GetMouseScrollDown () && !GetWasMouseScrollDown ();
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonIsDown (SDL_GameControllerButton button) {
|
||||
return currentControllerButtonsState[button];
|
||||
return currentControllerButtonsState[button];
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonIsUp (SDL_GameControllerButton button) {
|
||||
return !ControllerButtonIsDown (button);
|
||||
return !ControllerButtonIsDown (button);
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonWasDown (SDL_GameControllerButton button) {
|
||||
return lastControllerButtonsState[button];
|
||||
return lastControllerButtonsState[button];
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonWasUp (SDL_GameControllerButton button) {
|
||||
return !ControllerButtonWasDown (button);
|
||||
return !ControllerButtonWasDown (button);
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonIsTapped (SDL_GameControllerButton button) {
|
||||
return ControllerButtonIsDown (button) && ControllerButtonWasUp (button);
|
||||
return ControllerButtonIsDown (button) && ControllerButtonWasUp (button);
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerButtonIsReleased (SDL_GameControllerButton button) {
|
||||
return ControllerButtonIsUp (button) && ControllerButtonWasDown (button);
|
||||
return ControllerButtonIsUp (button) && ControllerButtonWasDown (button);
|
||||
}
|
||||
|
||||
float
|
||||
ControllerAxisIsDown (SDLAxis axis) {
|
||||
switch (axis) {
|
||||
case SDL_AXIS_LEFT_LEFT: return currentControllerAxisState.LeftLeft;
|
||||
case SDL_AXIS_LEFT_RIGHT: return currentControllerAxisState.LeftRight;
|
||||
case SDL_AXIS_LEFT_UP: return currentControllerAxisState.LeftUp;
|
||||
case SDL_AXIS_LEFT_DOWN: return currentControllerAxisState.LeftDown;
|
||||
case SDL_AXIS_RIGHT_LEFT: return currentControllerAxisState.RightLeft;
|
||||
case SDL_AXIS_RIGHT_RIGHT: return currentControllerAxisState.RightRight;
|
||||
case SDL_AXIS_RIGHT_UP: return currentControllerAxisState.RightUp;
|
||||
case SDL_AXIS_RIGHT_DOWN: return currentControllerAxisState.RightDown;
|
||||
case SDL_AXIS_LTRIGGER_DOWN: return currentControllerAxisState.LTriggerDown;
|
||||
case SDL_AXIS_RTRIGGER_DOWN: return currentControllerAxisState.RTriggerDown;
|
||||
default: return false;
|
||||
}
|
||||
switch (axis) {
|
||||
case SDL_AXIS_LEFT_LEFT: return currentControllerAxisState.LeftLeft;
|
||||
case SDL_AXIS_LEFT_RIGHT: return currentControllerAxisState.LeftRight;
|
||||
case SDL_AXIS_LEFT_UP: return currentControllerAxisState.LeftUp;
|
||||
case SDL_AXIS_LEFT_DOWN: return currentControllerAxisState.LeftDown;
|
||||
case SDL_AXIS_RIGHT_LEFT: return currentControllerAxisState.RightLeft;
|
||||
case SDL_AXIS_RIGHT_RIGHT: return currentControllerAxisState.RightRight;
|
||||
case SDL_AXIS_RIGHT_UP: return currentControllerAxisState.RightUp;
|
||||
case SDL_AXIS_RIGHT_DOWN: return currentControllerAxisState.RightDown;
|
||||
case SDL_AXIS_LTRIGGER_DOWN: return currentControllerAxisState.LTriggerDown;
|
||||
case SDL_AXIS_RTRIGGER_DOWN: return currentControllerAxisState.RTriggerDown;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerAxisIsUp (SDLAxis axis) {
|
||||
return !ControllerAxisIsDown (axis);
|
||||
return !ControllerAxisIsDown (axis);
|
||||
}
|
||||
|
||||
float
|
||||
ControllerAxisWasDown (SDLAxis axis) {
|
||||
switch (axis) {
|
||||
case SDL_AXIS_LEFT_LEFT: return lastControllerAxisState.LeftLeft;
|
||||
case SDL_AXIS_LEFT_RIGHT: return lastControllerAxisState.LeftRight;
|
||||
case SDL_AXIS_LEFT_UP: return lastControllerAxisState.LeftUp;
|
||||
case SDL_AXIS_LEFT_DOWN: return lastControllerAxisState.LeftDown;
|
||||
case SDL_AXIS_RIGHT_LEFT: return lastControllerAxisState.RightLeft;
|
||||
case SDL_AXIS_RIGHT_RIGHT: return lastControllerAxisState.RightRight;
|
||||
case SDL_AXIS_RIGHT_UP: return lastControllerAxisState.RightUp;
|
||||
case SDL_AXIS_RIGHT_DOWN: return lastControllerAxisState.RightDown;
|
||||
case SDL_AXIS_LTRIGGER_DOWN: return lastControllerAxisState.LTriggerDown;
|
||||
case SDL_AXIS_RTRIGGER_DOWN: return lastControllerAxisState.RTriggerDown;
|
||||
default: return false;
|
||||
}
|
||||
switch (axis) {
|
||||
case SDL_AXIS_LEFT_LEFT: return lastControllerAxisState.LeftLeft;
|
||||
case SDL_AXIS_LEFT_RIGHT: return lastControllerAxisState.LeftRight;
|
||||
case SDL_AXIS_LEFT_UP: return lastControllerAxisState.LeftUp;
|
||||
case SDL_AXIS_LEFT_DOWN: return lastControllerAxisState.LeftDown;
|
||||
case SDL_AXIS_RIGHT_LEFT: return lastControllerAxisState.RightLeft;
|
||||
case SDL_AXIS_RIGHT_RIGHT: return lastControllerAxisState.RightRight;
|
||||
case SDL_AXIS_RIGHT_UP: return lastControllerAxisState.RightUp;
|
||||
case SDL_AXIS_RIGHT_DOWN: return lastControllerAxisState.RightDown;
|
||||
case SDL_AXIS_LTRIGGER_DOWN: return lastControllerAxisState.LTriggerDown;
|
||||
case SDL_AXIS_RTRIGGER_DOWN: return lastControllerAxisState.RTriggerDown;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerAxisWasUp (SDLAxis axis) {
|
||||
return !ControllerAxisWasDown (axis);
|
||||
return !ControllerAxisWasDown (axis);
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerAxisIsTapped (SDLAxis axis) {
|
||||
return ControllerAxisIsDown (axis) && ControllerAxisWasUp (axis);
|
||||
return ControllerAxisIsDown (axis) && ControllerAxisWasUp (axis);
|
||||
}
|
||||
|
||||
bool
|
||||
ControllerAxisIsReleased (SDLAxis axis) {
|
||||
return ControllerAxisIsUp (axis) && ControllerAxisWasDown (axis);
|
||||
return ControllerAxisIsUp (axis) && ControllerAxisWasDown (axis);
|
||||
}
|
||||
|
||||
bool
|
||||
IsButtonTapped (Keybindings bindings) {
|
||||
return GetInternalButtonState (bindings).Tapped;
|
||||
return GetInternalButtonState (bindings).Tapped;
|
||||
}
|
||||
|
||||
bool
|
||||
IsButtonReleased (Keybindings bindings) {
|
||||
return GetInternalButtonState (bindings).Released;
|
||||
return GetInternalButtonState (bindings).Released;
|
||||
}
|
||||
|
||||
float
|
||||
IsButtonDown (Keybindings bindings) {
|
||||
return GetInternalButtonState (bindings).Down;
|
||||
return GetInternalButtonState (bindings).Down;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user