This introduces abstractions for a game key (`wxGameKey`), a game
control (`wxGameControl`) and a common global handler for in-game
user input processing (`wxGameControlState`).
User configuration is changed from a vector to a map of `wxGameControl`
to a set of `wxUserInput`, which simplifies input configuration updates.
User input processing for in-game controls is now unified between
keyboard and joypad input, and is much faster in general since access
to game control state is now always logarithmic rather than linear.
This comes at the expense of slightly slower user input configuration
updates. However, in the worst case scenario, this is still done in
O(log(n)).
This removes all uses of `wxJoyKeyBinding`. However, some uses of the
key, mod, joy triplets remain and will be cleaned up in follow-up PRs.
Issue: #745
Previously, a manual polling of every joystick was performed every 25ms,
resulting in many CPU resources being wasted. This seems to have been
put in place to deal with issues in SDL where joysticks connected after
SDL was initialized did not fire SDL events properly. From manual
testing, this issue seems to have been fixed.
This also fixes a bug in handling of legacy joystick hats, where an
incorrect conversion for the event value was performed.
Finally, this fixes minor typoes and renames
`wxSDLJoyState::ProcessEvent()` to `wxSDLJoyState::ProcessSDLEvent()` to
suppress a warning about a method override.
This introduces a new abstraction for any user input. The long-term goal
is to replace every usage of "custom" {key, mod, joy} triplets in the
code base with this new class.
This class implements comparison operators, allowing for faster access
in a set or as a key in a map, compared to the vectors currently used.
Issue: #745
The actual package name for libsdl2 is libsdl2-2.0-0 not libsdl2-2.0 in
Debian/Ubuntu and probably others, and this only worked by accident
due to apt doing a regex search for packages.
Get the correct package for the latest version of libsdl2 from
apt-cache.
Also fix the other lib package searches via apt-cache to return the
latest version.
Resolve#882.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Add wxJoystick to abstract what was previously referred to as
|player_index|. This is a first step towards a larger refactor of
input handling.
* Remove "SDL" from types that are not directly SDL-related, namely
"wxSDLJoyEvent", "wxSDLControl".
* Rename "wxSDLJoy" into "wxJoyPoller". This clarifies the use of this
class.
Issue: #745
ccache supports MSVC now, so don't disable it for MSVC builds.
Remove the global RULE_LAUNCH_COMPILE property because it breaks
resource compilation on MSVC and just use CMAKE_CXX_COMPILER_LAUNCHER
etc..
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Thanks to @ZachBacon in 1e0eea3c (recording: fix ffmpeg5 compat, 2022-03-18) the build works with ffmpeg5 from brew.
Update build instructions from installdeps to not disable ffmpeg
anymore.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Replace wxmac obsolete package with wxwidgets.
Use brew install -f (--force) to install all deps.
Unlink and relink gettext, wxwidgets and ffmpeg for every invocation.
Add -DENABLE_FFMPEG=FALSE to cmake invocation instructions because brew
has ffmpeg 5 and we cannot build with it yet.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use file(GLOB ${lib_name}*.lib) to detect the appropriate suffixes for
wx dependency libs, because the suffix keeps changing, sometimes there
is a 'd' added for debug builds and sometimes it changes to not adding
the suffix, this will make the code more robust and lead to fewer build
failures.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Stop setting the build_prefix* variables as they are no longer used and
relying on build trees being available would break /installed caches
etc..
Signed-off-by: Rafael Kitover <rkitover@gmail.com>