std::unique_ptr<Input::MotionDevice> MotionEmu::Create(const Common::ParamPackage& params) { int update_period = params.Get("update_period", 100); float sensitivity = params.Get("sensitivity", 0.01f); auto device_wrapper = std::make_unique<MotionEmuDeviceWrapper>(update_period, sensitivity); // Previously created device is disconnected here. Having two motion devices for 3DS is not // expected. current_device = device_wrapper->device; return std::move(device_wrapper); }
static void SetAnalogButton(const Common::ParamPackage& input_param, Common::ParamPackage& analog_param, const std::string& button_name) { if (analog_param.Get("engine", "") != "analog_from_button") { analog_param = { {"engine", "analog_from_button"}, {"modifier_scale", "0.5"}, }; } analog_param.Set(button_name, input_param.Serialize()); }
/** * Creates a button device from a joystick button * @param params contains parameters for creating the device: * - "joystick": the index of the joystick to bind * - "button"(optional): the index of the button to bind * - "hat"(optional): the index of the hat to bind as direction buttons * - "axis"(optional): the index of the axis to bind * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", * "down", "left" or "right" * - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is * triggered if the axis value crosses * - "direction"(only used for axis): "+" means the button is triggered when the axis value * is greater than the threshold; "-" means the button is triggered when the axis value * is smaller than the threshold */ std::unique_ptr<Input::ButtonDevice> Create(const Common::ParamPackage& params) override { const int joystick_index = params.Get("joystick", 0); if (params.Has("hat")) { const int hat = params.Get("hat", 0); const std::string direction_name = params.Get("direction", ""); Uint8 direction; if (direction_name == "up") { direction = SDL_HAT_UP; } else if (direction_name == "down") { direction = SDL_HAT_DOWN; } else if (direction_name == "left") { direction = SDL_HAT_LEFT; } else if (direction_name == "right") { direction = SDL_HAT_RIGHT; } else { direction = 0; } return std::make_unique<SDLDirectionButton>(GetJoystick(joystick_index), hat, direction); } if (params.Has("axis")) { const int axis = params.Get("axis", 0); const float threshold = params.Get("threshold", 0.5f); const std::string direction_name = params.Get("direction", ""); bool trigger_if_greater; if (direction_name == "+") { trigger_if_greater = true; } else if (direction_name == "-") { trigger_if_greater = false; } else { trigger_if_greater = true; LOG_ERROR(Input, "Unknown direction %s", direction_name.c_str()); } return std::make_unique<SDLAxisButton>(GetJoystick(joystick_index), axis, threshold, trigger_if_greater); } const int button = params.Get("button", 0); return std::make_unique<SDLButton>(GetJoystick(joystick_index), button); }
/** * Creates analog device from joystick axes * @param params contains parameters for creating the device: * - "joystick": the index of the joystick to bind * - "axis_x": the index of the axis to be bind as x-axis * - "axis_y": the index of the axis to be bind as y-axis */ std::unique_ptr<Input::AnalogDevice> Create(const Common::ParamPackage& params) override { const int joystick_index = params.Get("joystick", 0); const int axis_x = params.Get("axis_x", 0); const int axis_y = params.Get("axis_y", 1); return std::make_unique<SDLAnalog>(GetJoystick(joystick_index), axis_x, axis_y); }