mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add Joystick type detection and Xbox controller support
* Add joystick type detection (with joystick_type setting to override it) * Fix multiple joysticks from interfering with each other by only reading from one (add joystick_id setting) * Add support for Xbox controllers
This commit is contained in:
parent
351cc2e79a
commit
bce0d458d8
8 changed files with 146 additions and 37 deletions
|
@ -127,10 +127,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
|
|||
|
||||
device->setResizable(true);
|
||||
|
||||
if (random_input)
|
||||
input = new RandomInputHandler();
|
||||
else
|
||||
input = new RealInputHandler(device, receiver);
|
||||
init_input();
|
||||
|
||||
smgr = device->getSceneManager();
|
||||
smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);
|
||||
|
@ -337,6 +334,33 @@ bool ClientLauncher::init_engine()
|
|||
return device != NULL;
|
||||
}
|
||||
|
||||
void ClientLauncher::init_input()
|
||||
{
|
||||
if (random_input)
|
||||
input = new RandomInputHandler();
|
||||
else
|
||||
input = new RealInputHandler(device, receiver);
|
||||
|
||||
if (g_settings->getBool("enable_joysticks")) {
|
||||
irr::core::array<irr::SJoystickInfo> infos;
|
||||
std::vector<irr::SJoystickInfo> joystick_infos;
|
||||
|
||||
// Make sure this is called maximum once per
|
||||
// irrlicht device, otherwise it will give you
|
||||
// multiple events for the same joystick.
|
||||
if (device->activateJoysticks(infos)) {
|
||||
infostream << "Joystick support enabled" << std::endl;
|
||||
joystick_infos.reserve(infos.size());
|
||||
for (u32 i = 0; i < infos.size(); i++) {
|
||||
joystick_infos.push_back(infos[i]);
|
||||
}
|
||||
input->joystick.onJoystickConnect(joystick_infos);
|
||||
} else {
|
||||
errorstream << "Could not activate joystick support." << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ClientLauncher::launch_game(std::string &error_message,
|
||||
bool reconnect_requested, GameParams &game_params,
|
||||
const Settings &cmd_args)
|
||||
|
@ -566,25 +590,8 @@ bool ClientLauncher::create_engine_device()
|
|||
|
||||
device = createDeviceEx(params);
|
||||
|
||||
if (device) {
|
||||
if (g_settings->getBool("enable_joysticks")) {
|
||||
irr::core::array<irr::SJoystickInfo> infos;
|
||||
std::vector<irr::SJoystickInfo> joystick_infos;
|
||||
// Make sure this is called maximum once per
|
||||
// irrlicht device, otherwise it will give you
|
||||
// multiple events for the same joystick.
|
||||
if (device->activateJoysticks(infos)) {
|
||||
infostream << "Joystick support enabled" << std::endl;
|
||||
joystick_infos.reserve(infos.size());
|
||||
for (u32 i = 0; i < infos.size(); i++) {
|
||||
joystick_infos.push_back(infos[i]);
|
||||
}
|
||||
} else {
|
||||
errorstream << "Could not activate joystick support." << std::endl;
|
||||
}
|
||||
}
|
||||
if (device)
|
||||
porting::initIrrlicht(device);
|
||||
}
|
||||
|
||||
return device != NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue