diff --git a/include/gamepad/gamepad.hpp b/include/gamepad/gamepad.hpp index a42216f..5f55367 100644 --- a/include/gamepad/gamepad.hpp +++ b/include/gamepad/gamepad.hpp @@ -112,7 +112,7 @@ class Gamepad { private: Gamepad(pros::controller_id_e_t id) : controller(id) { - screens.push_back(defaultScreen); + this->add_screen(defaultScreen); } Button m_L1 {}, m_L2 {}, m_R1 {}, m_R2 {}, m_Up {}, m_Down {}, m_Left {}, m_Right {}, m_X {}, m_B {}, m_Y {}, @@ -142,7 +142,7 @@ class Gamepad { uint8_t last_printed_line = 0; uint last_print_time = 0; uint last_update_time = 0; - bool screenCleared = true; + bool screenCleared = false; pros::Mutex mut {}; }; diff --git a/include/gamepad/screens/abstractScreen.hpp b/include/gamepad/screens/abstractScreen.hpp index 502e546..10638f0 100644 --- a/include/gamepad/screens/abstractScreen.hpp +++ b/include/gamepad/screens/abstractScreen.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "pros/misc.h" namespace gamepad { @@ -16,8 +17,7 @@ typedef std::array, 4> ScreenBuffer; class AbstractScreen { public: - AbstractScreen(uint priority) - : priority(priority) {} + AbstractScreen(uint priority) : priority(priority) {} virtual void update(uint delta_time) {} @@ -25,8 +25,8 @@ class AbstractScreen { virtual void handle_events(std::set button_events) {} - const uint get_priority() { return this->priority; } - private: + uint get_priority() { return this->priority; } + protected: const uint priority; }; diff --git a/include/gamepad/screens/alertScreen.hpp b/include/gamepad/screens/alertScreen.hpp index 2d6926b..7656eaf 100644 --- a/include/gamepad/screens/alertScreen.hpp +++ b/include/gamepad/screens/alertScreen.hpp @@ -18,8 +18,6 @@ class AlertScreen : public AbstractScreen { void update(uint delta_time); ScreenBuffer get_screen(std::set visible_lines); - void handle_events(std::set button_events) {} - void add_alerts(uint8_t line, std::string strs, uint32_t duration, std::string rumble = ""); private: struct AlertBuffer { diff --git a/include/gamepad/screens/defaultScreen.hpp b/include/gamepad/screens/defaultScreen.hpp index 61ebbe4..ad62a1c 100644 --- a/include/gamepad/screens/defaultScreen.hpp +++ b/include/gamepad/screens/defaultScreen.hpp @@ -7,10 +7,10 @@ namespace gamepad { class DefaultScreen : public AbstractScreen { public: - DefaultScreen(); - ScreenBuffer get_screen(std::set visible_lines); + DefaultScreen() + : AbstractScreen(1) {} - void handle_events(std::set button_events) {} + ScreenBuffer get_screen(std::set visible_lines); void print_line(uint8_t line, std::string str); void rumble(std::string rumble_pattern); diff --git a/src/gamepad/gamepad.cpp b/src/gamepad/gamepad.cpp index 3ab9020..1333b25 100644 --- a/src/gamepad/gamepad.cpp +++ b/src/gamepad/gamepad.cpp @@ -49,8 +49,9 @@ void Gamepad::updateScreens() { // theres nothing on this line so we can skip it if (!this->nextBuffer[line].has_value()) continue; - if (!this->screenCleared) { + if (!this->screenCleared && line != 3) { this->controller.clear(); + screenCleared = true; this->last_print_time = pros::millis(); return; } diff --git a/src/gamepad/screens/defaultScreen.cpp b/src/gamepad/screens/defaultScreen.cpp index 57110be..1afd516 100644 --- a/src/gamepad/screens/defaultScreen.cpp +++ b/src/gamepad/screens/defaultScreen.cpp @@ -9,10 +9,6 @@ namespace gamepad { -DefaultScreen::DefaultScreen() - : AbstractScreen(1), - currentBuffer({}) {} - ScreenBuffer DefaultScreen::get_screen(std::set visible_lines) { ScreenBuffer output; const std::lock_guard guard(this->mut); diff --git a/src/main.cpp b/src/main.cpp index 4b57db6..2447f38 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ #include "gamepad/gamepad.hpp" #include "gamepad/screens/alertScreen.hpp" #include "pros/rtos.hpp" +#include #include #include @@ -15,8 +16,9 @@ std::shared_ptr alerts{}; * to keep execution time for this mode under a few seconds. */ void initialize() { - gamepad::master.add_screen(alerts); - gamepad::master.A.onPress("alert", []() { alerts->add_alerts(0, "a very\nimportant\nalert", 3000, "-.-"); }); + printf("alert priority: %i\n", alerts->get_priority()); + // gamepad::master.add_screen(alerts); + // gamepad::master.A.onPress("alert", []() { alerts->add_alerts(0, "a very\nimportant\nalert", 3000, "-.-"); }); gamepad::master.B.onPress( "print02", []() { gamepad::master.print_line(0, "the time is\n\n" + std::to_string(pros::millis()) + " ms"); }); gamepad::master.X.onPress("rumble", []() { gamepad::master.rumble("..."); });