devilutionX/Source/controls
Stefan Mielke dfece830ad
Controller Inventory Improvements (#1885)
- controller: Move inventory coordinates logic to outside of the method to ease visibility and changes; Fix cursor offset when holding items on the inventory; Move cursor between edges of the inventory to ease movement inside.
- Renamed InvGetCoord to InvGetSlotCoord.
- adding more SLOTXY_xxx options to improve controls code
- changed inventory slots comment to improve legibility
- fixing bugs and centering sprite on the slot
- fix belt item movement
- slots 9 and 10 move to belt 8 when moving down using a controller
- creating function to return correct mousePos slot to remove code duplication
- create BeltGetSlotCoord to get coords for belts and remove duplicates; code cleanup.
- adding INV_ROW_SLOT_SIZE to hold the amount of slots on an inv row
- improve code for moving item to the belt when it's the last 2 slots.
- fix bug that would not update the cursor position when going up on certain conditions.
- equip equipment when pressing [use] on the controller
- moving items in the inventory as a single instance, and blocking them from moving accordingly.
- move item to belt when clicking the spell button (Y)
- resetting the cursor takes into consideration if the current slot has an item that is bigger than 1x1
- change whitespace to tabs on inv.h changes
- fixing plrctrls.cpp formatting
2021-05-09 17:00:48 +02:00
..
devices Fix fmt issue with a nullptr controller mapping 2021-05-02 13:14:59 +02:00
axis_direction.cpp 🎨 Run readability-identifier-naming on all src sub-folders 2021-04-22 03:53:35 +02:00
axis_direction.h Modernize deprecated headers 2021-04-25 02:50:31 +02:00
controller.cpp 🎨 llvm-include-order 2021-04-19 20:11:20 +02:00
controller.h 🚚 Restructure files 2021-04-16 03:57:22 +02:00
controller_buttons.h Modernize deprecated headers 2021-04-25 02:50:31 +02:00
controller_motion.cpp 🎨 Run readability-identifier-naming on all src sub-folders 2021-04-22 03:53:35 +02:00
controller_motion.h Fix SDL1 Builds 2021-04-22 15:07:31 +02:00
game_controls.cpp 🎨 Correct type checks in src sub-folder 2021-04-22 20:33:24 +02:00
game_controls.h Modernize deprecated headers 2021-04-25 02:50:31 +02:00
keymapper.cpp 🎨 Run clang-format 2021-05-07 23:26:39 +02:00
keymapper.hpp Add a keymapper 2021-05-03 17:51:40 +02:00
menu_controls.cpp 🎨 Correct type checks in src sub-folder 2021-04-22 20:33:24 +02:00
menu_controls.h Modernize deprecated headers 2021-04-25 02:50:31 +02:00
modifier_hints.cpp ♻️Replace PrintGameStr with DrawString 2021-05-08 18:48:19 +02:00
modifier_hints.h 🧹 performance-unnecessary-value-param 2021-04-22 00:08:19 +02:00
plrctrls.cpp Controller Inventory Improvements (#1885) 2021-05-09 17:00:48 +02:00
plrctrls.h Modernize deprecated headers 2021-04-25 02:50:31 +02:00
README.md 🎨 Format code 2021-04-19 00:37:33 +02:00
remap_keyboard.h 🚚 Restructure files 2021-04-16 03:57:22 +02:00
touch.cpp 🖌️ Refurbish tables in source code (clang-format off) 2021-04-25 23:48:25 +02:00
touch.h 🚚 Restructure files 2021-04-16 03:57:22 +02:00

#Controls handling

DevilutionX supports mouse & keyboard and gamepad input.

This directory currently mostly handles gamepad input.

Low-level gamepad handling is abstracted and 3 implementations are provided:

  1. SDL2 controller API.

  2. SDL 1&2 joystick API.

    This can be used in SDL1 joystick platforms and for mapping additional buttons not defined by SDL2 controller mappings (e.g. additional Nintendo Switch arrows).

  3. Keyboard keys acting as controller buttons.

    This can be used for testing, or on devices where this is the only or the easiest API to use (e.g. RetroFW).

Example keyboard-as-controller build flags:

cmake .. -DUSE_SDL1=ON -DHAS_KBCTRL=1 -DPREFILL_PLAYER_NAME=ON \
-DKBCTRL_BUTTON_DPAD_LEFT=SDLK_LEFT \
-DKBCTRL_BUTTON_DPAD_RIGHT=SDLK_RIGHT \
-DKBCTRL_BUTTON_DPAD_UP=SDLK_UP \
-DKBCTRL_BUTTON_DPAD_DOWN=SDLK_DOWN \
-DKBCTRL_BUTTON_X=SDLK_y \
-DKBCTRL_BUTTON_Y=SDLK_x \
-DKBCTRL_BUTTON_B=SDLK_a \
-DKBCTRL_BUTTON_A=SDLK_b \
-DKBCTRL_BUTTON_RIGHTSHOULDER=SDLK_RIGHTBRACKET \
-DKBCTRL_BUTTON_LEFTSHOULDER=SDLK_LEFTBRACKET \
-DKBCTRL_BUTTON_LEFTSTICK=SDLK_TAB \
-DKBCTRL_BUTTON_START=SDLK_RETURN \
-DKBCTRL_BUTTON_BACK=SDLK_LSHIFT