public final boolean isAllTasksFinished() { for (OlympiadGameTask task : _tasks) { if (task.isRunning()) { return false; } } return true; }
@Override public final void run() { if (Olympiad.getInstance().isOlympiadEnd()) { return; } if (Olympiad.getInstance().inCompPeriod()) { OlympiadGameTask task; AbstractOlympiadGame newGame; List<List<Integer>> readyClassed = OlympiadManager.getInstance().hasEnoughRegisteredClassed(); boolean readyNonClassed = OlympiadManager.getInstance().hasEnoughRegisteredNonClassed(); boolean readyTeams = OlympiadManager.getInstance().hasEnoughRegisteredTeams(); if ((readyClassed != null) || readyNonClassed || readyTeams) { // set up the games queue for (int i = 0; i < _tasks.length; i++) { task = _tasks[i]; synchronized (task) { if (!task.isRunning()) { // Fair arena distribution // 0,2,4,6,8.. arenas checked for classed or teams first if (((readyClassed != null) || readyTeams) && ((i % 2) == 0)) { // 0,4,8.. arenas checked for teams first if (readyTeams && ((i % 4) == 0)) { newGame = OlympiadGameTeams.createGame( i, OlympiadManager.getInstance().getRegisteredTeamsBased()); if (newGame != null) { task.attachGame(newGame); continue; } readyTeams = false; } // if no ready teams found check for classed if (readyClassed != null) { newGame = OlympiadGameClassed.createGame(i, readyClassed); if (newGame != null) { task.attachGame(newGame); continue; } readyClassed = null; } } // 1,3,5,7,9.. arenas used for non-classed // also other arenas will be used for non-classed if no classed or teams available if (readyNonClassed) { newGame = OlympiadGameNonClassed.createGame( i, OlympiadManager.getInstance().getRegisteredNonClassBased()); if (newGame != null) { task.attachGame(newGame); continue; } readyNonClassed = false; } } } // stop generating games if no more participants if ((readyClassed == null) && !readyNonClassed && !readyTeams) { break; } } } } else { // not in competition period if (isAllTasksFinished()) { OlympiadManager.getInstance().clearRegistered(); _battleStarted = false; _log.log(Level.INFO, "Olympiad System: All current games finished."); } } }