#include "playstation_mouse.h" #include "common/assert.h" #include "common/log.h" #include "common/state_wrapper.h" #include "gpu.h" #include "host_display.h" #include "host_interface.h" #include "system.h" #include Log_SetChannel(PlayStationMouse); PlayStationMouse::PlayStationMouse(System* system) : m_system(system) { m_last_host_position_y = system->GetHostInterface()->GetDisplay()->GetMousePositionX(); m_last_host_position_y = system->GetHostInterface()->GetDisplay()->GetMousePositionY(); } PlayStationMouse::~PlayStationMouse() = default; ControllerType PlayStationMouse::GetType() const { return ControllerType::NamcoGunCon; } std::optional PlayStationMouse::GetAxisCodeByName(std::string_view axis_name) const { return StaticGetAxisCodeByName(axis_name); } std::optional PlayStationMouse::GetButtonCodeByName(std::string_view button_name) const { return StaticGetButtonCodeByName(button_name); } void PlayStationMouse::Reset() { m_transfer_state = TransferState::Idle; } bool PlayStationMouse::DoState(StateWrapper& sw) { if (!Controller::DoState(sw)) return false; sw.Do(&m_button_state); sw.Do(&m_delta_x); sw.Do(&m_delta_y); sw.Do(&m_transfer_state); return true; } void PlayStationMouse::SetAxisState(s32 axis_code, float value) {} void PlayStationMouse::SetButtonState(Button button, bool pressed) { static constexpr std::array(Button::Count)> indices = {{11, 10}}; if (pressed) m_button_state &= ~(u16(1) << indices[static_cast(button)]); else m_button_state |= u16(1) << indices[static_cast(button)]; } void PlayStationMouse::SetButtonState(s32 button_code, bool pressed) { if (button_code < 0 || button_code >= static_cast(Button::Count)) return; SetButtonState(static_cast