Skip to content

Commit

Permalink
Merge pull request #182 from BlackVyperStudios/settings
Browse files Browse the repository at this point in the history
settings menu
  • Loading branch information
MCWertGaming authored Mar 22, 2023
2 parents cb51fe7 + f1c0b50 commit dfba5f8
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 70 deletions.
187 changes: 122 additions & 65 deletions menu/menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,30 @@ unsigned short int menu::menu::start() {
// menu loop
bool running = true;
while (running) {
// selection
switch (Term::read_key()) {
case 'w':
case Term::Key::ARROW_UP:
if (license_sub_open)
anim::license_menu_toggle(license_page_toggle);
if (licenseSub)
anim::license_menu_toggle(licensePageToggle);
else if (cursorState > 0) {
updateCursor(cursor::up);
updateDescription();
}
break;
case 's':
case Term::Key::ARROW_DOWN:
if (license_sub_open)
anim::license_menu_toggle(license_page_toggle);
if (licenseSub)
anim::license_menu_toggle(licensePageToggle);
else if (!sub && cursorState <= 5) {
updateCursor(cursor::down);
updateDescription();
}
else if (sub && cursorState <= 3) {
else if (gamemodeSub && cursorState <= 3) {
updateCursor(cursor::down);
updateDescription();
}
else if (settingsSub && cursorState <= 1) {
updateCursor(cursor::down);
updateDescription();
}
Expand All @@ -44,14 +49,24 @@ unsigned short int menu::menu::start() {
case 'd':
case Term::Key::ARROW_LEFT:
case Term::Key::ARROW_RIGHT:
if (license_sub_open)
anim::license_menu_toggle(license_page_toggle);
if (licenseSub)
anim::license_menu_toggle(licensePageToggle);
break;
case 'q':
if (sub) {
if (settingsSubSub) {
settingsSub = true;
draw::clearMenu();
subMenu(4);
settingsSubSub = false;
updateDescription();
updateCursor(cursor::notMoved);
}
else if (sub) {
sub = false;
license_sub_open = false;
arrow = true;
gamemodeSub = false;
settingsSub = false;
licenseSub = false;
selector = true;
draw::clearMenu();
cursorState = lastCursorState;
draw::snakeMenuBase();
Expand All @@ -65,80 +80,47 @@ unsigned short int menu::menu::start() {
running = false;
break;
case Term::Key::ENTER:
if (!sub)
subMenu();
else if (arrow) {
sub = false;
draw::clearField();
snake::snake snakeObj;
switch (cursorState) {
case 0: // SNEK
snakeObj.run();
draw::snakeMenuBase();
updateDescription();
updateCursor(cursor::notMoved);
break;
case 1: // Classic
snakeObj.run();
draw::snakeMenuBase();
updateDescription();
updateCursor(cursor::notMoved);
break;
case 2: // Infinite
snakeObj.run();
draw::snakeMenuBase();
updateDescription();
updateCursor(cursor::notMoved);
break;
case 3: // Chaos
snakeObj.run();
draw::snakeMenuBase();
updateDescription();
updateCursor(cursor::notMoved);
break;
case 4: // Creative
snakeObj.run();
draw::snakeMenuBase();
updateDescription();
updateCursor(cursor::notMoved);
break;
}
}
if (settingsSub)
handleSettings();
else if (!sub)
subMenu(cursorState);
else if (gamemodeSub)
handleGamemode();
break;
}
}
return 0;
}
void menu::menu::subMenu() {
void menu::menu::subMenu(int subSelection) {
sub = true;
draw::clearMenu();

switch (cursorState) {
switch (subSelection) {
case 0:
std::cout << Term::move_cursor(7, 8)
<< Term::color24_fg(255, 255, 0) << "SINGLEPLAYER!";
arrow = true;
gamemodeSub = true;
updateDescription();
anim::snakeGamemodes();
break;
case 1:
std::cout << Term::move_cursor(7, 9)
<< Term::color24_fg(255, 255, 0) << "MULTIPLAYER";
arrow = true;
gamemodeSub = true;
updateDescription();
anim::snakeGamemodes();
break;
case 2:
std::cout << Term::move_cursor(7, 9)
<< Term::color24_fg(255, 255, 0) << "ONLINE MODE";
arrow = true;
gamemodeSub = true;
updateDescription();
anim::snakeGamemodes();
break;
case 3: {
std::cout << Term::move_cursor(17, 7)
<< Term::color24_fg(255, 64, 0) << " Press Q";
arrow = false;
selector = false;
anim::snakeHighscores();

std::ifstream scores(Fox::get_user_config_folder("snek/scores"));
Expand All @@ -152,31 +134,93 @@ void menu::menu::subMenu() {
case 4:
std::cout << Term::move_cursor(17, 7)
<< Term::color24_fg(255, 64, 0) << " Press Q";
arrow = false;
settingsSub = true;
anim::snakeSettings();
break;
case 5:
std::cout << Term::move_cursor(17, 7)
<< Term::color24_fg(255, 64, 0) << " Press Q";
arrow = false;
selector = false;
anim::snakeAbout();
break;
case 6:
anim::snakeLicense();
arrow = false;
license_sub_open = true;
license_page_toggle = true;
anim::license_menu_toggle(license_page_toggle);
selector = false;
licenseSub = true;
licensePageToggle = true;
anim::license_menu_toggle(licensePageToggle);
break;
}
lastCursorState = cursorState;
if (!settingsSubSub)
lastCursorState = cursorState;
cursorState = 0;
updateDescription();
std::cout << Term::color(Term::fg::reset) << std::flush;
}
void menu::menu::handleGamemode() {
sub = false;
gamemodeSub = false;
draw::clearField();
snake::snake snakeObj;

switch (cursorState) {
case 0: // SNEK
snakeObj.run();
break;
case 1: // Classic
snakeObj.run();
break;
case 2: // Infinite
snakeObj.run();
break;
case 3: // Chaos
snakeObj.run();
break;
case 4: // Creative
snakeObj.run();
break;
}

draw::snakeMenuBase();
cursorState = 0;
updateDescription();
std::cout << Term::move_cursor(9, 20) << Term::color24_fg(255, 64, 0)
<< "<--" << Term::color(Term::fg::reset) << std::flush;
}
void menu::menu::handleSettings() {
settingsSub = false;
settingsSubSub = true;
draw::clearMenu();

switch (cursorState) {
case 0:
std::cout << Term::move_cursor(7, 10)
<< Term::color24_fg(255, 255, 0) << "CONTROLS!";
// updateDescription();
// anim::snakeControls();
break;
case 1:
std::cout << Term::move_cursor(7, 11)
<< Term::color24_fg(255, 255, 0) << "THEMES";
// updateDescription();
// anim::snakeThemes();
break;
case 2:
std::cout << Term::move_cursor(7, 9)
<< Term::color24_fg(255, 255, 0) << "PLACEHOLDER";
// updateDescription();
// anim::snakePlaceholder();
break;
}
cursorState = 0;
updateCursor(cursor::notMoved);
// updateDescription();
std::cout << Term::color(Term::fg::reset) << std::flush;
}
// TODO: void handleControls() {}

void menu::menu::updateCursor(cursor cursorDir) {
if (!arrow) {
if (!selector) {
std::cout << Term::color(Term::style::reset)
<< Term::move_cursor(9 + cursorState, 20) << " ";
}
Expand All @@ -195,7 +239,7 @@ void menu::menu::updateCursor(cursor cursorDir) {
}
}
void menu::menu::updateDescription() const {
if (arrow) {
if (selector) {
std::cout << Term::color(Term::style::reset) << Term::move_cursor(17, 7)
<< " " << Term::color24_fg(255, 64, 0)
<< Term::move_cursor(17, 7);
Expand Down Expand Up @@ -224,7 +268,7 @@ void menu::menu::updateDescription() const {
break;
}
}
else if (arrow) {
else if (gamemodeSub) {
switch (cursorState) {
case 0:
std::cout << "With power-ups!";
Expand All @@ -243,6 +287,19 @@ void menu::menu::updateDescription() const {
break;
}
}
else if (settingsSub) {
switch (cursorState) {
case 0:
std::cout << "Change P1 ctrls";
break;
case 1:
std::cout << " Change colors";
break;
case 2:
std::cout << " Placeholder";
break;
}
}
std::cout << Term::color(Term::style::reset) << std::flush;
}
}
Expand Down
20 changes: 16 additions & 4 deletions menu/menu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,21 @@ class menu {

// checks if you are in a sub menu
bool sub = false;
// checks if you are in the gamemode sub menus
bool gamemodeSub = false;
/* may be useful later...
bool singleplayerSub = false;
bool multiplayerSub = false;
bool onlineSub = false;
*/
// checks if you are in the settings sub (sub) menu
bool settingsSub = false;
bool settingsSubSub = false;
// toggles for the license sub menu
bool license_sub_open = false;
bool license_page_toggle = true;
bool licenseSub = false;
bool licensePageToggle = true;
// if false, no selection arrow
bool arrow = true;
bool selector = true;

public:
menu();
Expand All @@ -27,7 +37,9 @@ class menu {
unsigned short int start();

// sub menu system
void subMenu();
void subMenu(int);
void handleGamemode();
void handleSettings();

// base menu
void updateCursor(cursor cursorDir);
Expand Down
7 changes: 6 additions & 1 deletion menu/visual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,12 @@ void anim::snakeGamemodes() {
}
void anim::snakeSettings() {
std::cout << Term::move_cursor(7, 10) << Term::color24_fg(255, 255, 0)
<< "SETTINGS!" << Term::color(Term::fg::reset) << std::flush;
<< "SETTINGS!" << Term::move_cursor(9, 6)
<< Term::color24_fg(21, 96, 189) << "Controls"
<< Term::move_cursor(10, 6) << "Theme" << Term::move_cursor(11, 6)
<< "Lorem ipsum" << Term::move_cursor(9, 17)
<< Term::move_cursor(9, 20) << Term::color24_fg(255, 64, 0)
<< "<--" << Term::color(Term::fg::reset) << std::flush;
}
void anim::snakeHighscores() {
std::cout << Term::move_cursor(7, 9) << Term::color24_fg(255, 255, 0)
Expand Down

0 comments on commit dfba5f8

Please sign in to comment.