package bms.player.beatoraja.select.bar; import java.util.Arrays; import bms.model.Mode; import bms.player.beatoraja.ScoreDatabaseAccessor.ScoreDataCollector; import bms.player.beatoraja.select.MusicSelector; import bms.player.beatoraja.song.SongData; import com.badlogic.gdx.utils.Array; /** * ディレクトリの抽象バー。 * * @author exch */ public abstract class DirectoryBar extends Bar { protected final MusicSelector selector; /** * プレイヤーのクリアランプ数 */ private final int[] lamps = new int[11]; /** * ライバルのクリアランプ数 */ private final int[] rlamps = new int[11]; /** * プレイヤーのランク数 */ private final int[] ranks = new int[28]; /** * 不可視譜面を表示するかどうか */ private final boolean showInvisibleChart; public DirectoryBar(MusicSelector selector) { this(selector, false); } public DirectoryBar(MusicSelector selector, boolean showInvisibleChart) { this.selector = selector; this.showInvisibleChart = showInvisibleChart; } public int[] getLamps() { return lamps; } public int[] getRivalLamps() { return rlamps; } public int[] getRanks() { return ranks; } public int getLamp(boolean isPlayer) { final int[] lamps = isPlayer ? this.lamps : rlamps; for (int i = 0; i < lamps.length; i++) { if (lamps[i] > 0) { return i; } } return 0; } public boolean isShowInvisibleChart() { return showInvisibleChart; } public void clear() { Arrays.fill(lamps, 0); Arrays.fill(rlamps, 0); Arrays.fill(ranks, 0); } /** * ディレクトリ内のバーを返す * * @return ディレクトリ内のバー */ public abstract Bar[] getChildren(); public Bar[] getChildren(Mode mode, boolean containsSameFolder) { Array<Bar> l = new Array<Bar>(); for (Bar b : getChildren()) { if (!(mode != null && b instanceof SongBar && ((SongBar) b).getSongData().getMode() != 0 && ((SongBar) b).getSongData().getMode() != mode.id)) { boolean addBar = true; if (!containsSameFolder) { for (Bar bar : l) { if (b instanceof SongBar && bar instanceof SongBar && ((SongBar) b).getSongData().getFolder() != null && ((SongBar) b).getSongData() .getFolder().equals(((SongBar) bar).getSongData().getFolder())) { addBar = false; break; } } } if (addBar) { l.add(b); } } } return l.toArray(Bar.class); } public void updateFolderStatus() { } protected void updateFolderStatus(SongData[] songs) { clear(); final Mode mode = selector.main.getPlayerConfig().getMode(); final ScoreDataCollector collector = (song, score) -> { if(song.getPath() == null || (mode != null && song.getMode() != 0 && song.getMode() != mode.id)) { return; } if(score != null) { lamps[score.getClear()]++; if (score.getNotes() != 0) { int rank = score.getExscore() * 27 / (score.getNotes() * 2); ranks[rank < 28 ? rank : 27]++; } else { ranks[0]++; } } else { lamps[0]++; ranks[0]++; } }; selector.getScoreDataCache().readScoreDatas(collector, songs, selector.main.getPlayerConfig().getLnmode()); } }