mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 14:50:41 -07:00
bd2fbfcb67
## Link to GitHub Issue or related Pull Request, if one exists Fixes #833 ## Description of change Last couple PRs - such as #820 #827 #828 - made the native touch hook & touch injection using `InjectTouchInput` the default path, since it performs much more reliably with both real touch screens and mouse (or any other synthetic source). However, user has reported that WINE lacks `InjectTouchInput` which means this won't work. As a fix, revive the old wintouchemu code. Native touch is still the default, but under following circumstances: 1. if `-touchemuforce` is set, or 2. if any of the required Windows touch APIs are unavailable then we fail over from native touch to wintouchemu code. For Linux, condition #2 would be hit during init, and gracefully switch over. Caveat: the poke code for IIDX and Nost will continue to require native touch, I do not want to maintain two paths for this. This means that iidx poke will stop working on Linux, unfortunately. ## Testing Tested on Windows with `-touchemuforce` set. This is mostly reverting Linux code path back to where we were last release, so this should just work with wine.
78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <mutex>
|
|
#include <optional>
|
|
#include <vector>
|
|
|
|
#include "games/game.h"
|
|
|
|
#include "external/robin_hood.h"
|
|
#include "util/tapeled.h"
|
|
|
|
namespace games::iidx {
|
|
|
|
enum class iidx_aio_emulation_state {
|
|
unknown,
|
|
bi2a_com2,
|
|
bi2x_hook
|
|
};
|
|
|
|
// settings
|
|
|
|
extern bool FLIP_CAMS;
|
|
extern std::optional<bool> DISABLE_CAMS;
|
|
extern bool TDJ_CAMERA;
|
|
extern bool TDJ_CAMERA_PREFER_16_9;
|
|
extern std::optional<std::string> TDJ_CAMERA_OVERRIDE;
|
|
|
|
extern bool TDJ_MODE;
|
|
extern bool FORCE_720P;
|
|
extern bool DISABLE_ESPEC_IO;
|
|
extern bool NATIVE_TOUCH;
|
|
extern bool ENABLE_POKE;
|
|
extern std::optional<std::string> SOUND_OUTPUT_DEVICE;
|
|
extern std::optional<std::string> ASIO_DRIVER;
|
|
extern uint8_t DIGITAL_TT_SENS;
|
|
extern std::optional<std::string> SUBSCREEN_OVERLAY_SIZE;
|
|
extern std::optional<std::string> SCREEN_MODE;
|
|
|
|
// state
|
|
extern char IIDXIO_LED_TICKER[10];
|
|
extern bool IIDXIO_LED_TICKER_READONLY;
|
|
extern std::mutex IIDX_LED_TICKER_LOCK;
|
|
extern bool IIDX_TDJ_MONITOR_WARNING;
|
|
|
|
constexpr int IIDX_TAPELED_TOTAL = 17;
|
|
// data mapping
|
|
extern tapeledutils::tape_led TAPELED_MAPPING[IIDX_TAPELED_TOTAL];
|
|
extern iidx_aio_emulation_state CURRENT_IO_EMULATION_STATE;
|
|
|
|
class IIDXGame : public games::Game {
|
|
public:
|
|
IIDXGame();
|
|
virtual ~IIDXGame() override;
|
|
|
|
virtual void attach() override;
|
|
virtual void pre_attach() override;
|
|
virtual void post_attach() override;
|
|
virtual void detach() override;
|
|
|
|
private:
|
|
void detect_sound_output_device();
|
|
};
|
|
|
|
// helper methods
|
|
uint32_t get_pad();
|
|
void write_lamp(uint16_t lamp);
|
|
void write_led(uint8_t led);
|
|
void write_top_lamp(uint8_t top_lamp);
|
|
void write_top_neon(uint8_t top_neon);
|
|
unsigned char get_tt(int player, bool slow);
|
|
unsigned char get_slider(uint8_t slider);
|
|
const char* get_16seg();
|
|
bool is_tdj_fhd();
|
|
void apply_audio_hacks();
|
|
|
|
void update_io_emulation_state(iidx_aio_emulation_state state);
|
|
}
|