From fad3d798959b789b66d29e7ddf54373ffc54503e Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 19 Dec 2020 13:33:22 +1000 Subject: [PATCH] NamcoGuncon: Add button to shoot offscreen --- src/core/namco_guncon.cpp | 12 +++++++++++- src/core/namco_guncon.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/namco_guncon.cpp b/src/core/namco_guncon.cpp index 6a6a4cade..eda538f28 100644 --- a/src/core/namco_guncon.cpp +++ b/src/core/namco_guncon.cpp @@ -60,6 +60,13 @@ void NamcoGunCon::SetAxisState(s32 axis_code, float value) {} void NamcoGunCon::SetButtonState(Button button, bool pressed) { + if (button == Button::ShootOffscreen) + { + m_shoot_offscreen = pressed; + SetButtonState(Button::Trigger, pressed); + return; + } + static constexpr std::array(Button::Count)> indices = {{13, 3, 14}}; if (pressed) m_button_state &= ~(u16(1) << indices[static_cast(button)]); @@ -169,7 +176,8 @@ void NamcoGunCon::UpdatePosition() // are we within the active display area? u32 tick, line; - if (mouse_x < 0 || mouse_y < 0 || !g_gpu->ConvertScreenCoordinatesToBeamTicksAndLines(mouse_x, mouse_y, &tick, &line)) + if (mouse_x < 0 || mouse_y < 0 || + !g_gpu->ConvertScreenCoordinatesToBeamTicksAndLines(mouse_x, mouse_y, &tick, &line) || m_shoot_offscreen) { Log_DebugPrintf("Lightgun out of range for window coordinates %d,%d", mouse_x, mouse_y); m_position_x = 0x01; @@ -204,6 +212,7 @@ std::optional NamcoGunCon::StaticGetButtonCodeByName(std::string_view butto } BUTTON(Trigger); + BUTTON(ShootOffscreen); BUTTON(A); BUTTON(B); @@ -220,6 +229,7 @@ Controller::AxisList NamcoGunCon::StaticGetAxisNames() Controller::ButtonList NamcoGunCon::StaticGetButtonNames() { return {{TRANSLATABLE("NamcoGunCon", "Trigger"), static_cast(Button::Trigger)}, + {TRANSLATABLE("NamcoGunCon", "ShootOffscreen"), static_cast(Button::ShootOffscreen)}, {TRANSLATABLE("NamcoGunCon", "A"), static_cast(Button::A)}, {TRANSLATABLE("NamcoGunCon", "B"), static_cast(Button::B)}}; } diff --git a/src/core/namco_guncon.h b/src/core/namco_guncon.h index 4c96a8c7b..c813d969c 100644 --- a/src/core/namco_guncon.h +++ b/src/core/namco_guncon.h @@ -12,6 +12,7 @@ public: Trigger = 0, A = 1, B = 2, + ShootOffscreen = 3, Count }; @@ -66,6 +67,7 @@ private: u16 m_button_state = UINT16_C(0xFFFF); u16 m_position_x = 0; u16 m_position_y = 0; + bool m_shoot_offscreen = false; TransferState m_transfer_state = TransferState::Idle; };