slangin/slangin.ino

164 lines
3.6 KiB
Arduino
Raw Normal View History

2022-06-15 12:47:42 -05:00
/*
2022-06-15 12:51:24 -05:00
Slangin'
Author: Rudis Muiznieks
License: WTFPL
2022-06-15 12:47:42 -05:00
*/
#include <Arduboy2.h>
2022-06-17 18:55:36 -05:00
#include "src/fonts/Font3x5.h"
#include "src/fonts/Font4x6.h"
2022-06-15 12:47:42 -05:00
Arduboy2 arduboy;
2022-06-16 23:25:49 -05:00
Font4x6 font4x6 = Font4x6();
Font3x5 font3x5 = Font3x5();
2022-06-15 12:47:42 -05:00
2022-06-15 18:36:12 -05:00
enum GameState {
STATE_TITLE = 0,
STATE_TURN_MENU,
STATE_JET_MENU,
STATE_INVENTORY,
STATE_BUY_MENU,
STATE_SELL_MENU,
STATE_FIGHT_MENU,
STATE_SHARK_MENU,
STATE_BANK_MENU,
STATE_INFO_DIALOG,
STATE_QUESTION_DIALOG,
STATE_AMOUNT_DIALOG,
STATE_SUBWAY
};
enum GameLocation {
LOC_BRONX = 0,
LOC_GHETTO,
LOC_CENTRAL_PARK,
LOC_MANHATTEN,
LOC_CONEY_ISLAND,
LOC_BROOKLYN
};
enum Drug {
DRUG_COCAINE = 0,
DRUG_HEROINE,
DRUG_ACID,
DRUG_WEED,
DRUG_SPEED,
DRUG_LUDES
};
enum DialogType {
DIALOG_INFO = 0,
DIALOG_YESNO,
DIALOG_AMOUNT
};
2022-06-16 23:25:49 -05:00
/**************/
/* game state */
/**************/
2022-06-15 18:36:12 -05:00
bool screenInitialized;
2022-06-16 23:25:49 -05:00
GameState sGameState;
2022-06-15 18:36:12 -05:00
int sCurrentDay;
2022-06-16 23:25:49 -05:00
/****************/
/* player state */
/****************/
2022-06-15 18:36:12 -05:00
int pMoney;
int pLoanAmount;
int pSavingsAmount;
GameLocation pLocation;
int pGuns;
int pCapacity;
int pHealth;
int pInventory[6] = {0};
2022-06-17 18:55:36 -05:00
String menu[8];
int menuLength = 0;
bool menuCols = false;
bool menuSmall = false;
int menuSelected = 0;
2022-06-16 23:25:49 -05:00
/***********************/
/* game setup and loop */
/***********************/
2022-06-15 12:47:42 -05:00
void setup() {
2022-06-16 23:25:49 -05:00
sGameState = STATE_TITLE;
2022-06-15 18:36:12 -05:00
screenInitialized = false;
2022-06-15 12:47:42 -05:00
arduboy.begin();
arduboy.setFrameRate(15);
}
void loop() {
if (!(arduboy.nextFrame()))
return;
2022-06-17 18:55:36 -05:00
// draw screen if needed
2022-06-15 18:36:12 -05:00
if (!screenInitialized) {
menuSelected = 0;
2022-06-16 23:25:49 -05:00
arduboy.clear();
switch (sGameState) {
2022-06-15 18:36:12 -05:00
case STATE_TITLE:
arduboy.setCursor(25, 10);
arduboy.print(F("Slangin' v0.9"));
2022-06-17 18:55:36 -05:00
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;
2022-06-17 18:55:36 -05:00
menuCols = true;
drawMenu(menuSmall, menuCols, menuLength, menu);
2022-06-17 18:55:36 -05:00
drawMenuIndicator(menuSelected, menuSmall, menuCols, menuLength, menu, false);
2022-06-15 18:36:12 -05:00
break;
}
2022-06-17 18:55:36 -05:00
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;
2022-06-16 23:25:49 -05:00
}
2022-06-17 18:55:36 -05:00
arduboy.display();
2022-06-16 23:25:49 -05:00
}
/***********************/
/* screen draw heplers */
/***********************/
2022-06-17 08:58:56 -05:00
void drawTitle(const String title) {
font4x6.setCursor(6, 8);
font4x6.print(title);
2022-06-15 12:47:42 -05:00
}