Follow-ups to #21.

- Reverted "Extends ScoresData bg to clock", as this was intended behavior.
- Fixed overlapping text in the options menu, and made it look more similar to the other menus.
- Fixed issues with the text and icon in the song menu header in certain resolutions.
- Fixed minor issue with ranking screen header text positioning.
- Decreased skip button hover scale.
- Some code style changes.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2015-02-18 19:35:26 -05:00
parent f2ac160dfa
commit 1a4120a736
13 changed files with 139 additions and 163 deletions

View File

@ -456,8 +456,9 @@ public class GameData {
}
}
}
/**
* Draws a string of scoreSymbols.
* Draws a string of scoreSymbols of fixed width.
* @param str the string to draw
* @param x the starting x coordinate
* @param y the y coordinate
@ -474,14 +475,14 @@ public class GameData {
if (scale != 1.0f)
digit = digit.getScaledCopy(scale);
cx -= fixedsize;
digit.draw(cx + (fixedsize-digit.getWidth())/2, y);
digit.draw(cx + (fixedsize - digit.getWidth()) / 2, y);
}
} else {
for (int i = 0; i < c.length; i++) {
Image digit = getScoreSymbolImage(c[i]);
if (scale != 1.0f)
digit = digit.getScaledCopy(scale);
digit.draw(cx + (fixedsize-digit.getWidth())/2, y);
digit.draw(cx + (fixedsize - digit.getWidth()) / 2, y);
cx += fixedsize;
}
}
@ -495,12 +496,13 @@ public class GameData {
* @param breakPeriod if true, will not draw scorebar and combo elements, and will draw grade
* @param firstObject true if the first hit object's start time has not yet passed
*/
@SuppressWarnings("deprecation")
public void drawGameElements(Graphics g, boolean breakPeriod, boolean firstObject) {
int marginX = (int) (width * 0.008f);
// score
drawFixedSizeSymbolString((scoreDisplay < 100000000) ? String.format("%08d", scoreDisplay) : Long.toString(scoreDisplay),
width - marginX, 0, 1.0f, getScoreSymbolImage('0').getWidth()-2, true);
width - marginX, 0, 1.0f, getScoreSymbolImage('0').getWidth() - 2, true);
// score percentage
int symbolHeight = getScoreSymbolImage('0').getHeight();
@ -564,19 +566,18 @@ public class GameData {
}
Image scorebar = GameImage.SCOREBAR_BG.getImage();
Image colour;
if (scorebarColour != null){
scorebarColour.updateNoDraw(); //TODO deprecated method
if (scorebarColour != null) {
scorebarColour.updateNoDraw(); // TODO deprecated method
colour = scorebarColour.getCurrentFrame();
} else {
} else
colour = GameImage.SCOREBAR_COLOUR.getImage();
}
float colourX = 4 * GameImage.uiscale, colourY = 15 * GameImage.uiscale;
Image colourCropped = colour.getSubImage(0, 0, (int) (645 * GameImage.uiscale * healthRatio), colour.getHeight());
float colourX = 4 * GameImage.getUIscale(), colourY = 15 * GameImage.getUIscale();
Image colourCropped = colour.getSubImage(0, 0, (int) (645 * GameImage.getUIscale() * healthRatio), colour.getHeight());
scorebar.setAlpha(1f);
scorebar.draw(0, 0);
colourCropped.draw(colourX, colourY);
Image ki = null;
if (health >= 50f)
ki = GameImage.SCOREBAR_KI.getImage();
@ -655,36 +656,28 @@ public class GameData {
* @param osu the OsuFile
*/
public void drawRankingElements(Graphics g, OsuFile osu) {
float marginX = width * 0.01f, marginY = height * 0.025f;
// header & "Ranking" text
Image rankingTitle = GameImage.RANKING_TITLE.getImage();
// ranking panel
Image rankingPanel = GameImage.RANKING_PANEL.getImage();
//TODO Version 2 skins
// TODO Version 2 skins
float rankingHeight = 75;
rankingPanel.draw(0, (int) (rankingHeight * GameImage.uiscale));
float scoreTextScale = 1.0f;
float symbolTextScale = 1.15f;
float rankResultScale = 0.5f;
// ranking panel
GameImage.RANKING_PANEL.getImage().draw(0, (int) (rankingHeight * GameImage.getUIscale()));
// score
drawFixedSizeSymbolString(
(score < 100000000) ? String.format("%08d", score) : Long.toString(score),
(int) (210 * GameImage.uiscale),
(int) ((rankingHeight + 50) * GameImage.uiscale),
scoreTextScale,
(int) (210 * GameImage.getUIscale()),
(int) ((rankingHeight + 50) * GameImage.getUIscale()),
scoreTextScale,
getScoreSymbolImage('0').getWidth() * scoreTextScale - 2, false);
// result counts
float resultInitialX = 130;
float resultInitialY = rankingHeight + 140;
float resultHitInitialX = 65;
float resultHitInitialY = rankingHeight + 182 ;
float resultHitInitialY = rankingHeight + 182;
float resultOffsetX = 320;
float resultOffsetY = 96;
@ -697,42 +690,37 @@ public class GameData {
for (int i = 0; i < rankDrawOrder.length; i += 2) {
hitResults[rankDrawOrder[i]].getScaledCopy(rankResultScale).drawCentered(
(resultHitInitialX * GameImage.uiscale),
((resultHitInitialY + (resultOffsetY * (i / 2))) * GameImage.uiscale)
);
(resultHitInitialX * GameImage.getUIscale()),
((resultHitInitialY + (resultOffsetY * (i / 2))) * GameImage.getUIscale()));
hitResults[rankDrawOrder[i+1]].getScaledCopy(rankResultScale).drawCentered(
((resultHitInitialX + resultOffsetX) * GameImage.uiscale),
((resultHitInitialY + (resultOffsetY * (i / 2))) * GameImage.uiscale)
);
((resultHitInitialX + resultOffsetX) * GameImage.getUIscale()),
((resultHitInitialY + (resultOffsetY * (i / 2))) * GameImage.getUIscale()));
drawSymbolString(String.format("%dx", rankResultOrder[i]),
(int) (resultInitialX * GameImage.uiscale),
(int) ((resultInitialY + (resultOffsetY * (i / 2))) * GameImage.uiscale),
(int) (resultInitialX * GameImage.getUIscale()),
(int) ((resultInitialY + (resultOffsetY * (i / 2))) * GameImage.getUIscale()),
symbolTextScale, false);
drawSymbolString(String.format("%dx", rankResultOrder[i+1]),
(int) ((resultInitialX + resultOffsetX) * GameImage.uiscale),
(int) ((resultInitialY + (resultOffsetY * (i / 2))) * GameImage.uiscale),
(int) ((resultInitialX + resultOffsetX) * GameImage.getUIscale()),
(int) ((resultInitialY + (resultOffsetY * (i / 2))) * GameImage.getUIscale()),
symbolTextScale, false);
}
// combo and accuracy
Image rankingMaxCombo = GameImage.RANKING_MAXCOMBO.getImage();
Image rankingAccuracy = GameImage.RANKING_ACCURACY.getImage();
float accuracyX = 295;
float textY = rankingHeight + 425;
float numbersY = textY + 30;
drawSymbolString(String.format("%dx", comboMax),
(int) (25 * GameImage.uiscale),
(int) (numbersY * GameImage.uiscale), symbolTextScale, false);
(int) (25 * GameImage.getUIscale()),
(int) (numbersY * GameImage.getUIscale()), symbolTextScale, false);
drawSymbolString(String.format("%02.2f%%", getScorePercent()),
(int) ((accuracyX + 20) * GameImage.uiscale),
(int) (numbersY * GameImage.uiscale), symbolTextScale, false);
rankingMaxCombo.draw(
(int) (10 * GameImage.uiscale),
(int) (textY * GameImage.uiscale));
rankingAccuracy.draw(
(int) (accuracyX * GameImage.uiscale),
(int) (textY * GameImage.uiscale));
(int) ((accuracyX + 20) * GameImage.getUIscale()),
(int) (numbersY * GameImage.getUIscale()), symbolTextScale, false);
GameImage.RANKING_MAXCOMBO.getImage().draw(
(int) (10 * GameImage.getUIscale()),
(int) (textY * GameImage.getUIscale()));
GameImage.RANKING_ACCURACY.getImage().draw(
(int) (accuracyX * GameImage.getUIscale()),
(int) (textY * GameImage.getUIscale()));
// full combo
if (comboMax == fullObjectCount) {
@ -741,24 +729,26 @@ public class GameData {
(height * 0.99f) - GameImage.RANKING_PERFECT.getImage().getHeight()
);
}
// grade
Grade grade = getGrade();
if (grade != Grade.NULL)
grade.getLargeImage().draw(width-grade.getLargeImage().getWidth(), rankingHeight);
grade.getLargeImage().draw(width - grade.getLargeImage().getWidth(), rankingHeight);
//Header
// header
Image rankingTitle = GameImage.RANKING_TITLE.getImage();
g.setColor(Utils.COLOR_BLACK_ALPHA);
g.fillRect(0, 0, width, 100 * GameImage.uiscale);
g.fillRect(0, 0, width, 100 * GameImage.getUIscale());
rankingTitle.draw((width * 0.97f) - rankingTitle.getWidth(), 0);
Utils.FONT_LARGE.drawString(marginX, marginY,
float c = width * 0.01f;
Utils.FONT_LARGE.drawString(c, c,
String.format("%s - %s [%s]", osu.getArtist(), osu.getTitle(), osu.version), Color.white);
Utils.FONT_MEDIUM.drawString(marginX, marginY + Utils.FONT_LARGE.getLineHeight() - 6,
Utils.FONT_MEDIUM.drawString(c, c + Utils.FONT_LARGE.getLineHeight() - 6,
String.format("Beatmap by %s", osu.creator), Color.white);
Utils.FONT_MEDIUM.drawString(
marginX, marginY + Utils.FONT_LARGE.getLineHeight() + Utils.FONT_MEDIUM.getLineHeight() - 10,
c, c + Utils.FONT_LARGE.getLineHeight() + Utils.FONT_MEDIUM.getLineHeight() - 10,
String.format("Played on %s.", scoreData.getTimeString()), Color.white);
// mod icons
int modWidth = GameMod.AUTO.getImage().getWidth();
float modX = (width * 0.98f) - modWidth;

View File

@ -41,7 +41,7 @@ public enum GameImage {
SECTION_PASS ("section-pass", "png"),
SECTION_FAIL ("section-fail", "png"),
WARNINGARROW ("play-warningarrow", "png"),
SKIP ("play-skip", "play-skip-%d","png"),
SKIP ("play-skip", "play-skip-%d", "png"),
COUNTDOWN_READY ("ready", "png") {
@Override
protected Image process_sub(Image img, int w, int h) {
@ -51,19 +51,19 @@ public enum GameImage {
COUNTDOWN_3 ("count3", "png") {
@Override
protected Image process_sub(Image img, int w, int h) {
return img.getScaledCopy((h / 3f) / img.getHeight());
return COUNTDOWN_READY.process_sub(img, w, h);
}
},
COUNTDOWN_2 ("count2", "png") {
@Override
protected Image process_sub(Image img, int w, int h) {
return img.getScaledCopy((h / 3f) / img.getHeight());
return COUNTDOWN_READY.process_sub(img, w, h);
}
},
COUNTDOWN_1 ("count1", "png") {
@Override
protected Image process_sub(Image img, int w, int h) {
return img.getScaledCopy((h / 3f) / img.getHeight());
return COUNTDOWN_READY.process_sub(img, w, h);
}
},
COUNTDOWN_GO ("go", "png") {
@ -135,7 +135,7 @@ public enum GameImage {
SPINNER_CLEAR ("spinner-clear", "png"),
SPINNER_OSU ("spinner-osu", "png"),
// Score Data
// Game Data
COMBO_BURST ("comboburst", "comboburst-%d", "png"),
SCOREBAR_BG ("scorebar-bg", "png"),
SCOREBAR_COLOUR ("scorebar-colour", "scorebar-colour-%d", "png"),
@ -331,7 +331,7 @@ public enum GameImage {
return img.getScaledCopy((h * 0.3f) / img.getHeight());
}
},
MENU_BACK ("menu-back", "menu-back-%d","png"),
MENU_BACK ("menu-back", "menu-back-%d", "png"),
MENU_BUTTON_BG ("menu-button-background", "png", false, false),
MENU_TAB ("selection-tab", "png", false, false) {
@Override
@ -342,14 +342,14 @@ public enum GameImage {
MENU_MUSICNOTE ("music-note", "png", false, false) {
@Override
protected Image process_sub(Image img, int w, int h) {
int r = (int) (Utils.FONT_LARGE.getLineHeight() * 0.75f + Utils.FONT_DEFAULT.getLineHeight());
int r = (int) ((Utils.FONT_LARGE.getLineHeight() + Utils.FONT_DEFAULT.getLineHeight() - 8) / getUIscale());
return img.getScaledCopy(r, r);
}
},
MENU_LOADER ("loader", "png", false, false) {
@Override
protected Image process_sub(Image img, int w, int h) {
int r = (int) (Utils.FONT_LARGE.getLineHeight() * 0.75f + Utils.FONT_DEFAULT.getLineHeight());
int r = (int) ((Utils.FONT_LARGE.getLineHeight() + Utils.FONT_DEFAULT.getLineHeight() - 8) / getUIscale());
return img.getScaledCopy(r / 48f);
}
},
@ -479,9 +479,12 @@ public enum GameImage {
/** Container dimensions. */
private static int containerWidth, containerHeight;
/** value ui should be scaled by */
public static float uiscale;
/** Value to scale UI components by. */
private static float uiscale;
/** The unscaled container height that uiscale is based on. */
private static final int UNSCALED_HEIGHT = 768;
/**
* Initializes the GameImage class with container dimensions.
@ -491,9 +494,14 @@ public enum GameImage {
public static void init(int width, int height) {
containerWidth = width;
containerHeight = height;
uiscale = containerHeight / 768f;
uiscale = (float) containerHeight / UNSCALED_HEIGHT;
}
/**
* Returns the UI scale.
*/
public static float getUIscale() { return uiscale; }
/**
* Clears all image references.
* This does NOT destroy images, so be careful of memory leaks!
@ -589,15 +597,16 @@ public enum GameImage {
setDefaultImage();
return (skinImage != null) ? skinImage : defaultImage;
}
/**
* Returns an Animation based on the image array.
* If no image array exist, returns the single image as an animation.
* If no image array exists, returns the single image as an animation.
* @param duration the duration to show each frame in the animation
*/
public Animation getAnimation(int duration){
Image[] images = getImages();
if (images == null)
images = new Image[]{ getImage() };
images = new Image[] { getImage() };
return new Animation(images, duration);
}
@ -813,14 +822,14 @@ public enum GameImage {
* Performs individual post-loading actions on the image.
*/
private void process() {
int fakeWid = 768*containerWidth/containerHeight;
int unscaledWidth = UNSCALED_HEIGHT * containerWidth / containerHeight;
if (skinImages != null) {
for (int i = 0; i < skinImages.length; i++)
setImage(process_sub(getImages()[i], fakeWid, 768).getScaledCopy(uiscale), i);
setImage(process_sub(getImages()[i], unscaledWidth, UNSCALED_HEIGHT).getScaledCopy(getUIscale()), i);
} else if (defaultImages != null && skinImage == null) {
for (int i = 0; i < defaultImages.length; i++)
setImage(process_sub(getImages()[i], fakeWid, 768).getScaledCopy(uiscale), i);
setImage(process_sub(getImages()[i], unscaledWidth, UNSCALED_HEIGHT).getScaledCopy(getUIscale()), i);
} else
setImage(process_sub(getImage(), fakeWid, 768).getScaledCopy(uiscale));
setImage(process_sub(getImage(), unscaledWidth, UNSCALED_HEIGHT).getScaledCopy(getUIscale()));
}
}

View File

@ -365,24 +365,24 @@ public class MenuButton {
* and expansion direction.
*/
private void setHoverRadius() {
if (img == null)
return;
int xOffset = 0, yOffset = 0;
if(img != null){
if (dir != Expand.CENTER) {
// offset by difference between normal/scaled image dimensions
xOffset = (int) ((scale - 1f) * img.getWidth());
yOffset = (int) ((scale - 1f) * img.getHeight());
if (dir == Expand.UP || dir == Expand.DOWN)
xOffset = 0; // no horizontal offset
if (dir == Expand.RIGHT || dir == Expand.LEFT)
yOffset = 0; // no vertical offset
if (dir == Expand.RIGHT || dir == Expand.DOWN_RIGHT || dir == Expand.UP_RIGHT)
xOffset *= -1; // flip x for right
if (dir == Expand.DOWN || dir == Expand.DOWN_LEFT || dir == Expand.DOWN_RIGHT)
yOffset *= -1; // flip y for down
}
this.xRadius = ((img.getWidth() * scale) + xOffset) / 2f;
this.yRadius = ((img.getHeight() * scale) + yOffset) / 2f;
if (dir != Expand.CENTER) {
// offset by difference between normal/scaled image dimensions
xOffset = (int) ((scale - 1f) * img.getWidth());
yOffset = (int) ((scale - 1f) * img.getHeight());
if (dir == Expand.UP || dir == Expand.DOWN)
xOffset = 0; // no horizontal offset
if (dir == Expand.RIGHT || dir == Expand.LEFT)
yOffset = 0; // no vertical offset
if (dir == Expand.RIGHT || dir == Expand.DOWN_RIGHT || dir == Expand.UP_RIGHT)
xOffset *= -1; // flip x for right
if (dir == Expand.DOWN || dir == Expand.DOWN_LEFT || dir == Expand.DOWN_RIGHT)
yOffset *= -1; // flip y for down
}
this.xRadius = ((img.getWidth() * scale) + xOffset) / 2f;
this.yRadius = ((img.getHeight() * scale) + yOffset) / 2f;
}
}

View File

@ -61,13 +61,13 @@ public class OsuGroupNode {
*/
public void draw(float x, float y, float headerY, float footerY, Grade grade, boolean focus) {
boolean expanded = (osuFileIndex > -1);
float xOffset = 0f;
OsuFile osu;
Image bg = GameImage.MENU_BUTTON_BG.getImage();
bg.setAlpha(0.9f);
Color bgColor;
Color textColor = Color.lightGray;
// get drawing parameters
if (expanded) { // expanded
x -= bg.getWidth() / 10f;
if (focus) {
@ -80,6 +80,7 @@ public class OsuGroupNode {
bgColor = Utils.COLOR_ORANGE_BUTTON;
osu = osuFiles.get(0);
}
// crop image if necessary
if (y < headerY) {
int cropHeight = (int) (headerY - y);

View File

@ -298,10 +298,7 @@ public class OsuHitObject {
public boolean isNewCombo() { return (type & TYPE_NEWCOMBO) > 0; }
/**
* Returns the number of extra skips on the combo colours
* Returns the number of extra skips on the combo colors.
*/
public int getComboSkip() {
return (type >> 4);
}
public int getComboSkip() { return (type >> TYPE_NEWCOMBO); }
}

View File

@ -564,14 +564,13 @@ public class OsuParser {
// set combo info
// - new combo: get next combo index, reset combo number
// - else: maintain combo index, increase combo number
if (((hitObject.isNewCombo()|| first) && !hitObject.isSpinner()) ) {
if (((hitObject.isNewCombo() || first) && !hitObject.isSpinner())) {
int skip = 1 + hitObject.getComboSkip();
for(int i=0; i < skip; i++){
for (int i = 0; i < skip; i++) {
comboIndex = (comboIndex + 1) % osu.combo.length;
comboNumber = 1;
}
first=false;
first = false;
}
hitObject.setComboIndex(comboIndex);

View File

@ -287,8 +287,6 @@ public class ScoreData implements Comparable<ScoreData> {
// time since
if (getTimeSince() != null) {
Image clock = GameImage.HISTORY.getImage();
g.setColor((focus) ? BG_FOCUS : BG_NORMAL);
g.fillRect(baseX + buttonWidth, y, Utils.FONT_DEFAULT.getWidth(" "),buttonHeight);
clock.drawCentered(baseX + buttonWidth * 1.02f + clock.getWidth() / 2f, midY);
Utils.FONT_DEFAULT.drawString(
baseX + buttonWidth * 1.03f + clock.getWidth(),

View File

@ -87,8 +87,8 @@ public class Utils {
/** The default map colors, used when a map does not provide custom colors. */
public static final Color[] DEFAULT_COMBO = {
COLOR_ORANGE_OBJECT, COLOR_GREEN_OBJECT,
COLOR_BLUE_OBJECT, COLOR_RED_OBJECT,
COLOR_ORANGE_OBJECT, COLOR_GREEN_OBJECT,
COLOR_BLUE_OBJECT, COLOR_RED_OBJECT,
};
/** Game fonts. */
@ -222,21 +222,14 @@ public class Utils {
DownloadNode.init(width, height);
// back button
//TODO: this is annoying perhaps we can just pass in GameImage to MenuButton?
if (GameImage.MENU_BACK.getImages() != null){
if (GameImage.MENU_BACK.getImages() != null) {
Animation back = GameImage.MENU_BACK.getAnimation(200);
backButton = new MenuButton(back,
back.getWidth() / 2f,
height - (back.getHeight() / 2f));
}else{
backButton = new MenuButton(back, back.getWidth() / 2f, height - (back.getHeight() / 2f));
} else {
Image back = GameImage.MENU_BACK.getImage();
backButton = new MenuButton(GameImage.MENU_BACK.getImage(),
back.getWidth() / 2f,
height - (back.getHeight() / 2f));
backButton = new MenuButton(back, back.getWidth() / 2f, height - (back.getHeight() / 2f));
}
backButton.setHoverExpand(MenuButton.Expand.UP_RIGHT);
}
/**

View File

@ -809,20 +809,15 @@ public class Game extends BasicGameState {
}
// skip button
//TODO: this is annoying perhaps we can just pass in GameImage to MenuButton?
if (GameImage.SKIP.getImages() != null){
Animation back = GameImage.SKIP.getAnimation(200);
skipButton = new MenuButton(back,
width - back.getWidth() / 2f,
height - (back.getHeight() / 2f));
}else{
Image back = GameImage.SKIP.getImage();
skipButton = new MenuButton(GameImage.SKIP.getImage(),
width - back.getWidth() / 2f,
height - (back.getHeight() / 2f));
if (GameImage.SKIP.getImages() != null) {
Animation skip = GameImage.SKIP.getAnimation(200);
skipButton = new MenuButton(skip, width - skip.getWidth() / 2f, height - (skip.getHeight() / 2f));
} else {
Image skip = GameImage.SKIP.getImage();
skipButton = new MenuButton(skip, width - skip.getWidth() / 2f, height - (skip.getHeight() / 2f));
}
skipButton.setHoverExpand(MenuButton.Expand.UP_LEFT);
skipButton.setHoverExpand(1.1f, MenuButton.Expand.UP_LEFT);
// load other images...
((GamePauseMenu) game.getState(Opsu.STATE_GAMEPAUSEMENU)).loadImages();
data.loadImages();

View File

@ -95,10 +95,8 @@ public class GameRanking extends BasicGameState {
OsuFile osu = MusicController.getOsuFile();
// background
if (!osu.drawBG(width, height, 0.7f, true)) {
if (!osu.drawBG(width, height, 0.7f, true))
GameImage.MENU_BG.getImage().draw(0,0);
//g.setBackground(Utils.COLOR_BLACK_ALPHA);
}
// ranking screen elements
data.drawRankingElements(g, osu);

View File

@ -172,17 +172,17 @@ public class OptionsMenu extends BasicGameState {
// option tabs
Image tabImage = GameImage.MENU_TAB.getImage();
int subtextWidth = Utils.FONT_DEFAULT.getWidth("Click or drag an option to change it.");
float tabX = (width / 50) + (tabImage.getWidth() / 2f);
float tabY = 15 + Utils.FONT_XLARGE.getLineHeight() + (tabImage.getHeight() / 2f);
int tabOffset = Math.min(tabImage.getWidth(),
(width/2) / OptionTab.SIZE);
float tabY = Utils.FONT_LARGE.getLineHeight() + Utils.FONT_DEFAULT.getLineHeight() +
height * 0.03f + (tabImage.getHeight() / 2f);
int tabOffset = Math.min(tabImage.getWidth(), (width / 2) / OptionTab.SIZE);
for (OptionTab tab : OptionTab.values())
tab.button = new MenuButton(tabImage, tabX + (tab.ordinal() * tabOffset), tabY);
// game option coordinate modifiers
textY = (int) (tabY + tabImage.getHeight());
offsetY = (height - textY - GameImage.MENU_BACK.getAnimation(1).getHeight()) / maxOptionsScreen;
int backHeight = GameImage.MENU_BACK.getAnimation(1).getHeight();
offsetY = (height - textY - (backHeight * 4 / 5)) / maxOptionsScreen;
}
@Override
@ -195,15 +195,10 @@ public class OptionsMenu extends BasicGameState {
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
// title
Utils.FONT_XLARGE.drawString(
(width - Utils.FONT_XLARGE.getWidth("GAME OPTIONS")) / 2, 10,
"GAME OPTIONS", Color.white
);
Utils.FONT_DEFAULT.drawString(
(width - Utils.FONT_DEFAULT.getWidth("Click or drag an option to change it.")) / 2,
10 + Utils.FONT_XLARGE.getLineHeight(),
"Click or drag an option to change it.", Color.white
);
float c = container.getWidth() * 0.02f;
Utils.FONT_LARGE.drawString(c, c, "Game Options", Color.white);
Utils.FONT_DEFAULT.drawString(c, c + Utils.FONT_LARGE.getLineHeight() * 0.9f,
"Click or drag an option to change it.", Color.white);
// game options
g.setLineWidth(1f);

View File

@ -310,16 +310,17 @@ public class SongMenu extends BasicGameState {
else
musicNote.draw(marginX, marginY);
int iconWidth = musicNote.getWidth();
int iconHeight = musicNote.getHeight();
if (songInfo == null)
songInfo = focusNode.getInfo();
marginX += 5;
Utils.FONT_LARGE.drawString(marginX + iconWidth * 1.05f, marginY, songInfo[0], Color.white);
Utils.FONT_DEFAULT.drawString(marginX + iconWidth * 1.05f, marginY + Utils.FONT_LARGE.getLineHeight() * 0.75f, songInfo[1], Color.white);
float headerTextY = marginY + iconHeight;
float headerTextY = marginY;
Utils.FONT_LARGE.drawString(marginX + iconWidth * 1.05f, headerTextY, songInfo[0], Color.white);
headerTextY += Utils.FONT_LARGE.getLineHeight() - 8;
Utils.FONT_DEFAULT.drawString(marginX + iconWidth * 1.05f, headerTextY, songInfo[1], Color.white);
headerTextY += Utils.FONT_DEFAULT.getLineHeight() - 2;
Utils.FONT_BOLD.drawString(marginX, headerTextY, songInfo[2], Color.white);
headerTextY += Utils.FONT_BOLD.getLineHeight() - 6;
headerTextY += Utils.FONT_BOLD.getLineHeight() - 4;
Utils.FONT_DEFAULT.drawString(marginX, headerTextY, songInfo[3], Color.white);
headerTextY += Utils.FONT_DEFAULT.getLineHeight() - 4;
Utils.FONT_SMALL.drawString(marginX, headerTextY, songInfo[4], Color.white);
@ -630,7 +631,7 @@ public class SongMenu extends BasicGameState {
(y > buttonY + (i * buttonOffset) && y < buttonY + (i * buttonOffset) + buttonHeight)) {
float oldHoverOffset = hoverOffset;
int oldHoverIndex = hoverIndex;
// clicked node is already expanded
if (node.index == expandedIndex) {
if (node.osuFileIndex == focusNode.osuFileIndex) {
@ -645,21 +646,21 @@ public class SongMenu extends BasicGameState {
setFocus(node, 0, false);
}
}
// clicked node is a new group
else {
SoundController.playSound(SoundEffect.MENUCLICK);
setFocus(node, -1, false);
}
// restore hover data
hoverOffset = oldHoverOffset;
hoverIndex = oldHoverIndex;
// open beatmap menu
if (button == Input.MOUSE_RIGHT_BUTTON)
beatmapMenuTimer = (node.index == expandedIndex) ? BEATMAP_MENU_DELAY * 4 / 5 : 0;
return;
}
}

View File

@ -45,6 +45,7 @@ import org.newdawn.slick.util.Log;
*
* @author kevin
*/
@SuppressWarnings("unused")
public class Image implements Renderable {
/** The top left corner identifier */
public static final int TOP_LEFT = 0;
@ -570,6 +571,7 @@ public class Image implements Renderable {
* @param x The x location to draw the image at
* @param y The y location to draw the image at
*/
@Override
public void draw(float x, float y) {
init();
draw(x,y,width,height);
@ -1316,9 +1318,7 @@ public class Image implements Renderable {
GL.glBegin(SGL.GL_QUADS);
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
init();