From 0391aac39d1dd9d985e0c0794a7fc86b00f746e8 Mon Sep 17 00:00:00 2001 From: Alexgamer470 Date: Mon, 6 Mar 2023 01:39:33 +0100 Subject: [PATCH 1/6] base of settings menu + sub menus + clean up --- menu/menu.cpp | 195 ++++++++++++++++++++++++++++++++---------------- menu/menu.hpp | 20 ++++- menu/visual.cpp | 7 +- 3 files changed, 153 insertions(+), 69 deletions(-) diff --git a/menu/menu.cpp b/menu/menu.cpp index d797eb8..74c6655 100644 --- a/menu/menu.cpp +++ b/menu/menu.cpp @@ -17,11 +17,12 @@ 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(); @@ -29,13 +30,17 @@ unsigned short int menu::menu::start() { 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(); } @@ -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) { + settingsSubSub = false; + draw::clearMenu(); + cursorState = 0; + subMenu(4); + 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(); @@ -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 subSelectoion) { sub = true; draw::clearMenu(); - switch (cursorState) { + switch (subSelectoion) { 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")); @@ -152,21 +134,21 @@ 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; @@ -174,9 +156,81 @@ void menu::menu::subMenu() { updateDescription(); std::cout << Term::color(Term::fg::reset) << std::flush; } +void menu::menu::handleGamemode() { + 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; + } + + std::cout << Term::move_cursor(9, 20) << Term::color24_fg(255, 64, 0) + << "<--" << Term::color(Term::fg::reset) << std::flush; + gamemodeSub = false; +} +void menu::menu::handleSettings() { + 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) << " "; } @@ -195,7 +249,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); @@ -224,7 +278,7 @@ void menu::menu::updateDescription() const { break; } } - else if (arrow) { + else if (gamemodeSub) { switch (cursorState) { case 0: std::cout << "With power-ups!"; @@ -243,6 +297,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; } } diff --git a/menu/menu.hpp b/menu/menu.hpp index 0931bdd..070c1cb 100644 --- a/menu/menu.hpp +++ b/menu/menu.hpp @@ -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(); @@ -27,7 +37,9 @@ class menu { unsigned short int start(); // sub menu system - void subMenu(); + void subMenu(int cursorState); + void handleGamemode(); + void handleSettings(); // base menu void updateCursor(cursor cursorDir); diff --git a/menu/visual.cpp b/menu/visual.cpp index 6bbbbd1..309ab82 100644 --- a/menu/visual.cpp +++ b/menu/visual.cpp @@ -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) From 42373cff23044b7b6bb8bd00d0380192904bbb73 Mon Sep 17 00:00:00 2001 From: Alexgamer470 Date: Mon, 6 Mar 2023 14:06:05 +0100 Subject: [PATCH 2/6] fix: cursorState 0 after leaving sub sub, clean up --- menu/menu.cpp | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/menu/menu.cpp b/menu/menu.cpp index 74c6655..3ca4c47 100644 --- a/menu/menu.cpp +++ b/menu/menu.cpp @@ -54,10 +54,10 @@ unsigned short int menu::menu::start() { break; case 'q': if (settingsSubSub) { - settingsSubSub = false; + settingsSub = true; draw::clearMenu(); - cursorState = 0; subMenu(4); + settingsSubSub = false; updateDescription(); updateCursor(cursor::notMoved); } @@ -151,54 +151,44 @@ void menu::menu::subMenu(int subSelectoion) { 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(); - 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; } - + + 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; - gamemodeSub = false; } void menu::menu::handleSettings() { + settingsSub = false; settingsSubSub = true; draw::clearMenu(); From 13d4578ebb3162cf69d29c62e22c230705ca5f86 Mon Sep 17 00:00:00 2001 From: Alexgamer470 Date: Sun, 12 Mar 2023 18:55:18 +0100 Subject: [PATCH 3/6] applied clang format to the visual.cpp file --- menu/visual.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/menu/visual.cpp b/menu/visual.cpp index 309ab82..9bea757 100644 --- a/menu/visual.cpp +++ b/menu/visual.cpp @@ -92,9 +92,9 @@ void anim::snakeGamemodes() { } void anim::snakeSettings() { std::cout << Term::move_cursor(7, 10) << Term::color24_fg(255, 255, 0) - << "SETTINGS!" << Term::move_cursor(9, 6) << Term::color24_fg(21, 96, 189) - << "Controls" << Term::move_cursor(10, 6) - << "Theme" << Term::move_cursor(11, 6) + << "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; From bea21be7b08f24d807a8b2ea0191dfe55c807191 Mon Sep 17 00:00:00 2001 From: Alexgamer470 <45130851+Alexgamer470@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:49:15 +0100 Subject: [PATCH 4/6] typo corrected --- menu/menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/menu.cpp b/menu/menu.cpp index 3ca4c47..f676976 100644 --- a/menu/menu.cpp +++ b/menu/menu.cpp @@ -91,7 +91,7 @@ unsigned short int menu::menu::start() { } return 0; } -void menu::menu::subMenu(int subSelectoion) { +void menu::menu::subMenu(int subSelection) { sub = true; draw::clearMenu(); From 14fe9e0843d1f6f08cd393437b8b0a500df8141a Mon Sep 17 00:00:00 2001 From: Alexgamer470 <45130851+Alexgamer470@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:52:55 +0100 Subject: [PATCH 5/6] typo *corrected* --- menu/menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/menu.cpp b/menu/menu.cpp index f676976..15ab100 100644 --- a/menu/menu.cpp +++ b/menu/menu.cpp @@ -95,7 +95,7 @@ void menu::menu::subMenu(int subSelection) { sub = true; draw::clearMenu(); - switch (subSelectoion) { + switch (subSelection) { case 0: std::cout << Term::move_cursor(7, 8) << Term::color24_fg(255, 255, 0) << "SINGLEPLAYER!"; From fd1b5f579859ee785a882ab92483a448620c51eb Mon Sep 17 00:00:00 2001 From: Alexgamer470 Date: Wed, 15 Mar 2023 20:57:45 +0000 Subject: [PATCH 6/6] fixed the declaration to subMenu(int) --- menu/menu.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/menu.hpp b/menu/menu.hpp index 070c1cb..d098b45 100644 --- a/menu/menu.hpp +++ b/menu/menu.hpp @@ -37,7 +37,7 @@ class menu { unsigned short int start(); // sub menu system - void subMenu(int cursorState); + void subMenu(int); void handleGamemode(); void handleSettings();