package rabbitescape.engine.menu; import static rabbitescape.engine.util.Util.*; import java.util.List; public class LevelsMenu extends Menu { private final String levelsDir; private final LevelsCompleted levelsCompleted; public LevelsMenu( String levelsDir, LevelsList levelsList, LevelsCompleted levelsCompleted ) { this( levelsDir, levelsCompleted, menuItems( levelsDir, levelsList ) ); } private LevelsMenu( String levelsDir, LevelsCompleted levelsCompleted, MenuItem[] items ) { super( "Choose a level:", items ); this.levelsDir = levelsDir; this.levelsCompleted = levelsCompleted; refresh(); } private static MenuItem[] menuItems( String levelsDir, LevelsList levelsInfo ) { List<LevelsList.LevelInfo> levels = levelsInfo.inDir( levelsDir ); MenuItem[] ret = new MenuItem[ levels.size() ]; for ( IdxObj<LevelsList.LevelInfo> info : enumerate1( levels ) ) { ret[info.index - 1] = new LevelMenuItem( levelsDir + "/" + info.object.fileName + ".rel", levelsDir, info.index, true, info.object.name ); } return ret; } @Override public void refresh() { int lastEnabled = levelsCompleted.highestLevelCompleted( levelsDir ) + 1; for ( IdxObj<MenuItem> item : enumerate1( items ) ) { item.object.enabled = ( item.index <= lastEnabled ); } } }