From d54de6dddfb0d3c60050ad76255e415ab190620c Mon Sep 17 00:00:00 2001 From: Jaby Date: Thu, 4 Jan 2024 21:36:40 -0600 Subject: [PATCH] Read analoge stick positions --- .../ControllerTest/controller_state.cpp | 14 ++++-- .../ControllerTest/controller_test.cpp | 4 +- .../include/controller_state.hpp | 3 +- include/PSX/Periphery/controller.hpp | 43 +++++++++++++++++++ 4 files changed, 59 insertions(+), 5 deletions(-) diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp index ee8e2de9..cef48b0d 100644 --- a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp @@ -2,7 +2,7 @@ #include namespace ControllerTest { - using DigitalButton = Periphery::GenericController::Button; + using DigitalButton = Periphery::AnalogeController::Button; using namespace JabyEngine; // This should go to JabyEngine eventually @@ -41,10 +41,11 @@ namespace ControllerTest { } } - void ControllerState :: update(const Periphery::GenericController& controller) { + void ControllerState :: update(const Periphery::AnalogeController& controller, JabyEngine::FontWriter& font_writer) { static const DigitalButton ButtonSprtMap[] = { DigitalButton::Triangle, DigitalButton::Circle, DigitalButton::Cross, DigitalButton::Square, - DigitalButton::ST, DigitalButton::SEL, DigitalButton::L1, DigitalButton::L2, DigitalButton::R1, DigitalButton::R2 + DigitalButton::ST, DigitalButton::SEL, DigitalButton::L1, DigitalButton::L2, DigitalButton::R1, DigitalButton::R2, + DigitalButton::L3, DigitalButton::R3 }; static const DigitalButton ArrowPolyMap[] = { DigitalButton::Up, DigitalButton::Right, DigitalButton::Down, DigitalButton::Left @@ -61,6 +62,13 @@ namespace ControllerTest { } set_active(cur_button_sprts[12], controller.header.state == Periphery::RawController::State::Disconnected); + + // Text stuff down here + const auto left_stick = controller.get_left_stick_pos(); + const auto right_stick = controller.get_right_stick_pos(); + + auto cursor = State::create(Make::PositionI16(98, 0), 0); + font_writer.write(cursor, "Right: %i, %i\n Left: %i, %i", right_stick.x, right_stick.y, left_stick.x, left_stick.y); } void ControllerState :: render() { diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp index 243bd137..78afc443 100644 --- a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp @@ -1,4 +1,5 @@ #include "../../../include/shared.hpp" +#include "../../include/font_writer.hpp" #include "include/controller_state.hpp" #include #include @@ -19,12 +20,13 @@ namespace ControllerTest { return true; } - controller_state.update(Periphery::get_primary_controller_as()); + controller_state.update(Periphery::get_primary_controller_as(), FontWriter::new_font_writer); return false; } static void render() { controller_state.render(); + FontWriter::new_font_writer.render(); Shared::back_menu.render(); } diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp b/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp index 9b6dacf9..aa242e66 100644 --- a/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp @@ -1,5 +1,6 @@ #pragma once #include "controller_test_assets.hpp" +#include #include #include @@ -60,7 +61,7 @@ namespace ControllerTest { } void setup(); - void update(const Periphery::GenericController& controller); + void update(const Periphery::AnalogeController& controller, JabyEngine::FontWriter& font_writer); void render(); }; } \ No newline at end of file diff --git a/include/PSX/Periphery/controller.hpp b/include/PSX/Periphery/controller.hpp index 77d438c4..da676359 100644 --- a/include/PSX/Periphery/controller.hpp +++ b/include/PSX/Periphery/controller.hpp @@ -1,4 +1,5 @@ #pragma once +#include "../GPU/gpu_types.hpp" #include "raw_controller.hpp" namespace JabyEngine { @@ -55,6 +56,48 @@ namespace JabyEngine { } }; + class AnalogeController : public GenericController { + public: + enum struct Button : uint16_t { + L2 = static_cast(GenericButton::D0), + R2 = static_cast(GenericButton::D1), + L1 = static_cast(GenericButton::D2), + R1 = static_cast(GenericButton::D3), + Triangle = static_cast(GenericButton::D4), + Circle = static_cast(GenericButton::D5), + Cross = static_cast(GenericButton::D6), + Square = static_cast(GenericButton::D7), + SEL = static_cast(GenericButton::D8), + L3 = static_cast(GenericButton::D9), + R3 = static_cast(GenericButton::D10), + ST = static_cast(GenericButton::D11), + Up = static_cast(GenericButton::D12), + Right = static_cast(GenericButton::D13), + Down = static_cast(GenericButton::D14), + Left = static_cast(GenericButton::D15) + }; + + private: + uint8_t read_special_byte(size_t idx) const { + return reinterpret_cast(this->special)[idx]; + } + + public: + GPU::PositionI16 get_right_stick_pos() const { + const uint8_t joy_x = AnalogeController::read_special_byte(0); + const uint8_t joy_y = AnalogeController::read_special_byte(1); + + return GPU::PositionI16::create(joy_x - 0x80, joy_y - 0x80); + } + + GPU::PositionI16 get_left_stick_pos() const { + const uint8_t joy_x = AnalogeController::read_special_byte(2); + const uint8_t joy_y = AnalogeController::read_special_byte(3); + + return GPU::PositionI16::create(joy_x - 0x80, joy_y - 0x80); + } + }; + using GenericButtonState = GenericController::ButtonState; } } \ No newline at end of file