mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-17 07:55:46 -04:00
OSD: Add controller input display overlay
This commit is contained in:
@ -104,6 +104,16 @@ std::optional<s32> AnalogController::GetButtonCodeByName(std::string_view button
|
||||
return StaticGetButtonCodeByName(button_name);
|
||||
}
|
||||
|
||||
float AnalogController::GetAxisState(s32 axis_code) const
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
return 0.0f;
|
||||
|
||||
// 0..255 -> -1..1
|
||||
const float value = (((static_cast<float>(m_axis_state[static_cast<s32>(axis_code)]) / 255.0f) * 2.0f) - 1.0f);
|
||||
return std::clamp(value / m_axis_scale, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
void AnalogController::SetAxisState(s32 axis_code, float value)
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
@ -124,6 +134,15 @@ void AnalogController::SetAxisState(Axis axis, u8 value)
|
||||
m_axis_state[static_cast<u8>(axis)] = value;
|
||||
}
|
||||
|
||||
bool AnalogController::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Analog))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void AnalogController::SetButtonState(Button button, bool pressed)
|
||||
{
|
||||
if (button == Button::Analog)
|
||||
|
@ -59,7 +59,9 @@ public:
|
||||
void Reset() override;
|
||||
bool DoState(StateWrapper& sw, bool ignore_input_state) override;
|
||||
|
||||
float GetAxisState(s32 axis_code) const override;
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
u32 GetButtonStateBits() const override;
|
||||
std::optional<u32> GetAnalogInputBytes() const override;
|
||||
|
@ -69,6 +69,16 @@ std::optional<s32> AnalogJoystick::GetButtonCodeByName(std::string_view button_n
|
||||
return StaticGetButtonCodeByName(button_name);
|
||||
}
|
||||
|
||||
float AnalogJoystick::GetAxisState(s32 axis_code) const
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
return 0.0f;
|
||||
|
||||
// 0..255 -> -1..1
|
||||
const float value = (((static_cast<float>(m_axis_state[static_cast<s32>(axis_code)]) / 255.0f) * 2.0f) - 1.0f);
|
||||
return std::clamp(value / m_axis_scale, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
void AnalogJoystick::SetAxisState(s32 axis_code, float value)
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
@ -89,6 +99,15 @@ void AnalogJoystick::SetAxisState(Axis axis, u8 value)
|
||||
m_axis_state[static_cast<u8>(axis)] = value;
|
||||
}
|
||||
|
||||
bool AnalogJoystick::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Count))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void AnalogJoystick::SetButtonState(Button button, bool pressed)
|
||||
{
|
||||
if (button == Button::Mode)
|
||||
|
@ -57,7 +57,9 @@ public:
|
||||
void Reset() override;
|
||||
bool DoState(StateWrapper& sw, bool apply_input_state) override;
|
||||
|
||||
float GetAxisState(s32 axis_code) const override;
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
u32 GetButtonStateBits() const override;
|
||||
std::optional<u32> GetAnalogInputBytes() const override;
|
||||
|
@ -26,8 +26,18 @@ bool Controller::Transfer(const u8 data_in, u8* data_out)
|
||||
return false;
|
||||
}
|
||||
|
||||
float Controller::GetAxisState(s32 axis_code) const
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void Controller::SetAxisState(s32 axis_code, float value) {}
|
||||
|
||||
bool Controller::GetButtonState(s32 button_code) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void Controller::SetButtonState(s32 button_code, bool pressed) {}
|
||||
|
||||
u32 Controller::GetButtonStateBits() const
|
||||
|
@ -45,9 +45,15 @@ public:
|
||||
// Returns the value of ACK, as well as filling out_data.
|
||||
virtual bool Transfer(const u8 data_in, u8* data_out);
|
||||
|
||||
/// Changes the specified axis state. Values are normalized from -1..1.
|
||||
virtual float GetAxisState(s32 axis_code) const;
|
||||
|
||||
/// Changes the specified axis state. Values are normalized from -1..1.
|
||||
virtual void SetAxisState(s32 axis_code, float value);
|
||||
|
||||
/// Returns the specified button state.
|
||||
virtual bool GetButtonState(s32 button_code) const;
|
||||
|
||||
/// Changes the specified button state.
|
||||
virtual void SetButtonState(s32 button_code, bool pressed);
|
||||
|
||||
|
@ -42,7 +42,14 @@ bool DigitalController::DoState(StateWrapper& sw, bool apply_input_state)
|
||||
return true;
|
||||
}
|
||||
|
||||
void DigitalController::SetAxisState(s32 axis_code, float value) {}
|
||||
bool DigitalController::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Count))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void DigitalController::SetButtonState(Button button, bool pressed)
|
||||
{
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
void Reset() override;
|
||||
bool DoState(StateWrapper& sw, bool apply_input_state) override;
|
||||
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
u32 GetButtonStateBits() const override;
|
||||
|
||||
|
@ -56,7 +56,14 @@ bool NamcoGunCon::DoState(StateWrapper& sw, bool apply_input_state)
|
||||
return true;
|
||||
}
|
||||
|
||||
void NamcoGunCon::SetAxisState(s32 axis_code, float value) {}
|
||||
bool NamcoGunCon::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code > static_cast<s32>(Button::B))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void NamcoGunCon::SetButtonState(Button button, bool pressed)
|
||||
{
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
void LoadSettings(const char* section) override;
|
||||
bool GetSoftwareCursor(const Common::RGBA8Image** image, float* image_scale, bool* relative_mode) override;
|
||||
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
|
||||
void ResetTransferState() override;
|
||||
|
@ -48,6 +48,16 @@ bool NeGcon::DoState(StateWrapper& sw, bool apply_input_state)
|
||||
return true;
|
||||
}
|
||||
|
||||
float NeGcon::GetAxisState(s32 axis_code) const
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
return 0.0f;
|
||||
|
||||
// 0..255 -> -1..1
|
||||
const float value = (((static_cast<float>(m_axis_state[static_cast<s32>(axis_code)]) / 255.0f) * 2.0f) - 1.0f);
|
||||
return std::clamp(value, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
void NeGcon::SetAxisState(s32 axis_code, float value)
|
||||
{
|
||||
if (axis_code < 0 || axis_code >= static_cast<s32>(Axis::Count))
|
||||
@ -78,6 +88,15 @@ void NeGcon::SetAxisState(Axis axis, u8 value)
|
||||
m_axis_state[static_cast<u8>(axis)] = value;
|
||||
}
|
||||
|
||||
bool NeGcon::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Count))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void NeGcon::SetButtonState(s32 button_code, bool pressed)
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Count))
|
||||
|
@ -48,7 +48,10 @@ public:
|
||||
void Reset() override;
|
||||
bool DoState(StateWrapper& sw, bool apply_input_state) override;
|
||||
|
||||
float GetAxisState(s32 axis_code) const override;
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
|
||||
void ResetTransferState() override;
|
||||
|
@ -59,7 +59,14 @@ bool PlayStationMouse::DoState(StateWrapper& sw, bool apply_input_state)
|
||||
return true;
|
||||
}
|
||||
|
||||
void PlayStationMouse::SetAxisState(s32 axis_code, float value) {}
|
||||
bool PlayStationMouse::GetButtonState(s32 button_code) const
|
||||
{
|
||||
if (button_code < 0 || button_code >= static_cast<s32>(Button::Count))
|
||||
return false;
|
||||
|
||||
const u16 bit = u16(1) << static_cast<u8>(button_code);
|
||||
return ((m_button_state & bit) == 0);
|
||||
}
|
||||
|
||||
void PlayStationMouse::SetButtonState(Button button, bool pressed)
|
||||
{
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
void Reset() override;
|
||||
bool DoState(StateWrapper& sw, bool apply_input_state) override;
|
||||
|
||||
void SetAxisState(s32 axis_code, float value) override;
|
||||
bool GetButtonState(s32 button_code) const override;
|
||||
void SetButtonState(s32 button_code, bool pressed) override;
|
||||
|
||||
void ResetTransferState() override;
|
||||
|
Reference in New Issue
Block a user