From d3bc64781bbb51d2135245985dff5cb0e19d76b1 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Fri, 17 Jun 2022 18:55:36 -0500 Subject: [PATCH] menu indicator movement --- menu.ino | 9 +++++-- slangin.ino | 71 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/menu.ino b/menu.ino index 1db134e..973d441 100644 --- a/menu.ino +++ b/menu.ino @@ -74,7 +74,8 @@ void drawMenu(const bool small, const bool cols, } void drawMenuIndicator(const int menuSelected, const bool small, - const bool cols, const int itemCount, const String items[]) { + const bool cols, const int itemCount, const String items[], + const bool clear) { const int charWidth = small ? 4 : 5; const int charHeight = small ? 8 : 9; int x1, x2, y; @@ -91,5 +92,9 @@ void drawMenuIndicator(const int menuSelected, const bool small, cx = x1; cy = menuSelected * charHeight + y; } - Sprites::drawOverwrite(cx - 4, cy + (small ? 1 : 2), spriteMenuCursor, 0); + if (clear) { + arduboy.fillRect(cx - 4, cy + (small ? 1 : 2), 3, 5, BLACK); + } else { + Sprites::drawOverwrite(cx - 4, cy + (small ? 1 : 2), spriteMenuCursor, 0); + } } diff --git a/slangin.ino b/slangin.ino index 0b5a0d3..ea6198d 100644 --- a/slangin.ino +++ b/slangin.ino @@ -5,8 +5,8 @@ License: WTFPL */ #include -#include "src/fonts/Font3x5.h"; -#include "src/fonts/Font4x6.h"; +#include "src/fonts/Font3x5.h" +#include "src/fonts/Font4x6.h" Arduboy2 arduboy; Font4x6 font4x6 = Font4x6(); @@ -16,7 +16,6 @@ enum GameState { STATE_TITLE = 0, STATE_TURN_MENU, STATE_JET_MENU, - STATE_PRICE_LIST, STATE_INVENTORY, STATE_BUY_MENU, STATE_SELL_MENU, @@ -72,6 +71,12 @@ int pCapacity; int pHealth; int pInventory[6] = {0}; +String menu[8]; +int menuLength = 0; +bool menuCols = false; +bool menuSmall = false; +int menuSelected = 0; + /***********************/ /* game setup and loop */ /***********************/ @@ -86,12 +91,7 @@ void loop() { if (!(arduboy.nextFrame())) return; - String menu[8]; - int menuLength = 0; - bool menuCols = false; - bool menuSmall = false; - int menuSelected = 0; - + // draw screen if needed if (!screenInitialized) { menuSelected = 0; arduboy.clear(); @@ -99,16 +99,59 @@ void loop() { case STATE_TITLE: arduboy.setCursor(25, 10); arduboy.print(F("Slangin' v0.9")); - menu[0] = F("New Game"); - menuLength = 1; + menu[0] = F("Cocaine 00000"); + menu[1] = F("Heroine 00000"); + menu[2] = F("Acid 0000"); + menu[3] = F("Weed 000"); + menu[4] = F("Speed 000"); + menu[5] = F("Ludes 00"); + menuLength = 6; menuSmall = false; - menuCols = false; + menuCols = true; drawMenu(menuSmall, menuCols, menuLength, menu); - drawMenuIndicator(menuSelected, menuSmall, menuCols, menuLength, menu); + drawMenuIndicator(menuSelected, menuSmall, menuCols, menuLength, menu, false); break; } - arduboy.display(); + screenInitialized = true; } + + // handle user input + + arduboy.pollButtons(); + switch (sGameState) { + // menu screens + case STATE_TITLE: + drawMenuIndicator(menuSelected, menuSmall, menuCols, menuLength, menu, true); + int col1Count = round(menuLength / 2.0); + int inCol = menuSelected < col1Count ? 1 : 2; + if (arduboy.justPressed(DOWN_BUTTON)) { + menuSelected++; + if (menuSelected >= menuLength) menuSelected = menuLength - 1; + } else if (arduboy.justPressed(UP_BUTTON)) { + menuSelected--; + if (menuSelected < 0) menuSelected = 0; + } else if (arduboy.justPressed(RIGHT_BUTTON)) { + if (menuCols && inCol == 1) { + menuSelected += col1Count; + } else { + menuSelected++; + } + if (menuSelected >= menuLength) menuSelected = menuLength - 1; + } else if (arduboy.justPressed(LEFT_BUTTON)) { + if (menuCols && inCol == 2) { + menuSelected -= col1Count; + } else { + menuSelected--; + } + if (menuSelected < 0) menuSelected = 0; + } else if (arduboy.justPressed(A_BUTTON)) { + } else if (arduboy.justPressed(B_BUTTON)) { + } + drawMenuIndicator(menuSelected, menuSmall, menuCols, menuLength, menu, false); + break; + } + + arduboy.display(); } /***********************/