From 01a535fad362a35b326443ad43baa6c1d368d91a Mon Sep 17 00:00:00 2001 From: Jaby Date: Thu, 4 Jan 2024 20:58:46 -0600 Subject: [PATCH] Support more buttons --- .../Overlay/ControllerTest/controller_state.cpp | 16 ++++++++++++++++ .../PoolBox/application/src/include/menu.hpp | 2 +- examples/PoolBox/application/src/menu.cpp | 4 ++-- examples/PoolBox/assets/Controller.png | 4 ++-- 4 files changed, 21 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 48134bd9..ee8e2de9 100644 --- a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp @@ -28,6 +28,13 @@ namespace ControllerTest { sprt->tex_offset.y = is_active ? 16 : 0; } + static void set_active(GPU::POLY_FT4::Linked& poly, bool is_active) { + poly->tex_offset0.y = is_active ? 16 : 0; + poly->tex_offset1.y = is_active ? 16 : 0; + poly->tex_offset2.y = is_active ? 32 : 16; + poly->tex_offset3.y = is_active ? 32 : 16; + } + void ControllerState :: setup() { for(size_t n = 0; n < 2; n++) { link_array(link_array(&this->tex_page[n], this->buttons[n]), this->arrows[n]); @@ -39,11 +46,20 @@ namespace ControllerTest { DigitalButton::Triangle, DigitalButton::Circle, DigitalButton::Cross, DigitalButton::Square, DigitalButton::ST, DigitalButton::SEL, DigitalButton::L1, DigitalButton::L2, DigitalButton::R1, DigitalButton::R2 }; + static const DigitalButton ArrowPolyMap[] = { + DigitalButton::Up, DigitalButton::Right, DigitalButton::Down, DigitalButton::Left + }; auto& cur_button_sprts = this->buttons[GPU::update_id()]; + auto& cur_arrow_poly = this->arrows[GPU::update_id()]; + for(size_t n = 0; n < sizeof(ButtonSprtMap)/sizeof(ButtonSprtMap[0]); n++) { set_active(cur_button_sprts[n], controller.button.is_down(ButtonSprtMap[n])); } + for(size_t n = 0; n < sizeof(ArrowPolyMap)/sizeof(ArrowPolyMap[0]); n++) { + set_active(cur_arrow_poly[n], controller.button.is_down(ArrowPolyMap[n])); + } + set_active(cur_button_sprts[12], controller.header.state == Periphery::RawController::State::Disconnected); } diff --git a/examples/PoolBox/application/src/include/menu.hpp b/examples/PoolBox/application/src/include/menu.hpp index c48c6fa5..50111a1c 100644 --- a/examples/PoolBox/application/src/include/menu.hpp +++ b/examples/PoolBox/application/src/include/menu.hpp @@ -44,7 +44,7 @@ namespace Menu { this->waiting = false; } - bool update(const GPU::PositionI16& position); + bool update(const GPU::PositionI16& position, bool auto_clear = true); void render(); }; } \ No newline at end of file diff --git a/examples/PoolBox/application/src/menu.cpp b/examples/PoolBox/application/src/menu.cpp index ab8e984c..46e3e891 100644 --- a/examples/PoolBox/application/src/menu.cpp +++ b/examples/PoolBox/application/src/menu.cpp @@ -46,7 +46,7 @@ namespace Menu { this->waiting = false; } - bool BackMenu :: update(const GPU::PositionI16& position) { + bool BackMenu :: update(const GPU::PositionI16& position, bool auto_clear) { const auto& controller = Periphery::get_primary_controller_as(); if(controller.button.is_down(DigitalButton::Circle)) { @@ -66,7 +66,7 @@ namespace Menu { this->font_writer->write(state, "Press and hold ()\nto get back", GPU::Color24::Red(0xD0)); } - else { + else if(auto_clear) { this->font_writer->clear(); } return false; diff --git a/examples/PoolBox/assets/Controller.png b/examples/PoolBox/assets/Controller.png index b3304041..bda9d4e6 100644 --- a/examples/PoolBox/assets/Controller.png +++ b/examples/PoolBox/assets/Controller.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6170f80192bb45829ad6b240428dbe15d73ddbb71006d018fc501b05657cb89b -size 5081 +oid sha256:5e2ffa4a4ced3d6dbb833a988088f4e3426914df301a03ed1447f4f71367ce44 +size 5070