1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-23 01:59:43 +01:00

De-duplicate copy-pasted input/render code in menus

This removes duplicate code that came about as a result of various
possible permutations of menu options, depending on being M&P, having no
custom level support, having no editor support, and having MMMMMM.

The menus with such permutations are the following:

- main menu
  - "start game" is gone in MAKEANDPLAY
  - "player levels" is gone in NO_CUSTOM_LEVELS
  - "view credits" is gone in MAKEANDPLAY

- "game options"
  - "unlock play data" is gone in MAKEANDPLAY
  - "soundtrack" is gone if you don't have an mmmmmm.vvv file

- "player levels"
  - "level editor" is gone in NO_EDITOR

I achieve this de-duplication by clever use of calculating offsets,
which I feel is the best way to de-duplicate the code with the least
amount of work, if a little brittle.

The other options are to (1) put function pointers on each MenuOption
object, which is pretty verbose and would inflate Game::createmenu() by
a lot, (2) switch all game.currentmenuoption checks to instead check for
the text of the currently-selected menu option, which is very
error-prone because if you make a typo it won't be caught at
compile-time, (3) add a unique ID to each MenuOption object that
represents a text but will error at compile-time if you make a typo,
however this just duplicates all the menu option text, which is more
code than was duplicated previously.

So I just went with this one.
This commit is contained in:
Misa 2020-04-15 17:59:03 -07:00 committed by Ethan Lee
parent bf62233b60
commit 4f6835c485
2 changed files with 85 additions and 225 deletions

View file

@ -114,39 +114,21 @@ void menuactionpress()
{
if (game.currentmenuname == "mainmenu")
{
#if defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11);
game.createmenu("options");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
}
#elif !defined(MAKEANDPLAY)
#define MPOFFSET -1
#else
#define MPOFFSET 0
#endif
#if defined(NO_CUSTOM_LEVELS)
#define NOCUSTOMSOFFSET -1
#else
#define NOCUSTOMSOFFSET 0
#endif
#define OFFSET (MPOFFSET+NOCUSTOMSOFFSET)
#if !defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//Play
@ -164,90 +146,55 @@ void menuactionpress()
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
else
#endif
#if !defined(NO_CUSTOM_LEVELS)
if (game.currentmenuoption == OFFSET+1)
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else
#endif
if (game.currentmenuoption == OFFSET+2)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
else if (game.currentmenuoption == OFFSET+3)
{
//Options
music.playef(11);
game.createmenu("options");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
#if !defined(MAKEANDPLAY)
else if (game.currentmenuoption == OFFSET+4)
{
//Credits
music.playef(11);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
#else
if (game.currentmenuoption == 0)
{
//Play
if (game.telesummary == "" && game.quicksummary == "")
{
//No saves exist, just start a new game
game.mainmenu = 0;
graphics.fademode = 2;
}
else
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//Options
music.playef(11);
game.createmenu("options");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//Credits
music.playef(11);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 5)
#undef MPOFFSET
#define MPOFFSET -2
#endif
else if (game.currentmenuoption == OFFSET+5)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
#endif
#undef OFFSET
#undef NOCUSTOMSOFFSET
#undef MPOFFSET
}
#endif
#if !defined(NO_CUSTOM_LEVELS)
else if(game.currentmenuname=="levellist")
{
@ -305,7 +252,11 @@ void menuactionpress()
#if !defined(NO_CUSTOM_LEVELS)
else if(game.currentmenuname=="playerworlds")
{
#if !defined(NO_EDITOR)
#if defined(NO_EDITOR)
#define OFFSET -1
#else
#define OFFSET 0
#endif
if(game.currentmenuoption==0){
music.playef(11);
@ -314,13 +265,17 @@ void menuactionpress()
game.loadcustomlevelstats(); //Should only load a file if it's needed
game.createmenu("levellist");
map.nexttowercolour();
}else if(game.currentmenuoption==1){
}
#if !defined(NO_EDITOR)
if(game.currentmenuoption==1){
//LEVEL EDITOR HOOK
music.playef(11);
game.mainmenu = 20;
graphics.fademode = 2;
ed.filename="";
}/*else if(game.currentmenuoption==2){
}
#endif
/*else if(game.currentmenuoption==offset+2){
music.playef(11);
//"OPENFOLDERHOOK"
//When the player selects the "open level folder" menu option,
@ -330,27 +285,13 @@ void menuactionpress()
// - Open the levels folder for whatever operating system we're on
SDL_assert(0 && "Remove open level dir");
}*/else if(game.currentmenuoption==2){
}*/else if(game.currentmenuoption==OFFSET+2){
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#else
if(game.currentmenuoption==0){
music.playef(11);
game.levelpage=0;
ed.getDirectoryData();
game.loadcustomlevelstats(); //Should only load a file if it's needed
game.createmenu("levellist");
map.nexttowercolour();
}else if(game.currentmenuoption==1){
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#endif
#undef OFFSET
}
#endif
else if(game.currentmenuname=="errornostart"){
@ -589,8 +530,12 @@ void menuactionpress()
}
else if (game.currentmenuname == "options")
{
#if defined(MAKEANDPLAY)
#define OFFSET -1
#else
#define OFFSET 0
#endif
if (game.currentmenuoption == 0)
{
//accessibility options
@ -598,61 +543,7 @@ void menuactionpress()
game.createmenu("accessibility");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//clear data menu
music.playef(11);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//clear data menu
music.playef(11);
game.createmenu("cleardatamenu");
map.nexttowercolour();
}
if(music.mmmmmm){
if (game.currentmenuoption == 3)
{
//**** TOGGLE MMMMMM
if(game.usingmmmmmm > 0){
game.usingmmmmmm=0;
}else{
game.usingmmmmmm=1;
}
music.usingmmmmmm = !music.usingmmmmmm;
music.playef(11);
music.play(6);
game.savestats();
}
if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 3)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
#elif !defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//accessibility options
music.playef(11);
game.createmenu("accessibility");
map.nexttowercolour();
}
#if !defined(MAKEANDPLAY)
else if (game.currentmenuoption == 1)
{
//unlock play options
@ -660,14 +551,15 @@ void menuactionpress()
game.createmenu("unlockmenu");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
#endif
else if (game.currentmenuoption == OFFSET+2)
{
//clear data menu
music.playef(11);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
else if (game.currentmenuoption == OFFSET+3)
{
//clear data menu
music.playef(11);
@ -675,8 +567,8 @@ void menuactionpress()
map.nexttowercolour();
}
if(music.mmmmmm){
if (game.currentmenuoption == 4)
int mmmmmm_offset = music.mmmmmm ? 0 : -1;
if (game.currentmenuoption == OFFSET+4+mmmmmm_offset)
{
//**** TOGGLE MMMMMM
if(game.usingmmmmmm > 0){
@ -689,23 +581,14 @@ void menuactionpress()
music.play(6);
game.savestats();
}
if (game.currentmenuoption == 5)
else if (game.currentmenuoption == OFFSET+5+mmmmmm_offset)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
#endif
#undef OFFSET
}
else if (game.currentmenuname == "unlockmenutrials")
{

View file

@ -66,61 +66,38 @@ void menurender()
}
else if (game.currentmenuname == "options")
{
#if defined(MAKEANDPLAY)
#define OFFSET -1
#else
#define OFFSET 0
#endif
if (game.currentmenuoption == 0)
{
graphics.bigprint( -1, 30, "Accessibility", tr, tg, tb, true);
graphics.Print( -1, 65, "Disable screen effects, enable", tr, tg, tb, true);
graphics.Print( -1, 75, "slowdown modes or invincibility", tr, tg, tb, true);
}
else if (game.currentmenuoption == 1)
{
graphics.bigprint( -1, 30, "Game Pad Options", tr, tg, tb, true);
graphics.Print( -1, 65, "Rebind your controller's buttons", tr, tg, tb, true);
graphics.Print( -1, 75, "and adjust sensitivity", tr, tg, tb, true);
}
else if (game.currentmenuoption == 2)
{
graphics.bigprint( -1, 30, "Clear Data", tr, tg, tb, true);
graphics.Print( -1, 65, "Delete your save data", tr, tg, tb, true);
graphics.Print( -1, 75, "and unlocked play modes", tr, tg, tb, true);
}else if (game.currentmenuoption == 3){
if(music.mmmmmm){
graphics.bigprint( -1, 30, "Soundtrack", tr, tg, tb, true);
graphics.Print( -1, 65, "Toggle between MMMMMM and PPPPPP", tr, tg, tb, true);
if(music.usingmmmmmm){
graphics.Print( -1, 85, "Current soundtrack: MMMMMM", tr, tg, tb, true);
}else{
graphics.Print( -1, 85, "Current soundtrack: PPPPPP", tr, tg, tb, true);
}
}
}
#elif !defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
graphics.bigprint( -1, 30, "Accessibility", tr, tg, tb, true);
graphics.Print( -1, 65, "Disable screen effects, enable", tr, tg, tb, true);
graphics.Print( -1, 75, "slowdown modes or invincibility", tr, tg, tb, true);
}
#if !defined(MAKEANDPLAY)
else if (game.currentmenuoption == 1)
{
graphics.bigprint( -1, 30, "Unlock Play Modes", tr, tg, tb, true);
graphics.Print( -1, 65, "Unlock parts of the game normally", tr, tg, tb, true);
graphics.Print( -1, 75, "unlocked as you progress", tr, tg, tb, true);
}
else if (game.currentmenuoption == 2)
#endif
else if (game.currentmenuoption == OFFSET+2)
{
graphics.bigprint( -1, 30, "Game Pad Options", tr, tg, tb, true);
graphics.Print( -1, 65, "Rebind your controller's buttons", tr, tg, tb, true);
graphics.Print( -1, 75, "and adjust sensitivity", tr, tg, tb, true);
}
else if (game.currentmenuoption == 3)
else if (game.currentmenuoption == OFFSET+3)
{
graphics.bigprint( -1, 30, "Clear Data", tr, tg, tb, true);
graphics.Print( -1, 65, "Delete your save data", tr, tg, tb, true);
graphics.Print( -1, 75, "and unlocked play modes", tr, tg, tb, true);
}else if (game.currentmenuoption == 4)
}else if (game.currentmenuoption == OFFSET+4)
{
if(music.mmmmmm){
graphics.bigprint( -1, 30, "Soundtrack", tr, tg, tb, true);
@ -132,7 +109,7 @@ void menurender()
}
}
}
#endif
#undef OFFSET
}
else if (game.currentmenuname == "graphicoptions")
{