#include "analog_controller.h" #include "YBaseLib/Log.h" #include "common/state_wrapper.h" Log_SetChannel(AnalogController); AnalogController::AnalogController() { m_axis_state.fill(0x80); } AnalogController::~AnalogController() = default; ControllerType AnalogController::GetType() const { return ControllerType::AnalogController; } void AnalogController::Reset() { m_analog_mode = false; m_configuration_mode = false; m_command_param = 0; } bool AnalogController::DoState(StateWrapper& sw) { if (!Controller::DoState(sw)) return false; sw.Do(&m_analog_mode); sw.Do(&m_configuration_mode); sw.Do(&m_command_param); sw.Do(&m_state); return true; } std::optional AnalogController::GetAxisCodeByName(std::string_view axis_name) const { return StaticGetAxisCodeByName(axis_name); } std::optional AnalogController::GetButtonCodeByName(std::string_view button_name) const { return StaticGetButtonCodeByName(button_name); } void AnalogController::SetAxisState(s32 axis_code, float value) { if (axis_code < 0 || axis_code >= static_cast(Button::Count)) return; // -1..1 -> 0..255 const u8 u8_value = static_cast(std::clamp(((value + 1.0f) / 2.0f) * 255.0f, 0.0f, 255.0f)); SetAxisState(static_cast(axis_code), u8_value); } void AnalogController::SetAxisState(Axis axis, u8 value) { m_axis_state[static_cast(axis)] = value; // TODO: Map to buttons in digital mode } void AnalogController::SetButtonState(Button button, bool pressed) { if (pressed) m_button_state &= ~(u16(1) << static_cast(button)); else m_button_state |= u16(1) << static_cast(button); } void AnalogController::SetButtonState(s32 button_code, bool pressed) { if (button_code < 0 || button_code >= static_cast(Button::Count)) return; SetButtonState(static_cast