Comment format changes.

- Collapsed Javadoc comments for all fields.
- OsuFile now has proper Javadoc comments.
- Fixed various mistakes with comments.

Some changes with enums:
- Changed Class.values() calls to values().
- Changed size() calls to a SIZE field.
- Changed valuesReversed() calls to a VALUES_REVERSED field.
- Removed 'static' from enum declarations.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2015-01-22 00:44:45 -05:00
parent d6c7476b88
commit c9e14bfc70
32 changed files with 527 additions and 1008 deletions

View File

@ -29,14 +29,12 @@ import org.newdawn.slick.opengl.InternalTextureLoader;
* AppGameContainer extension that sends critical errors to ErrorHandler. * AppGameContainer extension that sends critical errors to ErrorHandler.
*/ */
public class Container extends AppGameContainer { public class Container extends AppGameContainer {
/** /** SlickException causing game failure. */
* SlickException causing game failure.
*/
protected SlickException e = null; protected SlickException e = null;
/** /**
* Create a new container wrapping a game * Create a new container wrapping a game
* *
* @param game The game to be wrapped * @param game The game to be wrapped
* @throws SlickException Indicates a failure to initialise the display * @throws SlickException Indicates a failure to initialise the display
*/ */
@ -46,7 +44,7 @@ public class Container extends AppGameContainer {
/** /**
* Create a new container wrapping a game * Create a new container wrapping a game
* *
* @param game The game to be wrapped * @param game The game to be wrapped
* @param width The width of the display required * @param width The width of the display required
* @param height The height of the display required * @param height The height of the display required

View File

@ -34,28 +34,20 @@ import org.newdawn.slick.util.Log;
* Error handler to log and display errors. * Error handler to log and display errors.
*/ */
public class ErrorHandler { public class ErrorHandler {
/** /** Error popup title. */
* Error popup title.
*/
private static final String title = "Error"; private static final String title = "Error";
/** /** Error popup description text. */
* Error popup description text.
*/
private static final String private static final String
desc = "opsu! has encountered an error.", desc = "opsu! has encountered an error.",
descR = "opsu! has encountered an error. Please report this!"; descR = "opsu! has encountered an error. Please report this!";
/** /** Error popup button options. */
* Error popup button options.
*/
private static final String[] private static final String[]
options = {"View Error Log", "Close"}, options = {"View Error Log", "Close"},
optionsR = {"Send Report", "View Error Log", "Close"}; optionsR = {"Send Report", "View Error Log", "Close"};
/** /** Text area for Exception. */
* Text area for Exception.
*/
private static final JTextArea textArea = new JTextArea(7, 30); private static final JTextArea textArea = new JTextArea(7, 30);
static { static {
textArea.setEditable(false); textArea.setEditable(false);
@ -65,16 +57,12 @@ public class ErrorHandler {
textArea.setLineWrap(true); textArea.setLineWrap(true);
} }
/** /** Scroll pane holding JTextArea. */
* Scroll pane holding JTextArea.
*/
private static final JScrollPane scroll = new JScrollPane(textArea); private static final JScrollPane scroll = new JScrollPane(textArea);
/** /** Error popup objects. */
* Error popup objects.
*/
private static final Object[] private static final Object[]
message = { desc, scroll }, message = { desc, scroll },
messageR = { descR, scroll }; messageR = { descR, scroll };
// This class should not be instantiated. // This class should not be instantiated.

View File

@ -400,26 +400,18 @@ public enum GameImage {
} }
}; };
/** /** Image file types. */
* Image file types.
*/
private static final byte private static final byte
IMG_PNG = 1, IMG_PNG = 1,
IMG_JPG = 2; IMG_JPG = 2;
/** /** The file name. */
* The file name.
*/
private String filename; private String filename;
/** /** The formatted file name string (for loading multiple images). */
* The formatted file name string (for loading multiple images).
*/
private String filenameFormat; private String filenameFormat;
/** /** Image file type. */
* Image file type.
*/
private byte type; private byte type;
/** /**
@ -428,39 +420,25 @@ public enum GameImage {
*/ */
private boolean skinnable; private boolean skinnable;
/** /** Whether or not to preload the image when the program starts. */
* Whether or not to preload the image when the program starts.
*/
private boolean preload; private boolean preload;
/** /** The default image. */
* The default image.
*/
private Image defaultImage; private Image defaultImage;
/** /** The default image array. */
* The default image array.
*/
private Image[] defaultImages; private Image[] defaultImages;
/** /** The beatmap skin image (optional, temporary). */
* The beatmap skin image (optional, temporary).
*/
private Image skinImage; private Image skinImage;
/** /** The beatmap skin image array (optional, temporary). */
* The beatmap skin image array (optional, temporary).
*/
private Image[] skinImages; private Image[] skinImages;
/** /** Container dimensions. */
* Container dimensions.
*/
private static int containerWidth, containerHeight; private static int containerWidth, containerHeight;
/** /** Whether a skin image has been loaded. */
* Whether a skin image has been loaded.
*/
private static boolean skinImageLoaded = false; private static boolean skinImageLoaded = false;
/** /**
@ -641,7 +619,7 @@ public enum GameImage {
try { try {
// try loading the image // try loading the image
Image img = new Image(name); Image img = new Image(name);
// image successfully loaded // image successfully loaded
list.add(img); list.add(img);
loaded = true; loaded = true;
@ -706,7 +684,7 @@ public enum GameImage {
try { try {
// try loading the image // try loading the image
Image img = new Image(file.getAbsolutePath()); Image img = new Image(file.getAbsolutePath());
// image successfully loaded // image successfully loaded
list.add(img); list.add(img);
loaded = true; loaded = true;

View File

@ -39,55 +39,32 @@ public enum GameMod {
// HIDDEN (, GameImage.MOD_HIDDEN, Input.KEY_F, 1.06f), // HIDDEN (, GameImage.MOD_HIDDEN, Input.KEY_F, 1.06f),
// FLASHLIGHT (, GameImage.MOD_FLASHLIGHT, Input.KEY_G, 1.12f); // FLASHLIGHT (, GameImage.MOD_FLASHLIGHT, Input.KEY_G, 1.12f);
/** /** The ID of the mod (used for positioning). */
* The ID of the mod (used for positioning).
*/
private int id; private int id;
/** /** The file name of the mod image. */
* The file name of the mod image.
*/
private GameImage image; private GameImage image;
/** /** The shortcut key associated with the mod. */
* The shortcut key associated with the mod.
*/
private int key; private int key;
/** /** The score multiplier. */
* Score multiplier.
*/
private float multiplier; private float multiplier;
/** /** Whether or not this mod is active. */
* Whether or not this mod is active.
*/
private boolean active = false; private boolean active = false;
/** /** The button containing the mod image (displayed in OptionsMenu screen). */
* The button containing the mod image (displayed in OptionsMenu screen).
*/
private MenuButton button; private MenuButton button;
/** /** Total number of mods. */
* Total number of mods. public static final int SIZE = values().length;
*/
private static final int SIZE = GameMod.values().length;
/** /** Array of GameMod objects in reverse order. */
* Returns the total number of game mods. public static final GameMod[] VALUES_REVERSED;
* @return the number of mods static {
*/ VALUES_REVERSED = values();
public static int size() { return SIZE; } Collections.reverse(Arrays.asList(VALUES_REVERSED));
/**
* Returns an array of GameMod objects in reverse order.
* @return all game mods in reverse order
*/
public static GameMod[] valuesReversed() {
GameMod[] mods = GameMod.values();
Collections.reverse(Arrays.asList(mods));
return mods;
} }
/** /**

View File

@ -36,9 +36,7 @@ import org.newdawn.slick.Image;
* Holds score data and renders all score-related elements. * Holds score data and renders all score-related elements.
*/ */
public class GameScore { public class GameScore {
/** /** Letter grades. */
* Letter grades.
*/
public static final int public static final int
GRADE_SS = 0, GRADE_SS = 0,
GRADE_SSH = 1, // silver GRADE_SSH = 1, // silver
@ -50,14 +48,10 @@ public class GameScore {
GRADE_D = 7, GRADE_D = 7,
GRADE_MAX = 8; // not a grade GRADE_MAX = 8; // not a grade
/** /** Delta multiplier for steady HP drain. */
* Delta multiplier for steady HP drain.
*/
public static final float HP_DRAIN_MULTIPLIER = 1 / 200f; public static final float HP_DRAIN_MULTIPLIER = 1 / 200f;
/** /** Hit result types. */
* Hit result types.
*/
public static final int public static final int
HIT_MISS = 0, HIT_MISS = 0,
HIT_50 = 1, HIT_50 = 1,
@ -70,34 +64,22 @@ public class GameScore {
HIT_SLIDER30 = 8, HIT_SLIDER30 = 8,
HIT_MAX = 9; // not a hit result HIT_MAX = 9; // not a hit result
/** /** Hit result-related images (indexed by HIT_* constants). */
* Hit result-related images (indexed by HIT_* constants).
*/
private Image[] hitResults; private Image[] hitResults;
/** /** Counts of each hit result so far. */
* Counts of each hit result so far.
*/
private int[] hitResultCount; private int[] hitResultCount;
/** /** Total number of hit objects so far, not including Katu/Geki (for calculating grade). */
* Total number of hit objects so far, not including Katu/Geki (for calculating grade).
*/
private int objectCount; private int objectCount;
/** /** Total objects including slider hits/ticks (for determining Full Combo status). */
* Total objects including slider hits/ticks (for determining Full Combo status).
*/
private int fullObjectCount; private int fullObjectCount;
/** /** The current combo streak. */
* The current combo streak.
*/
private int combo; private int combo;
/** /** The max combo streak obtained. */
* The max combo streak obtained.
*/
private int comboMax; private int comboMax;
/** /**
@ -109,40 +91,39 @@ public class GameScore {
*/ */
private byte comboEnd; private byte comboEnd;
/** /** Combo burst images. */
* Combo burst images.
*/
private Image[] comboBurstImages; private Image[] comboBurstImages;
/** /** Index of the current combo burst image. */
* Index of the current combo burst image.
*/
private int comboBurstIndex; private int comboBurstIndex;
/** /** Alpha level of the current combo burst image (for fade out). */
* Alpha level of the current combo burst image (for fade out).
*/
private float comboBurstAlpha; private float comboBurstAlpha;
/** /** Current x coordinate of the combo burst image (for sliding animation). */
* Current x coordinate of the combo burst image (for sliding animation).
*/
private int comboBurstX; private int comboBurstX;
/** /** List of hit result objects associated with hit objects. */
* List of hit result objects associated with hit objects.
*/
private LinkedList<OsuHitObjectResult> hitResultList; private LinkedList<OsuHitObjectResult> hitResultList;
/** /**
* Hit result helper class. * Hit result helper class.
*/ */
private class OsuHitObjectResult { private class OsuHitObjectResult {
public int time; // object start time /** Object start time. */
public int result; // hit result public int time;
public float x, y; // object coordinates
public Color color; // combo color /** Hit result. */
public float alpha = 1f; // alpha level (for fade out) public int result;
/** Object coordinates. */
public float x, y;
/** Combo color. */
public Color color;
/** Alpha level (for fading out). */
public float alpha = 1f;
/** /**
* Constructor. * Constructor.
@ -161,54 +142,34 @@ public class GameScore {
} }
} }
/** /** Current game score. */
* Current game score.
*/
private long score; private long score;
/** /** Displayed game score (for animation, slightly behind score). */
* Displayed game score (for animation, slightly behind score).
*/
private long scoreDisplay; private long scoreDisplay;
/** /** Current health bar percentage. */
* Current health bar percentage.
*/
private float health; private float health;
/** /** Displayed health (for animation, slightly behind health). */
* Displayed health (for animation, slightly behind health).
*/
private float healthDisplay; private float healthDisplay;
/** /** Beatmap HPDrainRate value. (0:easy ~ 10:hard) */
* Beatmap HPDrainRate value. (0:easy ~ 10:hard)
*/
private float drainRate = 5f; private float drainRate = 5f;
/** /** Beatmap OverallDifficulty value. (0:easy ~ 10:hard) */
* Beatmap OverallDifficulty value. (0:easy ~ 10:hard)
*/
private float difficulty = 5f; private float difficulty = 5f;
/** /** Default text symbol images. */
* Default text symbol images.
*/
private Image[] defaultSymbols; private Image[] defaultSymbols;
/** /** Score text symbol images. */
* Score text symbol images.
*/
private HashMap<Character, Image> scoreSymbols; private HashMap<Character, Image> scoreSymbols;
/** /** Letter grade images (large and small sizes). */
* Letter grade images (large and small sizes).
*/
private Image[] gradesLarge, gradesSmall; private Image[] gradesLarge, gradesSmall;
/** /** Container dimensions. */
* Container dimensions.
*/
private int width, height; private int width, height;
/** /**
@ -440,7 +401,7 @@ public class GameScore {
int modWidth = GameMod.AUTO.getImage().getWidth(); int modWidth = GameMod.AUTO.getImage().getWidth();
float modX = (width * 0.98f) - modWidth; float modX = (width * 0.98f) - modWidth;
int modCount = 0; int modCount = 0;
for (GameMod mod : GameMod.valuesReversed()) { for (GameMod mod : GameMod.VALUES_REVERSED) {
if (mod.isActive()) { if (mod.isActive()) {
mod.getImage().draw( mod.getImage().draw(
modX - (modCount * (modWidth / 2f)), modX - (modCount * (modWidth / 2f)),

View File

@ -28,50 +28,35 @@ import org.newdawn.slick.Image;
* Multi-part images and animations currently do not support hover updates. * Multi-part images and animations currently do not support hover updates.
*/ */
public class MenuButton { public class MenuButton {
/** /** The image associated with the button. */
* The image associated with the button.
*/
private Image img; private Image img;
/** /** The left and right parts of the button (optional). */
* The left and right parts of the button (optional).
*/
private Image imgL, imgR; private Image imgL, imgR;
/** /** The animation associated with the button. */
* The animation associated with the button.
*/
private Animation anim; private Animation anim;
/** /** The center coordinates. */
* The center coordinates.
*/
private float x, y; private float x, y;
/** /** The x and y radius of the button (scaled). */
* The x and y radius of the button (scaled).
*/
private float xRadius, yRadius; private float xRadius, yRadius;
/** /** The current and max scale of the button (for hovering). */
* The current and max scale of the button (for hovering).
*/
private float scale, hoverScale = 1.25f; private float scale, hoverScale = 1.25f;
/** /** The scaled expansion direction for the button (for hovering). */
* The scaled expansion direction for the botton (for hovering).
*/
private Expand dir = Expand.CENTER; private Expand dir = Expand.CENTER;
/** /** Scaled expansion directions (for hovering). */
* Scaled expansion directions (for hovering). public enum Expand { CENTER, UP_RIGHT, UP_LEFT, DOWN_RIGHT, DOWN_LEFT; }
*/
public enum Expand {
CENTER, UP_RIGHT, UP_LEFT, DOWN_RIGHT, DOWN_LEFT;
}
/** /**
* Creates a new button from an Image. * Creates a new button from an Image.
* @param img the image
* @param x the center x coordinate
* @param y the center y coordinate
*/ */
public MenuButton(Image img, float x, float y) { public MenuButton(Image img, float x, float y) {
this.img = img; this.img = img;
@ -84,9 +69,13 @@ public class MenuButton {
/** /**
* Creates a new button from a 3-part Image. * Creates a new button from a 3-part Image.
* @param imgCenter the center image
* @param imgLeft the left image
* @param imgRight the right image
* @param x the center x coordinate
* @param y the center y coordinate
*/ */
public MenuButton(Image imgCenter, Image imgLeft, Image imgRight, public MenuButton(Image imgCenter, Image imgLeft, Image imgRight, float x, float y) {
float x, float y) {
this.img = imgCenter; this.img = imgCenter;
this.imgL = imgLeft; this.imgL = imgLeft;
this.imgR = imgRight; this.imgR = imgRight;
@ -99,6 +88,9 @@ public class MenuButton {
/** /**
* Creates a new button from an Animation. * Creates a new button from an Animation.
* @param anim the animation
* @param x the center x coordinate
* @param y the center y coordinate
*/ */
public MenuButton(Animation anim, float x, float y) { public MenuButton(Animation anim, float x, float y) {
this.anim = anim; this.anim = anim;
@ -110,17 +102,33 @@ public class MenuButton {
} }
/** /**
* Sets/returns new center coordinates. * Sets a new center x coordinate.
*/ */
public void setX(float x) { this.x = x; } public void setX(float x) { this.x = x; }
/**
* Sets a new center y coordinate.
*/
public void setY(float y) { this.y = y; } public void setY(float y) { this.y = y; }
/**
* Returns the center x coordinate.
*/
public float getX() { return x; } public float getX() { return x; }
/**
* Returns the center y coordinate.
*/
public float getY() { return y; } public float getY() { return y; }
/** /**
* Returns the associated image or animation. * Returns the associated image.
*/ */
public Image getImage() { return img; } public Image getImage() { return img; }
/**
* Returns the associated animation.
*/
public Animation getAnimation() { return anim; } public Animation getAnimation() { return anim; }
/** /**
@ -181,17 +189,13 @@ public class MenuButton {
* Sets the maximum scale factor for the button (for hovering). * Sets the maximum scale factor for the button (for hovering).
* @param scale the maximum scale factor (default 1.25f) * @param scale the maximum scale factor (default 1.25f)
*/ */
public void setHoverScale(float scale) { public void setHoverScale(float scale) { this.hoverScale = scale; }
this.hoverScale = scale;
}
/** /**
* Sets the expansion direction when hovering over the button. * Sets the expansion direction when hovering over the button.
* @param dir the direction * @param dir the direction
*/ */
public void setHoverDir(Expand dir) { public void setHoverDir(Expand dir) { this.dir = dir; }
this.dir = dir;
}
/** /**
* Updates the scale of the button depending on whether or not the cursor * Updates the scale of the button depending on whether or not the cursor

View File

@ -52,9 +52,7 @@ import org.newdawn.slick.util.ResourceLoader;
* Creates game container, adds all other states, and initializes song data. * Creates game container, adds all other states, and initializes song data.
*/ */
public class Opsu extends StateBasedGame { public class Opsu extends StateBasedGame {
/** /** Game states. */
* Game states.
*/
public static final int public static final int
STATE_SPLASH = 0, STATE_SPLASH = 0,
STATE_MAINMENU = 1, STATE_MAINMENU = 1,
@ -65,11 +63,13 @@ public class Opsu extends StateBasedGame {
STATE_GAMERANKING = 6, STATE_GAMERANKING = 6,
STATE_OPTIONSMENU = 7; STATE_OPTIONSMENU = 7;
/** /** Server socket for restricting the program to a single instance. */
* Used to restrict the program to a single instance.
*/
private static ServerSocket SERVER_SOCKET; private static ServerSocket SERVER_SOCKET;
/**
* Constructor.
* @param name the program name
*/
public Opsu(String name) { public Opsu(String name) {
super(name); super(name);
} }

View File

@ -42,43 +42,29 @@ import org.newdawn.slick.util.Log;
* Handles all user options. * Handles all user options.
*/ */
public class Options { public class Options {
/** /** Temporary folder for file conversions, auto-deleted upon successful exit. */
* Temporary folder for file conversions, auto-deleted upon successful exit.
*/
public static final File TMP_DIR = new File(".opsu_tmp/"); public static final File TMP_DIR = new File(".opsu_tmp/");
/** /** File for logging errors. */
* File for logging errors.
*/
public static final File LOG_FILE = new File(".opsu.log"); public static final File LOG_FILE = new File(".opsu.log");
/** /** File for storing user options. */
* File for storing user options.
*/
private static final File OPTIONS_FILE = new File(".opsu.cfg"); private static final File OPTIONS_FILE = new File(".opsu.cfg");
/** /** Beatmap directories (where to search for files). */
* Beatmap directories (where to search for files).
*/
private static final String[] BEATMAP_DIRS = { private static final String[] BEATMAP_DIRS = {
"C:/Program Files (x86)/osu!/Songs/", "C:/Program Files (x86)/osu!/Songs/",
"C:/Program Files/osu!/Songs/", "C:/Program Files/osu!/Songs/",
"Songs/" "Songs/"
}; };
/** /** Font file name. */
* Font file name.
*/
public static final String FONT_NAME = "kochi-gothic.ttf"; public static final String FONT_NAME = "kochi-gothic.ttf";
/** /** Repository address. */
* Repository address.
*/
public static URI REPOSITORY_URI; public static URI REPOSITORY_URI;
/** /** Issue reporting address. */
* Issue reporting address.
*/
public static URI ISSUES_URI; public static URI ISSUES_URI;
static { static {
@ -90,36 +76,26 @@ public class Options {
} }
} }
/** /** The beatmap directory. */
* The beatmap directory.
*/
private static File beatmapDir; private static File beatmapDir;
/** /** The OSZ archive directory. */
* The OSZ archive directory.
*/
private static File oszDir; private static File oszDir;
/** /** The screenshot directory (created when needed). */
* The screenshot directory (created when needed).
*/
private static File screenshotDir; private static File screenshotDir;
/** /** The current skin directory (for user skins). */
* The current skin directory (for user skins).
*/
private static File skinDir; private static File skinDir;
/** /**
* The theme song string: * The theme song string:
* filename, title, artist, length (ms) * {@code filename,title,artist,length(ms)}
*/ */
private static String themeString = "theme.ogg,welcome to osu!,nekodex,48000"; private static String themeString = "theme.ogg,welcome to osu!,nekodex,48000";
/** /** Game options. */
* Game options. public enum GameOption {
*/
public static enum GameOption {
NULL (null, null), NULL (null, null),
SCREEN_RESOLUTION ("Screen Resolution", "Restart (Ctrl+Shift+F5) to apply resolution changes.") { SCREEN_RESOLUTION ("Screen Resolution", "Restart (Ctrl+Shift+F5) to apply resolution changes.") {
@Override @Override
@ -359,14 +335,10 @@ public class Options {
public void click(GameContainer container) { themeSongEnabled = !themeSongEnabled; } public void click(GameContainer container) { themeSongEnabled = !themeSongEnabled; }
}; };
/** /** Option name. */
* Option name.
*/
private String name; private String name;
/** /** Option description. */
* Option description.
*/
private String description; private String description;
/** /**
@ -411,9 +383,7 @@ public class Options {
public void drag(GameContainer container, int d) {} public void drag(GameContainer container, int d) {}
}; };
/** /** Screen resolutions. */
* Screen resolutions.
*/
private enum Resolution { private enum Resolution {
RES_800_600 (800, 600), RES_800_600 (800, 600),
RES_1024_600 (1024, 600), RES_1024_600 (1024, 600),
@ -429,14 +399,10 @@ public class Options {
RES_2560_1440 (2560, 1440), RES_2560_1440 (2560, 1440),
RES_2560_1600 (2560, 1600); RES_2560_1600 (2560, 1600);
/** /** Screen dimensions. */
* Screen dimensions.
*/
private int width, height; private int width, height;
/** /** Enum values. */
* Enum values.
*/
private static Resolution[] values = Resolution.values(); private static Resolution[] values = Resolution.values();
/** /**
@ -468,131 +434,81 @@ public class Options {
public String toString() { return String.format("%sx%s", width, height); } public String toString() { return String.format("%sx%s", width, height); }
} }
/** /** Current screen resolution. */
* Index (row) in resolutions[][] array.
*/
private static Resolution resolution = Resolution.RES_1024_768; private static Resolution resolution = Resolution.RES_1024_768;
// /** // /** Whether or not the game should run in fullscreen mode. */
// * Whether or not the game should run in fullscreen mode.
// */
// private static boolean fullscreen = false; // private static boolean fullscreen = false;
/** /** Frame limiters. */
* Frame limiters.
*/
private static final int[] targetFPS = { 60, 120, 240 }; private static final int[] targetFPS = { 60, 120, 240 };
/** /** Index in targetFPS[] array. */
* Index in targetFPS[] array.
*/
private static int targetFPSindex = 0; private static int targetFPSindex = 0;
/** /** Whether or not to show the FPS. */
* Whether or not to show the FPS.
*/
private static boolean showFPS = false; private static boolean showFPS = false;
/** /** Whether or not to show hit lighting effects. */
* Whether or not to show hit lighting effects.
*/
private static boolean showHitLighting = true; private static boolean showHitLighting = true;
/** /** Whether or not to show combo burst images. */
* Whether or not to show combo burst images.
*/
private static boolean showComboBursts = true; private static boolean showComboBursts = true;
/** /** Global volume level. */
* Global volume level.
*/
private static int masterVolume = 35; private static int masterVolume = 35;
/** /** Default music volume. */
* Default music volume.
*/
private static int musicVolume = 80; private static int musicVolume = 80;
/** /** Default sound effect volume. */
* Default sound effect volume.
*/
private static int effectVolume = 70; private static int effectVolume = 70;
/** /** Default hit sound volume. */
* Default hit sound volume.
*/
private static int hitSoundVolume = 70; private static int hitSoundVolume = 70;
/** /** Offset time, in milliseconds, for music position-related elements. */
* Offset time, in milliseconds, for music position-related elements.
*/
private static int musicOffset = -150; private static int musicOffset = -150;
/** /** Screenshot file formats. */
* Screenshot file format.
*/
private static String[] screenshotFormat = { "png", "jpg", "bmp" }; private static String[] screenshotFormat = { "png", "jpg", "bmp" };
/** /** Index in screenshotFormat[] array. */
* Index in screenshotFormat[] array.
*/
private static int screenshotFormatIndex = 0; private static int screenshotFormatIndex = 0;
/** /** Port binding. */
* Port binding.
*/
private static int port = 49250; private static int port = 49250;
/** /** Whether or not to use the new cursor type. */
* Whether or not to use the new cursor type.
*/
private static boolean newCursor = true; private static boolean newCursor = true;
/** /** Whether or not dynamic backgrounds are enabled. */
* Whether or not dynamic backgrounds are enabled.
*/
private static boolean dynamicBackground = true; private static boolean dynamicBackground = true;
/** /** Whether or not to display perfect hit results. */
* Whether or not to display perfect hit results.
*/
private static boolean showPerfectHit = true; private static boolean showPerfectHit = true;
/** /** Percentage to dim background images during gameplay. */
* Percentage to dim background images during gameplay.
*/
private static int backgroundDim = 30; private static int backgroundDim = 30;
/** /** Whether or not to always display the default playfield background. */
* Whether or not to always display the default playfield background.
*/
private static boolean forceDefaultPlayfield = false; private static boolean forceDefaultPlayfield = false;
/** /** Whether or not to ignore resources in the beatmap folders. */
* Whether or not to ignore resources in the beatmap folders.
*/
private static boolean ignoreBeatmapSkins = false; private static boolean ignoreBeatmapSkins = false;
/** /** Whether or not to play the theme song. */
* Whether or not to play the theme song.
*/
private static boolean themeSongEnabled = true; private static boolean themeSongEnabled = true;
/** /** Fixed difficulty overrides. */
* Fixed difficulty overrides.
*/
private static float private static float
fixedCS = 0f, fixedHP = 0f, fixedCS = 0f, fixedHP = 0f,
fixedAR = 0f, fixedOD = 0f; fixedAR = 0f, fixedOD = 0f;
/** /** Whether or not to display the files being loaded in the splash screen. */
* Whether or not to display the files being loaded in the splash screen.
*/
private static boolean loadVerbose = false; private static boolean loadVerbose = false;
/** /** Track checkpoint time, in seconds. */
* Track checkpoint time, in seconds.
*/
private static int checkpoint = 0; private static int checkpoint = 0;
/** /**
@ -604,14 +520,10 @@ public class Options {
private static boolean disableSound = private static boolean disableSound =
(System.getProperty("os.name").toLowerCase().indexOf("linux") > -1); (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1);
/** /** Whether or not to display non-English metadata. */
* Whether or not to display non-English metadata.
*/
private static boolean showUnicode = false; private static boolean showUnicode = false;
/** /** Left and right game keys. */
* Left and right game keys.
*/
private static int private static int
keyLeft = Keyboard.KEY_NONE, keyLeft = Keyboard.KEY_NONE,
keyRight = Keyboard.KEY_NONE; keyRight = Keyboard.KEY_NONE;

View File

@ -31,79 +31,163 @@ import org.newdawn.slick.util.Log;
* Data type storing parsed data from OSU files. * Data type storing parsed data from OSU files.
*/ */
public class OsuFile implements Comparable<OsuFile> { public class OsuFile implements Comparable<OsuFile> {
/** /** Map of all loaded background images. */
* The OSU File object associated with this OsuFile. private static HashMap<OsuFile, Image> bgImageMap = new HashMap<OsuFile, Image>();
*/
/** The OSU File object associated with this OsuFile. */
private File file; private File file;
/* [General] */ /**
public File audioFilename; // audio file object * [General]
public int audioLeadIn = 0; // delay before music starts (in ms) */
// public String audioHash = ""; // audio hash (deprecated)
public int previewTime = -1; // start position of music preview (in ms)
public byte countdown = 0; // countdown type (0:disabled, 1:normal, 2:half, 3:double)
public String sampleSet = ""; // sound samples ("None", "Normal", "Soft")
public float stackLeniency = 0.7f; // how often closely placed hit objects will be stacked together
public byte mode = 0; // game mode (0:osu!, 1:taiko, 2:catch the beat, 3:osu!mania)
public boolean letterboxInBreaks = false; // whether the letterbox (top/bottom black bars) appears during breaks
public boolean widescreenStoryboard = false;// whether the storyboard should be widescreen
public boolean epilepsyWarning = false; // whether to show an epilepsy warning
/* [Editor] */ /** Audio file object. */
/* Not implemented. */ public File audioFilename;
// public int[] bookmarks; // list of editor bookmarks (in ms)
// public float distanceSpacing = 0f; // multiplier for "Distance Snap"
// public byte beatDivisor = 0; // beat division
// public int gridSize = 0; // size of grid for "Grid Snap"
// public int timelineZoom = 0; // zoom in the editor timeline
/* [Metadata] */ /** Delay time before music starts (in ms). */
public String title = ""; // song title public int audioLeadIn = 0;
public String titleUnicode = ""; // song title (unicode)
public String artist = ""; // song artist
public String artistUnicode = ""; // song artist (unicode)
public String creator = ""; // beatmap creator
public String version = ""; // beatmap difficulty
public String source = ""; // song source
public String tags = ""; // song tags, for searching
public int beatmapID = 0; // beatmap ID
public int beatmapSetID = 0; // beatmap set ID
/* [Difficulty] */ /** Audio hash (deprecated). */
public float HPDrainRate = 5f; // HP drain (0:easy ~ 10:hard) // public String audioHash = "";
public float circleSize = 4f; // size of circles
public float overallDifficulty = 5f; // affects timing window, spinners, and approach speed (0:easy ~ 10:hard)
public float approachRate = -1f; // how long circles stay on the screen (0:long ~ 10:short) **not in old format**
public float sliderMultiplier = 1f; // slider movement speed multiplier
public float sliderTickRate = 1f; // rate at which slider ticks are placed (x per beat)
/* [Events] */ /** Start position of music preview (in ms). */
//Background and Video events (0) public int previewTime = -1;
public String bg; // background image path
// private Image bgImage; // background image (created when needed)
// public Video bgVideo; // background video (not implemented)
//Break Periods (2)
public ArrayList<Integer> breaks; // break periods (start time, end time, ...)
//Storyboard elements (not implemented)
/* [TimingPoints] */ /** Countdown type (0:disabled, 1:normal, 2:half, 3:double). */
public ArrayList<OsuTimingPoint> timingPoints; // timing points public byte countdown = 0;
int bpmMin = 0, bpmMax = 0; // min and max BPM
/* [Colours] */ /** Sound samples ("None", "Normal", "Soft"). */
public Color[] combo; // combo colors (R,G,B), max 5 public String sampleSet = "";
/* [HitObjects] */ /** How often closely placed hit objects will be stacked together. */
public OsuHitObject[] objects; // hit objects public float stackLeniency = 0.7f;
public int hitObjectCircle = 0; // number of circles
public int hitObjectSlider = 0; // number of sliders /** Game mode (0:osu!, 1:taiko, 2:catch the beat, 3:osu!mania). */
public int hitObjectSpinner = 0; // number of spinners public byte mode = 0;
public int endTime = -1; // last object end time (in ms)
/** Whether the letterbox (top/bottom black bars) appears during breaks. */
public boolean letterboxInBreaks = false;
/** Whether the storyboard should be widescreen. */
public boolean widescreenStoryboard = false;
/** Whether to show an epilepsy warning. */
public boolean epilepsyWarning = false;
/** /**
* Map of all loaded background images. * [Editor]
*/ */
private static HashMap<OsuFile, Image> bgImageMap = new HashMap<OsuFile, Image>();
/** List of editor bookmarks (in ms). */
// public int[] bookmarks;
/** Multiplier for "Distance Snap". */
// public float distanceSpacing = 0f;
/** Beat division. */
// public byte beatDivisor = 0;
/** Size of grid for "Grid Snap". */
// public int gridSize = 0;
/** Zoom in the editor timeline. */
// public int timelineZoom = 0;
/**
* [Metadata]
*/
/** Song title. */
public String title = "", titleUnicode = "";
/** Song artist. */
public String artist = "", artistUnicode = "";
/** Beatmap creator. */
public String creator = "";
/** Beatmap difficulty. */
public String version = "";
/** Song source. */
public String source = "";
/** Song tags (for searching). */
public String tags = "";
/** Beatmap ID. */
public int beatmapID = 0;
/** Beatmap set ID. */
public int beatmapSetID = 0;
/**
* [Difficulty]
*/
/** HP: Health drain rate (0:easy ~ 10:hard) */
public float HPDrainRate = 5f;
/** CS: Size of circles and sliders (0:large ~ 10:small). */
public float circleSize = 4f;
/** OD: Affects timing window, spinners, and approach speed (0:easy ~ 10:hard). */
public float overallDifficulty = 5f;
/** AR: How long circles stay on the screen (0:long ~ 10:short). */
public float approachRate = -1f;
/** Slider movement speed multiplier. */
public float sliderMultiplier = 1f;
/** Rate at which slider ticks are placed (x per beat). */
public float sliderTickRate = 1f;
/**
* [Events]
*/
/** Background image file name. */
public String bg;
/** Background video file name. */
// public String video;
/** All break periods (start time, end time, ...). */
public ArrayList<Integer> breaks;
/**
* [TimingPoints]
*/
/** All timing points. */
public ArrayList<OsuTimingPoint> timingPoints;
/** Song BPM range. */
int bpmMin = 0, bpmMax = 0;
/**
* [Colours]
*/
/** Combo colors (max 8). */
public Color[] combo;
/**
* [HitObjects]
*/
/** All hit objects. */
public OsuHitObject[] objects;
/** Number of individual objects. */
public int
hitObjectCircle = 0,
hitObjectSlider = 0,
hitObjectSpinner = 0;
/** Last object end time (in ms). */
public int endTime = -1;
/** /**
* Destroys all cached background images and resets the cache. * Destroys all cached background images and resets the cache.

View File

@ -30,43 +30,27 @@ import java.util.regex.Pattern;
* Indexed, expanding, doubly-linked list data type for song groups. * Indexed, expanding, doubly-linked list data type for song groups.
*/ */
public class OsuGroupList { public class OsuGroupList {
/** /** Song group structure (each group contains of an ArrayList of OsuFiles). */
* Song group structure (each group contains of an ArrayList of OsuFiles).
*/
private static OsuGroupList list; private static OsuGroupList list;
/** /** Search pattern for conditional expressions. */
* Search pattern for conditional expressions.
*/
private static final Pattern SEARCH_CONDITION_PATTERN = Pattern.compile( private static final Pattern SEARCH_CONDITION_PATTERN = Pattern.compile(
"(ar|cs|od|hp|bpm|length)(=|==|>|>=|<|<=)((\\d*\\.)?\\d+)" "(ar|cs|od|hp|bpm|length)(=|==|>|>=|<|<=)((\\d*\\.)?\\d+)"
); );
/** /** List containing all parsed nodes. */
* List containing all parsed nodes.
*/
private ArrayList<OsuGroupNode> parsedNodes; private ArrayList<OsuGroupNode> parsedNodes;
/** /** Total number of beatmaps (i.e. OsuFile objects). */
* Total number of maps (i.e. OsuFile objects).
*/
private int mapCount = 0; private int mapCount = 0;
/** /** Current list of nodes (subset of parsedNodes, used for searches). */
* Current list of nodes.
* (For searches; otherwise, a pointer to parsedNodes.)
*/
private ArrayList<OsuGroupNode> nodes; private ArrayList<OsuGroupNode> nodes;
/** /** Index of current expanded node (-1 if no node is expanded). */
* Index of current expanded node.
* If no node is expanded, the value will be -1.
*/
private int expandedIndex = -1; private int expandedIndex = -1;
/** /** The last search query. */
* The last search query.
*/
private String lastQuery = ""; private String lastQuery = "";
/** /**

View File

@ -28,26 +28,16 @@ import org.newdawn.slick.Image;
* Node in an OsuGroupList representing a group of OsuFile objects. * Node in an OsuGroupList representing a group of OsuFile objects.
*/ */
public class OsuGroupNode { public class OsuGroupNode {
/** List of associated OsuFile objects. */
/**
* List of associated OsuFile objects.
*/
public ArrayList<OsuFile> osuFiles; public ArrayList<OsuFile> osuFiles;
/** /** Index of this OsuGroupNode. */
* Index of this OsuGroupNode.
*/
public int index = 0; public int index = 0;
/** /** Index of selected osuFile (-1 if not focused). */
* Index of selected osuFile.
* If not focused, the value will be -1.
*/
public int osuFileIndex = -1; public int osuFileIndex = -1;
/** /** Links to other OsuGroupNode objects. */
* Links to other OsuGroupNode objects.
*/
public OsuGroupNode prev, next; public OsuGroupNode prev, next;
/** /**

View File

@ -22,23 +22,19 @@ package itdelatrisu.opsu;
* Data type representing a hit object. * Data type representing a hit object.
*/ */
public class OsuHitObject { public class OsuHitObject {
/** /** Hit object types (bits). */
* Hit object types (bits).
*/
public static final int public static final int
TYPE_CIRCLE = 1, TYPE_CIRCLE = 1,
TYPE_SLIDER = 2, TYPE_SLIDER = 2,
TYPE_NEWCOMBO = 4, // not an object TYPE_NEWCOMBO = 4, // not an object
TYPE_SPINNER = 8; TYPE_SPINNER = 8;
/** /** Hit sound types (bits). */
* Hit sound types (bits).
*/
public static final byte public static final byte
SOUND_NORMAL = 0, SOUND_NORMAL = 0,
SOUND_WHISTLE = 2, SOUND_WHISTLE = 2,
SOUND_FINISH = 4, SOUND_FINISH = 4,
SOUND_CLAP = 8; SOUND_CLAP = 8;
/** /**
* Slider curve types. * Slider curve types.
@ -50,82 +46,54 @@ public class OsuHitObject {
SLIDER_LINEAR = 'L', SLIDER_LINEAR = 'L',
SLIDER_PASSTHROUGH = 'P'; SLIDER_PASSTHROUGH = 'P';
/** /** Max hit object coordinates. */
* Max hit object coordinates.
*/
private static final int private static final int
MAX_X = 512, MAX_X = 512,
MAX_Y = 384; MAX_Y = 384;
/** /** The x and y multipliers for hit object coordinates. */
* The x and y multipliers for hit object coordinates.
*/
private static float xMultiplier, yMultiplier; private static float xMultiplier, yMultiplier;
/** /** The x and y offsets for hit object coordinates. */
* The x and y offsets for hit object coordinates.
*/
private static int private static int
xOffset, // offset right of border xOffset, // offset right of border
yOffset; // offset below health bar yOffset; // offset below health bar
/** /** Starting coordinates (scaled). */
* Starting coordinates (scaled).
*/
private float x, y; private float x, y;
/** /** Start time (in ms). */
* Start time (in ms).
*/
private int time; private int time;
/** /** Hit object type (TYPE_* bitmask). */
* Hit object type (TYPE_* bitmask).
*/
private int type; private int type;
/** /** Hit sound type (SOUND_* bitmask). */
* Hit sound type (SOUND_* bitmask).
*/
private byte hitSound; private byte hitSound;
/** /** Slider curve type (SLIDER_* constant). */
* Slider curve type (SLIDER_* constant).
*/
private char sliderType; private char sliderType;
/** /** Slider coordinate lists (scaled). */
* Slider coordinate lists (scaled).
*/
private float[] sliderX, sliderY; private float[] sliderX, sliderY;
/** /** Slider repeat count. */
* Slider repeat count.
*/
private int repeat; private int repeat;
/** /** Slider pixel length. */
* Slider pixel length.
*/
private float pixelLength; private float pixelLength;
/** /** Spinner end time (in ms). */
* Spinner end time (in ms).
*/
private int endTime; private int endTime;
// additional v10+ parameters not implemented... // additional v10+ parameters not implemented...
// addition -> sampl:add:cust:vol:hitsound // addition -> sampl:add:cust:vol:hitsound
// edge_hitsound, edge_addition (sliders only) // edge_hitsound, edge_addition (sliders only)
/** /** Current index in combo color array. */
* Current index in combo color array.
*/
private int comboIndex; private int comboIndex;
/** /** Number to display in hit object. */
* Number to display in hit object.
*/
private int comboNumber; private int comboNumber;
/** /**

View File

@ -37,24 +37,16 @@ import org.newdawn.slick.util.Log;
* Parser for OSU files. * Parser for OSU files.
*/ */
public class OsuParser { public class OsuParser {
/** /** The current file being parsed. */
* The current file being parsed.
*/
private static File currentFile; private static File currentFile;
/** /** The current directory number while parsing. */
* The current directory number while parsing.
*/
private static int currentDirectoryIndex = -1; private static int currentDirectoryIndex = -1;
/** /** The total number of directories to parse. */
* The total number of directories to parse.
*/
private static int totalDirectories = -1; private static int totalDirectories = -1;
/** /** The string lookup database. */
* The string database.
*/
private static HashMap<String, String> stringdb = new HashMap<String, String>(); private static HashMap<String, String> stringdb = new HashMap<String, String>();
// This class should not be instantiated. // This class should not be instantiated.

View File

@ -24,49 +24,31 @@ import org.newdawn.slick.util.Log;
* Data type representing a timing point. * Data type representing a timing point.
*/ */
public class OsuTimingPoint { public class OsuTimingPoint {
/** /** Timing point start time/offset (in ms). */
* Timing point start time/offset (in ms).
*/
private int time = 0; private int time = 0;
/** /** Time per beat (in ms). [NON-INHERITED] */
* Time per beat (in ms). [NON-INHERITED]
*/
private float beatLength = 0f; private float beatLength = 0f;
/** /** Slider multiplier. [INHERITED] */
* Slider multiplier. [INHERITED]
*/
private int velocity = 0; private int velocity = 0;
/** /** Beats per measure. */
* Beats per measure.
*/
private int meter = 4; private int meter = 4;
/** /** Sound sample type. */
* Sound sample type.
*/
private byte sampleType = 1; private byte sampleType = 1;
/** /** Custom sound sample type. */
* Custom sound sample type.
*/
private byte sampleTypeCustom = 0; private byte sampleTypeCustom = 0;
/** /** Volume of samples. [0, 100] */
* Volume of samples. [0, 100]
*/
private int sampleVolume = 100; private int sampleVolume = 100;
/** /** Whether or not this timing point is inherited. */
* Whether or not this timing point is inherited.
*/
private boolean inherited = false; private boolean inherited = false;
/** /** Whether or not Kiai Mode is active. */
* Whether or not Kiai Mode is active.
*/
private boolean kiai = false; private boolean kiai = false;
/** /**

View File

@ -28,14 +28,10 @@ import net.lingala.zip4j.exception.ZipException;
* Unpacker for OSZ (ZIP) archives. * Unpacker for OSZ (ZIP) archives.
*/ */
public class OszUnpacker { public class OszUnpacker {
/** /** The index of the current file being unpacked. */
* The index of the current file being unpacked.
*/
private static int fileIndex = -1; private static int fileIndex = -1;
/** /** The total number of directories to parse. */
* The total number of directories to parse.
*/
private static File[] files; private static File[] files;
// This class should not be instantiated. // This class should not be instantiated.

View File

@ -34,43 +34,29 @@ public enum SongSort {
BPM (3, "BPM", new BPMOrder()), BPM (3, "BPM", new BPMOrder()),
LENGTH (4, "Length", new LengthOrder()); LENGTH (4, "Length", new LengthOrder());
/** /** The ID of the sort (used for tab positioning). */
* The ID of the sort (used for tab positioning).
*/
private int id; private int id;
/** /** The name of the sort. */
* The name of the sort.
*/
private String name; private String name;
/** /** The comparator for the sort. */
* The comparator for the sort.
*/
private Comparator<OsuGroupNode> comparator; private Comparator<OsuGroupNode> comparator;
/** /** The tab associated with the sort (displayed in Song Menu screen). */
* The tab associated with the sort (displayed in Song Menu screen).
*/
private MenuButton tab; private MenuButton tab;
/** /** Total number of sorts. */
* Total number of sorts. private static final int SIZE = values().length;
*/
private static final int SIZE = SongSort.values().length;
/** /** Array of SongSort objects in reverse order. */
* Array of SongSort objects in reverse order.
*/
public static final SongSort[] VALUES_REVERSED; public static final SongSort[] VALUES_REVERSED;
static { static {
VALUES_REVERSED = SongSort.values(); VALUES_REVERSED = values();
Collections.reverse(Arrays.asList(VALUES_REVERSED)); Collections.reverse(Arrays.asList(VALUES_REVERSED));
} }
/** /** Current sort. */
* Current sort.
*/
private static SongSort currentSort = TITLE; private static SongSort currentSort = TITLE;
/** /**

View File

@ -57,9 +57,7 @@ import org.newdawn.slick.util.ResourceLoader;
* Contains miscellaneous utilities. * Contains miscellaneous utilities.
*/ */
public class Utils { public class Utils {
/** /** Game colors. */
* Game colors.
*/
public static final Color public static final Color
COLOR_BLACK_ALPHA = new Color(0, 0, 0, 0.5f), COLOR_BLACK_ALPHA = new Color(0, 0, 0, 0.5f),
COLOR_WHITE_ALPHA = new Color(255, 255, 255, 0.5f), COLOR_WHITE_ALPHA = new Color(255, 255, 255, 0.5f),
@ -75,56 +73,38 @@ public class Utils {
COLOR_WHITE_FADE = new Color(255, 255, 255, 1f), COLOR_WHITE_FADE = new Color(255, 255, 255, 1f),
COLOR_RED_HOVER = new Color(255, 112, 112); COLOR_RED_HOVER = new Color(255, 112, 112);
/** /** The default map colors, used when a map does not provide custom colors. */
* The default map colors, used when a map does not provide custom colors.
*/
public static final Color[] DEFAULT_COMBO = { public static final Color[] DEFAULT_COMBO = {
COLOR_GREEN_OBJECT, COLOR_BLUE_OBJECT, COLOR_GREEN_OBJECT, COLOR_BLUE_OBJECT,
COLOR_RED_OBJECT, COLOR_ORANGE_OBJECT COLOR_RED_OBJECT, COLOR_ORANGE_OBJECT
}; };
/** /** Game fonts. */
* Game fonts.
*/
public static UnicodeFont public static UnicodeFont
FONT_DEFAULT, FONT_BOLD, FONT_DEFAULT, FONT_BOLD,
FONT_XLARGE, FONT_LARGE, FONT_MEDIUM, FONT_SMALL; FONT_XLARGE, FONT_LARGE, FONT_MEDIUM, FONT_SMALL;
/** /** Back button (shared by other states). */
* Back button (shared by other states).
*/
private static MenuButton backButton; private static MenuButton backButton;
/** /** Cursor image and trail. */
* Cursor image and trail.
*/
private static Image cursor, cursorTrail, cursorMiddle; private static Image cursor, cursorTrail, cursorMiddle;
/** /** Last cursor coordinates. */
* Last cursor coordinates.
*/
private static int lastX = -1, lastY = -1; private static int lastX = -1, lastY = -1;
/** /** Stores all previous cursor locations to display a trail. */
* Stores all previous cursor locations to display a trail.
*/
private static LinkedList<Integer> private static LinkedList<Integer>
cursorX = new LinkedList<Integer>(), cursorX = new LinkedList<Integer>(),
cursorY = new LinkedList<Integer>(); cursorY = new LinkedList<Integer>();
/** /** Time to show volume image, in milliseconds. */
* Time to show volume image, in milliseconds.
*/
private static final int VOLUME_DISPLAY_TIME = 1500; private static final int VOLUME_DISPLAY_TIME = 1500;
/** /** Volume display elapsed time. */
* Volume display elapsed time.
*/
private static int volumeDisplay = -1; private static int volumeDisplay = -1;
/** /** Set of all Unicode strings already loaded. */
* Set of all Unicode strings already loaded.
*/
private static HashSet<String> loadedGlyphs = new HashSet<String>(); private static HashSet<String> loadedGlyphs = new HashSet<String>();
// game-related variables // game-related variables

View File

@ -34,29 +34,21 @@ public enum HitSound implements SoundController.SoundComponent {
SLIDERTICK ("slidertick"), SLIDERTICK ("slidertick"),
SLIDERWHISTLE ("sliderwhistle"); SLIDERWHISTLE ("sliderwhistle");
/** /** Sound sample sets. */
* Sound sample sets. public enum SampleSet {
*/
public static enum SampleSet {
NORMAL ("normal", 1), NORMAL ("normal", 1),
SOFT ("soft", 2), SOFT ("soft", 2),
DRUM ("drum", 3); DRUM ("drum", 3);
// TAIKO ("taiko", 4); // TAIKO ("taiko", 4);
/** /** The sample set name. */
* The sample set name.
*/
private String name; private String name;
/** /** The sample set index. */
* The sample set index.
*/
private int index; private int index;
/** /** Total number of sample sets. */
* Total number of sample sets. public static final int SIZE = values().length;
*/
public static final int SIZE = SampleSet.values().length;
/** /**
* Constructor. * Constructor.
@ -80,25 +72,17 @@ public enum HitSound implements SoundController.SoundComponent {
public int getIndex() { return index; } public int getIndex() { return index; }
} }
/** /** Current sample set. */
* Current sample set.
*/
private static SampleSet currentSampleSet; private static SampleSet currentSampleSet;
/** /** The file name. */
* The file name.
*/
private String filename; private String filename;
/** /** The Clip associated with the hit sound. */
* The Clip associated with the hit sound.
*/
private HashMap<SampleSet, Clip> clips; private HashMap<SampleSet, Clip> clips;
/** /** Total number of hit sounds. */
* Total number of hit sounds. public static final int SIZE = values().length;
*/
public static final int SIZE = HitSound.values().length;
/** /**
* Constructor. * Constructor.

View File

@ -41,39 +41,25 @@ import org.newdawn.slick.openal.SoundStore;
* Controller for all music. * Controller for all music.
*/ */
public class MusicController { public class MusicController {
/** /** The current music track. */
* The current music track.
*/
private static Music player; private static Music player;
/** /** The last OsuFile passed to play(). */
* The last OsuFile passed to play().
*/
private static OsuFile lastOsu; private static OsuFile lastOsu;
/** /** Temporary WAV file for file conversions (to be deleted). */
* Temporary WAV file for file conversions (to be deleted).
*/
private static File wavFile; private static File wavFile;
/** /** Thread for loading tracks. */
* Thread for loading tracks.
*/
private static Thread trackLoader; private static Thread trackLoader;
/** /** Whether the theme song is currently playing. */
* Whether the theme song is currently playing.
*/
private static boolean themePlaying = false; private static boolean themePlaying = false;
/** /** Track pause time. */
* Track pause time.
*/
private static float pauseTime = 0f; private static float pauseTime = 0f;
/** /** Whether the current track volume is dimmed. */
* Whether the current track volume is dimmed.
*/
private static boolean trackDimmed = false; private static boolean trackDimmed = false;
// This class should not be instantiated. // This class should not be instantiated.

View File

@ -42,9 +42,7 @@ import org.newdawn.slick.util.ResourceLoader;
* Note: Uses Java Sound because OpenAL lags too much for accurate hit sounds. * Note: Uses Java Sound because OpenAL lags too much for accurate hit sounds.
*/ */
public class SoundController { public class SoundController {
/** /** Interface for all (non-music) sound components. */
* Interface for all (non-music) sound components.
*/
public interface SoundComponent { public interface SoundComponent {
/** /**
* Returns the Clip associated with the sound component. * Returns the Clip associated with the sound component.
@ -53,19 +51,13 @@ public class SoundController {
public Clip getClip(); public Clip getClip();
} }
/** /** Sample volume multiplier, from timing points [0, 1]. */
* Sample volume multiplier, from timing points [0, 1].
*/
private static float sampleVolumeMultiplier = 1f; private static float sampleVolumeMultiplier = 1f;
/** /** The name of the current sound file being loaded. */
* The name of the current sound file being loaded.
*/
private static String currentFileName; private static String currentFileName;
/** /** The number of the current sound file being loaded. */
* The number of the current sound file being loaded.
*/
private static int currentFileIndex = -1; private static int currentFileIndex = -1;
// This class should not be instantiated. // This class should not be instantiated.

View File

@ -43,20 +43,14 @@ public enum SoundEffect implements SoundController.SoundComponent {
SPINNEROSU ("spinner-osu"), SPINNEROSU ("spinner-osu"),
SPINNERSPIN ("spinnerspin"); SPINNERSPIN ("spinnerspin");
/** /** The file name. */
* The file name.
*/
private String filename; private String filename;
/** /** The Clip associated with the sound effect. */
* The Clip associated with the sound effect.
*/
private Clip clip; private Clip clip;
/** /** Total number of sound effects. */
* Total number of sound effects. public static final int SIZE = values().length;
*/
public static final int SIZE = SoundEffect.values().length;
/** /**
* Constructor. * Constructor.

View File

@ -34,29 +34,19 @@ import org.newdawn.slick.Graphics;
* Data type representing a circle object. * Data type representing a circle object.
*/ */
public class Circle implements HitObject { public class Circle implements HitObject {
/** /** The associated OsuHitObject. */
* The associated OsuHitObject.
*/
private OsuHitObject hitObject; private OsuHitObject hitObject;
/** /** The associated Game object. */
* The associated Game object.
*/
private Game game; private Game game;
/** /** The associated GameScore object. */
* The associated GameScore object.
*/
private GameScore score; private GameScore score;
/** /** The color of this circle. */
* The color of this circle.
*/
private Color color; private Color color;
/** /** Whether or not the circle result ends the combo streak. */
* Whether or not the circle result ends the combo streak.
*/
private boolean comboEnd; private boolean comboEnd;
/** /**

View File

@ -37,89 +37,55 @@ import org.newdawn.slick.Image;
* Data type representing a slider object. * Data type representing a slider object.
*/ */
public class Slider implements HitObject { public class Slider implements HitObject {
/** /** Slider ball animation. */
* Slider ball animation.
*/
private static Animation sliderBall; private static Animation sliderBall;
/** /** Slider movement speed multiplier. */
* Slider movement speed multiplier.
*/
private static float sliderMultiplier = 1.0f; private static float sliderMultiplier = 1.0f;
/** /** Rate at which slider ticks are placed. */
* Rate at which slider ticks are placed.
*/
private static float sliderTickRate = 1.0f; private static float sliderTickRate = 1.0f;
/** /** The associated OsuHitObject. */
* The associated OsuHitObject.
*/
private OsuHitObject hitObject; private OsuHitObject hitObject;
/** /** The associated Game object. */
* The associated Game object.
*/
private Game game; private Game game;
/** /** The associated GameScore object. */
* The associated GameScore object.
*/
private GameScore score; private GameScore score;
/** /** The color of this slider. */
* The color of this slider.
*/
private Color color; private Color color;
/** /** The underlying Bezier object. */
* The underlying Bezier object.
*/
private Bezier bezier; private Bezier bezier;
/** /** The time duration of the slider, in milliseconds. */
* The time duration of the slider, in milliseconds.
*/
private float sliderTime = 0f; private float sliderTime = 0f;
/** /** The time duration of the slider including repeats, in milliseconds. */
* The time duration of the slider including repeats, in milliseconds.
*/
private float sliderTimeTotal = 0f; private float sliderTimeTotal = 0f;
/** /** Whether or not the result of the initial hit circle has been processed. */
* Whether or not the result of the initial hit circle has been processed.
*/
private boolean sliderClicked = false; private boolean sliderClicked = false;
/** /** Whether or not to show the follow circle. */
* Whether or not to show the follow circle.
*/
private boolean followCircleActive = false; private boolean followCircleActive = false;
/** /** Whether or not the slider result ends the combo streak. */
* Whether or not the slider result ends the combo streak.
*/
private boolean comboEnd; private boolean comboEnd;
/** /** The number of repeats that have passed so far. */
* The number of repeats that have passed so far.
*/
private int currentRepeats = 0; private int currentRepeats = 0;
/** /** The t values of the slider ticks. */
* The t values of the slider ticks.
*/
private float[] ticksT; private float[] ticksT;
/** /** The tick index in the ticksT[] array. */
* The tick index in the ticksT[] array.
*/
private int tickIndex = 0; private int tickIndex = 0;
/** /** Number of ticks hit and tick intervals so far. */
* Number of ticks hit and tick intervals so far.
*/
private int ticksHit = 0, tickIntervals = 1; private int ticksHit = 0, tickIntervals = 1;
/** /**
@ -129,24 +95,16 @@ public class Slider implements HitObject {
* @author pictuga (https://github.com/pictuga/osu-web) * @author pictuga (https://github.com/pictuga/osu-web)
*/ */
private class Bezier { private class Bezier {
/** /** The order of the Bezier curve. */
* The order of the Bezier curve.
*/
private int order; private int order;
/** /** The step size (used for drawing). */
* The step size (used for drawing),
*/
private float step; private float step;
/** /** The curve points for drawing with step size given by 'step'. */
* The curve points for drawing with step size given by 'step'.
*/
private float[] curveX, curveY; private float[] curveX, curveY;
/** /** The angles of the first and last control points. */
* The angles of the first and last control points.
*/
private float startAngle, endAngle; private float startAngle, endAngle;
/** /**

View File

@ -37,34 +37,22 @@ import org.newdawn.slick.Image;
* Data type representing a spinner object. * Data type representing a spinner object.
*/ */
public class Spinner implements HitObject { public class Spinner implements HitObject {
/** /** Container dimensions. */
* Container dimensions.
*/
private static int width, height; private static int width, height;
/** /** The associated OsuHitObject. */
* The associated OsuHitObject.
*/
private OsuHitObject hitObject; private OsuHitObject hitObject;
/** /** The associated GameScore object. */
* The associated GameScore object.
*/
private GameScore score; private GameScore score;
/** /** The last rotation angle. */
* The last rotation angle.
*/
private float lastAngle = -1f; private float lastAngle = -1f;
/** /** The current number of rotations. */
* The current number of rotations.
*/
private float rotations = 0f; private float rotations = 0f;
/** /** The total number of rotations needed to clear the spinner. */
* The total number of rotations needed to clear the spinner.
*/
private float rotationsNeeded; private float rotationsNeeded;
/** /**

View File

@ -59,9 +59,7 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
* "Game" state. * "Game" state.
*/ */
public class Game extends BasicGameState { public class Game extends BasicGameState {
/** /** Game restart states. */
* Game restart states.
*/
public enum Restart { public enum Restart {
FALSE, // no restart FALSE, // no restart
NEW, // first time loading song NEW, // first time loading song
@ -69,121 +67,75 @@ public class Game extends BasicGameState {
LOSE; // health is zero: no-continue/force restart LOSE; // health is zero: no-continue/force restart
} }
/** /** Minimum time before start of song, in milliseconds, to process skip-related actions. */
* Minimum time before start of song, in milliseconds, to process skip-related actions.
*/
private static final int SKIP_OFFSET = 2000; private static final int SKIP_OFFSET = 2000;
/** /** The associated OsuFile object. */
* The associated OsuFile object.
*/
private OsuFile osu; private OsuFile osu;
/** /** The associated GameScore object (holds all score data). */
* The associated GameScore object (holds all score data).
*/
private GameScore score; private GameScore score;
/** /** Current hit object index in OsuHitObject[] array. */
* Current hit object index in OsuHitObject[] array.
*/
private int objectIndex = 0; private int objectIndex = 0;
/** /** The map's HitObjects, indexed by objectIndex. */
* The map's HitObjects, indexed by objectIndex.
*/
private HitObject[] hitObjects; private HitObject[] hitObjects;
/** /** Delay time, in milliseconds, before song starts. */
* Delay time, in milliseconds, before song starts.
*/
private int leadInTime; private int leadInTime;
/** /** Hit object approach time, in milliseconds. */
* Hit object approach time, in milliseconds.
*/
private int approachTime; private int approachTime;
/** /** Time offsets for obtaining each hit result (indexed by HIT_* constants). */
* Time offsets for obtaining each hit result (indexed by HIT_* constants).
*/
private int[] hitResultOffset; private int[] hitResultOffset;
/** /** Current restart state. */
* Current restart state.
*/
private Restart restart; private Restart restart;
/** /** Current break index in breaks ArrayList. */
* Current break index in breaks ArrayList.
*/
private int breakIndex; private int breakIndex;
/** /** Break start time (0 if not in break). */
* Break start time (0 if not in break).
*/
private int breakTime = 0; private int breakTime = 0;
/** /** Whether the break sound has been played. */
* Whether the break sound has been played.
*/
private boolean breakSound; private boolean breakSound;
/** /** Skip button (displayed at song start, when necessary). */
* Skip button (displayed at song start, when necessary).
*/
private MenuButton skipButton; private MenuButton skipButton;
/** /** Current timing point index in timingPoints ArrayList. */
* Current timing point index in timingPoints ArrayList.
*/
private int timingPointIndex; private int timingPointIndex;
/** /** Current beat lengths (base value and inherited value). */
* Current beat lengths (base value and inherited value).
*/
private float beatLengthBase, beatLength; private float beatLengthBase, beatLength;
/** /** Whether the countdown sound has been played. */
* Whether the countdown sound has been played.
*/
private boolean private boolean
countdownReadySound, countdown3Sound, countdown1Sound, countdownReadySound, countdown3Sound, countdown1Sound,
countdown2Sound, countdownGoSound; countdown2Sound, countdownGoSound;
/** /** Mouse coordinates before game paused. */
* Mouse coordinates before game paused.
*/
private int pausedMouseX = -1, pausedMouseY = -1; private int pausedMouseX = -1, pausedMouseY = -1;
/** /** Track position when game paused. */
* Track position when game paused.
*/
private int pauseTime = -1; private int pauseTime = -1;
/** /** Value for handling hitCircleSelect pulse effect (expanding, alpha level). */
* Value for handling hitCircleSelect pulse effect (expanding, alpha level).
*/
private float pausePulse; private float pausePulse;
/** /** Whether a checkpoint has been loaded during this game. */
* Whether a checkpoint has been loaded during this game.
*/
private boolean checkpointLoaded = false; private boolean checkpointLoaded = false;
/** /** Number of deaths, used if "Easy" mod is enabled. */
* Number of deaths, used if "Easy" mod is enabled.
*/
private byte deaths = 0; private byte deaths = 0;
/** /** Track position at death, used if "Easy" mod is enabled. */
* Track position at death, used if "Easy" mod is enabled.
*/
private int deathTime = -1; private int deathTime = -1;
/** /** Number of retries. */
* Number of retries.
*/
private int retries = 0; private int retries = 0;
// game-related variables // game-related variables

View File

@ -47,19 +47,13 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
* </ul> * </ul>
*/ */
public class GamePauseMenu extends BasicGameState { public class GamePauseMenu extends BasicGameState {
/** /** Music fade-out time, in milliseconds. */
* Music fade-out time, in milliseconds.
*/
private static final int FADEOUT_TIME = 1000; private static final int FADEOUT_TIME = 1000;
/** /** Track position when the pause menu was loaded (for FADEOUT_TIME). */
* Track position when the pause menu was loaded (for FADEOUT_TIME).
*/
private long pauseStartTime; private long pauseStartTime;
/** /** "Continue", "Retry", and "Back" buttons. */
* "Continue", "Retry", and "Back" buttons.
*/
private MenuButton continueButton, retryButton, backButton; private MenuButton continueButton, retryButton, backButton;
// game-related variables // game-related variables

View File

@ -50,14 +50,10 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
* </ul> * </ul>
*/ */
public class GameRanking extends BasicGameState { public class GameRanking extends BasicGameState {
/** /** Associated GameScore object. */
* Associated GameScore object.
*/
private GameScore score; private GameScore score;
/** /** "Retry" and "Exit" buttons. */
* "Retry" and "Exit" buttons.
*/
private MenuButton retryButton, exitButton; private MenuButton retryButton, exitButton;
// game-related variables // game-related variables
@ -107,11 +103,11 @@ public class GameRanking extends BasicGameState {
score.drawRankingElements(g, width, height); score.drawRankingElements(g, width, height);
// game mods // game mods
for (GameMod mod : GameMod.valuesReversed()) { for (GameMod mod : GameMod.VALUES_REVERSED) {
if (mod.isActive()) { if (mod.isActive()) {
Image modImage = mod.getImage(); Image modImage = mod.getImage();
modImage.draw( modImage.draw(
(width * 0.75f) + ((mod.getID() - (GameMod.size() / 2)) * modImage.getWidth() / 3f), (width * 0.75f) + ((mod.getID() - (GameMod.SIZE / 2)) * modImage.getWidth() / 3f),
height / 2f height / 2f
); );
} }

View File

@ -57,54 +57,34 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
* </ul> * </ul>
*/ */
public class MainMenu extends BasicGameState { public class MainMenu extends BasicGameState {
/** /** Idle time, in milliseconds, before returning the logo to its original position. */
* Idle time, in milliseconds, before returning the logo to its original position.
*/
private static final short MOVE_DELAY = 5000; private static final short MOVE_DELAY = 5000;
/** /** Logo button that reveals other buttons on click. */
* Logo button that reveals other buttons on click.
*/
private MenuButton logo; private MenuButton logo;
/** /** Whether or not the logo has been clicked. */
* Whether or not the logo has been clicked.
*/
private boolean logoClicked = false; private boolean logoClicked = false;
/** /** Delay timer, in milliseconds, before starting to move the logo back to the center. */
* Delay timer, in milliseconds, before starting to move the logo back to the center.
*/
private int logoTimer = 0; private int logoTimer = 0;
/** /** Main "Play" and "Exit" buttons. */
* Main "Play" and "Exit" buttons.
*/
private MenuButton playButton, exitButton; private MenuButton playButton, exitButton;
/** /** Music control buttons. */
* Music control buttons.
*/
private MenuButton musicPlay, musicPause, musicNext, musicPrevious; private MenuButton musicPlay, musicPause, musicNext, musicPrevious;
/** /** Button linking to repository. */
* Button linking to repository.
*/
private MenuButton repoButton; private MenuButton repoButton;
/** /** Application start time, for drawing the total running time. */
* Application start time, for drawing the total running time.
*/
private long osuStartTime; private long osuStartTime;
/** /** Indexes of previous songs. */
* Indexes of previous songs.
*/
private Stack<Integer> previous; private Stack<Integer> previous;
/** /** Background alpha level (for fade-in effect). */
* Background alpha level (for fade-in effect).
*/
private float bgAlpha = 0f; private float bgAlpha = 0f;
// game-related variables // game-related variables

View File

@ -42,14 +42,10 @@ import org.newdawn.slick.state.transition.FadeInTransition;
* </ul> * </ul>
*/ */
public class MainMenuExit extends BasicGameState { public class MainMenuExit extends BasicGameState {
/** /** "Yes" and "No" buttons. */
* "Yes" and "No" buttons.
*/
private MenuButton yesButton, noButton; private MenuButton yesButton, noButton;
/** /** Initial x coordinate offsets left/right of center (for shifting animation). */
* Initial x coordinate offsets left/right of center (for shifting animation).
*/
private float centerOffset; private float centerOffset;
// game-related variables // game-related variables

View File

@ -18,9 +18,6 @@
package itdelatrisu.opsu.states; package itdelatrisu.opsu.states;
import java.util.Arrays;
import java.util.Collections;
import itdelatrisu.opsu.GameImage; import itdelatrisu.opsu.GameImage;
import itdelatrisu.opsu.GameMod; import itdelatrisu.opsu.GameMod;
import itdelatrisu.opsu.MenuButton; import itdelatrisu.opsu.MenuButton;
@ -31,6 +28,9 @@ import itdelatrisu.opsu.Utils;
import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundController;
import itdelatrisu.opsu.audio.SoundEffect; import itdelatrisu.opsu.audio.SoundEffect;
import java.util.Arrays;
import java.util.Collections;
import org.newdawn.slick.Color; import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer; import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics; import org.newdawn.slick.Graphics;
@ -46,9 +46,7 @@ import org.newdawn.slick.state.transition.FadeInTransition;
* "Game Options" state. * "Game Options" state.
*/ */
public class OptionsMenu extends BasicGameState { public class OptionsMenu extends BasicGameState {
/** /** Option tabs. */
* Option tabs.
*/
private enum OptionTab { private enum OptionTab {
DISPLAY ("Display", new GameOption[] { DISPLAY ("Display", new GameOption[] {
GameOption.SCREEN_RESOLUTION, GameOption.SCREEN_RESOLUTION,
@ -88,39 +86,26 @@ public class OptionsMenu extends BasicGameState {
GameOption.CHECKPOINT GameOption.CHECKPOINT
}); });
/** /** Total number of tabs. */
* Total number of mods. public static final int SIZE = values().length;
*/
public static final int SIZE = OptionTab.values().length;
/** /** Array of OptionTab objects in reverse order. */
* Enum values. public static final OptionTab[] VALUES_REVERSED;
*/ static {
private static OptionTab[] values = OptionTab.values(); VALUES_REVERSED = values();
Collections.reverse(Arrays.asList(VALUES_REVERSED));
/**
* Returns an array of OptionTab objects in reverse order.
* @return all tabs in reverse order
*/
public static OptionTab[] valuesReversed() {
OptionTab[] tabs = OptionTab.values();
Collections.reverse(Arrays.asList(tabs));
return tabs;
} }
/** /** Enum values. */
* Tab name. private static OptionTab[] values = values();
*/
/** Tab name. */
private String name; private String name;
/** /** Options array. */
* Options array.
*/
public GameOption[] options; public GameOption[] options;
/** /** Associated tab button. */
* Associated tab button.
*/
public MenuButton button; public MenuButton button;
/** /**
@ -149,26 +134,18 @@ public class OptionsMenu extends BasicGameState {
public OptionTab prev() { return values[(this.ordinal() + (SIZE - 1)) % values.length]; } public OptionTab prev() { return values[(this.ordinal() + (SIZE - 1)) % values.length]; }
} }
/** /** Current tab. */
* Current tab.
*/
private OptionTab currentTab; private OptionTab currentTab;
/** /** Max number of options displayed on one screen. */
* Max number of options displayed on one screen.
*/
private int maxOptionsScreen = Math.max( private int maxOptionsScreen = Math.max(
Math.max(OptionTab.DISPLAY.options.length, OptionTab.MUSIC.options.length), Math.max(OptionTab.DISPLAY.options.length, OptionTab.MUSIC.options.length),
Math.max(OptionTab.GAMEPLAY.options.length, OptionTab.CUSTOM.options.length)); Math.max(OptionTab.GAMEPLAY.options.length, OptionTab.CUSTOM.options.length));
/** /** Key entry states. */
* Key entry states.
*/
private boolean keyEntryLeft = false, keyEntryRight = false; private boolean keyEntryLeft = false, keyEntryRight = false;
/** /** Game option coordinate modifiers (for drawing). */
* Game option coordinate modifiers (for drawing).
*/
private int textY, offsetY; private int textY, offsetY;
// game-related variables // game-related variables
@ -241,7 +218,7 @@ public class OptionsMenu extends BasicGameState {
break; break;
} }
} }
for (OptionTab tab : OptionTab.valuesReversed()) { for (OptionTab tab : OptionTab.VALUES_REVERSED) {
if (tab != currentTab) if (tab != currentTab)
Utils.drawTab(tab.button.getX(), tab.button.getY(), Utils.drawTab(tab.button.getX(), tab.button.getY(),
tab.getName(), false, tab == hoverTab); tab.getName(), false, tab == hoverTab);

View File

@ -62,33 +62,21 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
* </ul> * </ul>
*/ */
public class SongMenu extends BasicGameState { public class SongMenu extends BasicGameState {
/** /** The number of buttons to be shown on each screen. */
* The number of buttons to be shown on each screen.
*/
private static final int MAX_BUTTONS = 6; private static final int MAX_BUTTONS = 6;
/** /** Delay time, in milliseconds, between each search. */
* Delay time, in milliseconds, between each search.
*/
private static final int SEARCH_DELAY = 500; private static final int SEARCH_DELAY = 500;
/** /** Maximum x offset of song buttons for mouse hover, in pixels. */
* Maximum x offset of song buttons for mouse hover, in pixels.
*/
private static final float MAX_HOVER_OFFSET = 30f; private static final float MAX_HOVER_OFFSET = 30f;
/** /** Song node class representing an OsuGroupNode and file index. */
* Song node class representing an OsuGroupNode and file index.
*/
private static class SongNode { private static class SongNode {
/** /** Song node. */
* Song node.
*/
private OsuGroupNode node; private OsuGroupNode node;
/** /** File index. */
* File index.
*/
private int index; private int index;
/** /**
@ -112,56 +100,36 @@ public class SongMenu extends BasicGameState {
public int getIndex() { return index; } public int getIndex() { return index; }
} }
/** /** Current start node (topmost menu entry). */
* Current start node (topmost menu entry).
*/
private OsuGroupNode startNode; private OsuGroupNode startNode;
/** /** Current focused (selected) node. */
* Current focused (selected) node.
*/
private OsuGroupNode focusNode; private OsuGroupNode focusNode;
/** /** The base node of the previous focus node. */
* The base node of the previous focus node.
*/
private SongNode oldFocusNode = null; private SongNode oldFocusNode = null;
/** /** Stack of previous "random" (F2) focus nodes. */
* Stack of previous "random" (F2) focus nodes.
*/
private Stack<SongNode> randomStack = new Stack<SongNode>(); private Stack<SongNode> randomStack = new Stack<SongNode>();
/** /** Current focus node's song information. */
* Current focus node's song information.
*/
private String[] songInfo; private String[] songInfo;
/** /** Button coordinate values. */
* Button coordinate values.
*/
private float private float
buttonX, buttonY, buttonOffset, buttonX, buttonY, buttonOffset,
buttonWidth, buttonHeight; buttonWidth, buttonHeight;
/** /** Current x offset of song buttons for mouse hover, in pixels. */
* Current x offset of song buttons for mouse hover, in pixels.
*/
private float hoverOffset = 0f; private float hoverOffset = 0f;
/** /** Current index of hovered song button. */
* Current index of hovered song button.
*/
private int hoverIndex = -1; private int hoverIndex = -1;
/** /** The options button (to enter the "Game Options" menu). */
* The options button (to enter the "Game Options" menu).
*/
private MenuButton optionsButton; private MenuButton optionsButton;
/** /** The search textfield. */
* The search textfield.
*/
private TextField search; private TextField search;
/** /**
@ -170,29 +138,19 @@ public class SongMenu extends BasicGameState {
*/ */
private int searchTimer; private int searchTimer;
/** /** Information text to display based on the search query. */
* Information text to display based on the search query.
*/
private String searchResultString; private String searchResultString;
/** /** Loader animation. */
* Loader animation.
*/
private Animation loader; private Animation loader;
/** /** Whether or not to reset game data upon entering the state. */
* Whether or not to reset game data upon entering the state.
*/
private boolean resetGame = false; private boolean resetGame = false;
/** /** Whether or not to reset music track upon entering the state. */
* Whether or not to reset music track upon entering the state.
*/
private boolean resetTrack = false; private boolean resetTrack = false;
/** /** Beatmap reloading thread. */
* Beatmap reloading thread.
*/
private Thread reloadThread; private Thread reloadThread;
// game-related variables // game-related variables

View File

@ -45,19 +45,13 @@ import org.newdawn.slick.state.StateBasedGame;
* Loads game resources and enters "Main Menu" state. * Loads game resources and enters "Main Menu" state.
*/ */
public class Splash extends BasicGameState { public class Splash extends BasicGameState {
/** /** Whether or not loading has completed. */
* Whether or not loading has completed.
*/
private boolean finished = false; private boolean finished = false;
/** /** Loading thread. */
* Loading thread.
*/
private Thread thread; private Thread thread;
/** /** Number of times the 'Esc' key has been pressed. */
* Number of times the ESC key has been pressed.
*/
private int escapeCount = 0; private int escapeCount = 0;
// game-related variables // game-related variables