menu indicator movement

This commit is contained in:
Rudis Muiznieks 2022-06-17 18:55:36 -05:00
parent 6f2afc4734
commit d3bc64781b
Signed by: rudism
GPG Key ID: CABF2F86EF7884F9
2 changed files with 64 additions and 16 deletions

View File

@ -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);
}
}

View File

@ -5,8 +5,8 @@ License: WTFPL
*/
#include <Arduboy2.h>
#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();
}
/***********************/