package rabbitescape.engine.menu;
import static rabbitescape.engine.menu.MenuConstruction.*;
import static rabbitescape.engine.util.Util.*;
import rabbitescape.engine.menu.LevelsList.LevelSetInfo;
import rabbitescape.engine.menu.MenuItem.Type;
import rabbitescape.engine.util.Util.IdxObj;
public class MenuDefinition
{
public static final LevelsList allLevels = new LevelsList(
new LevelSetInfo( "Easy", "01_easy", null ),
new LevelSetInfo( "Medium", "02_medium", null ),
new LevelSetInfo( "Hard", "03_hard", null ),
new LevelSetInfo( "Outdoors", "04_outdoors", null ),
new LevelSetInfo( "Arcade", "05_arcade", null ),
new LevelSetInfo( "Small World", "06_small_world", null ),
new LevelSetInfo( "Deja Vu", "07_dejavu", null ),
new LevelSetInfo( "Development", "development", null, true ),
new LevelSetInfo( "Staging", "staging", null, true )
);
public static Menu mainMenu(
LevelsCompleted levelsCompleted,
LevelsList loadedLevels,
boolean includeLoadLevel
)
{
return menu(
"Welcome to Rabbit Escape!",
item(
"Start Game",
menu(
"Choose a set of levels:",
items( levelsCompleted, loadedLevels )
),
true,
false
),
item( "About", Type.ABOUT, true ),
maybeItem(
includeLoadLevel,
"Custom Levels",
menu(
"Get from file or network",
item( "Load Level", Type.LOAD, true ),
item( "GitHub Issue", Type.GITHUB_ISSUE, true )
),
true
),
item( "Quit", Type.QUIT, true )
);
}
private static MenuItem[] items(
LevelsCompleted levelsCompleted,
LevelsList loadedLevels
)
{
MenuItem[] ret = new MenuItem[ loadedLevels.size() ];
for ( IdxObj<LevelSetInfo> setI : enumerate( loadedLevels ) )
{
LevelSetInfo set = setI.object;
ret[setI.index] = item(
set.name,
new LevelsMenu( set.dirName, loadedLevels, levelsCompleted ),
true,
set.hidden
);
}
return ret;
}
}