Small GUI tweaks.

- FPS display is now much more subtle.
- A couple of main menu tweaks.

Other changes:
- Restore old alpha levels of Utils.COLOR_* constants when modifying them.
- Utils.loadFont() can load any font effect, not just a ColorEffect.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2015-01-18 12:39:30 -05:00
parent d92e67e5f1
commit 2f56bca9f7
5 changed files with 37 additions and 19 deletions

View File

@ -42,6 +42,7 @@ import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException; import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont; import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect; import org.newdawn.slick.font.effects.ColorEffect;
import org.newdawn.slick.font.effects.Effect;
import org.newdawn.slick.imageout.ImageOut; import org.newdawn.slick.imageout.ImageOut;
import org.newdawn.slick.state.StateBasedGame; import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.util.Log; import org.newdawn.slick.util.Log;
@ -496,11 +497,16 @@ public class Utils {
if (!Options.isFPSCounterEnabled()) if (!Options.isFPSCounterEnabled())
return; return;
String fps = String.format("FPS: %d", container.getFPS()); String fps = String.format("%dFPS", container.getFPS());
FONT_BOLD.drawString(
container.getWidth() * 0.997f - FONT_BOLD.getWidth(fps),
container.getHeight() * 0.997f - FONT_BOLD.getHeight(fps),
Integer.toString(container.getFPS()), Color.white
);
FONT_DEFAULT.drawString( FONT_DEFAULT.drawString(
container.getWidth() - 15 - FONT_DEFAULT.getWidth(fps), container.getWidth() * 0.997f - FONT_BOLD.getWidth("FPS"),
container.getHeight() - 15 - FONT_DEFAULT.getHeight(fps), container.getHeight() * 0.997f - FONT_BOLD.getHeight("FPS"),
fps, Color.white "FPS", Color.white
); );
} }
@ -541,16 +547,16 @@ public class Utils {
* Loads a Unicode font. * Loads a Unicode font.
* @param font the font to load * @param font the font to load
* @param padding the top and bottom padding * @param padding the top and bottom padding
* @param colorEffect the ColorEffect * @param effect the font effect
* @throws SlickException * @throws SlickException
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static void loadFont(UnicodeFont font, int padding, private static void loadFont(UnicodeFont font, int padding,
ColorEffect colorEffect) throws SlickException { Effect effect) throws SlickException {
font.setPaddingTop(padding); font.setPaddingTop(padding);
font.setPaddingBottom(padding); font.setPaddingBottom(padding);
font.addAsciiGlyphs(); font.addAsciiGlyphs();
font.getEffects().add(colorEffect); font.getEffects().add(effect);
font.loadGlyphs(); font.loadGlyphs();
} }

View File

@ -99,11 +99,12 @@ public class Circle implements HitObject {
float approachScale = 1 + (timeDiff * 2f / game.getApproachTime()); float approachScale = 1 + (timeDiff * 2f / game.getApproachTime());
Utils.drawCentered(GameImage.APPROACHCIRCLE.getImage().getScaledCopy(approachScale), x, y, color); Utils.drawCentered(GameImage.APPROACHCIRCLE.getImage().getScaledCopy(approachScale), x, y, color);
float alpha = (approachScale > 3.3f) ? 0f : 1f - (approachScale - 1f) / 2.7f; float alpha = (approachScale > 3.3f) ? 0f : 1f - (approachScale - 1f) / 2.7f;
float oldAlpha = color.a;
color.a = alpha; color.a = alpha;
Utils.COLOR_WHITE_FADE.a = alpha; Utils.COLOR_WHITE_FADE.a = alpha;
Utils.drawCentered(GameImage.HITCIRCLE_OVERLAY.getImage(), x, y, Utils.COLOR_WHITE_FADE); Utils.drawCentered(GameImage.HITCIRCLE_OVERLAY.getImage(), x, y, Utils.COLOR_WHITE_FADE);
Utils.drawCentered(GameImage.HITCIRCLE.getImage(), x, y, color); Utils.drawCentered(GameImage.HITCIRCLE.getImage(), x, y, color);
color.a = 1f; color.a = oldAlpha;
Utils.COLOR_WHITE_FADE.a = 1f; Utils.COLOR_WHITE_FADE.a = 1f;
score.drawSymbolNumber(hitObject.getComboNumber(), x, y, score.drawSymbolNumber(hitObject.getComboNumber(), x, y,
GameImage.HITCIRCLE.getImage().getWidth() * 0.40f / score.getDefaultSymbolImage(0).getHeight()); GameImage.HITCIRCLE.getImage().getWidth() * 0.40f / score.getDefaultSymbolImage(0).getHeight());

View File

@ -344,6 +344,8 @@ public class Slider implements HitObject {
float approachScale = (timeDiff >= 0) ? 1 + (timeDiff * 2f / game.getApproachTime()) : 1f; float approachScale = (timeDiff >= 0) ? 1 + (timeDiff * 2f / game.getApproachTime()) : 1f;
float alpha = (approachScale > 3.3f) ? 0f : 1f - (approachScale - 1f) / 2.7f; float alpha = (approachScale > 3.3f) ? 0f : 1f - (approachScale - 1f) / 2.7f;
float oldAlpha = color.a;
float oldAlphaFade = Utils.COLOR_WHITE_FADE.a;
color.a = alpha; color.a = alpha;
Utils.COLOR_WHITE_FADE.a = alpha; Utils.COLOR_WHITE_FADE.a = alpha;
@ -376,8 +378,8 @@ public class Slider implements HitObject {
score.drawSymbolNumber(hitObject.getComboNumber(), x, y, score.drawSymbolNumber(hitObject.getComboNumber(), x, y,
hitCircle.getWidth() * 0.40f / score.getDefaultSymbolImage(0).getHeight()); hitCircle.getWidth() * 0.40f / score.getDefaultSymbolImage(0).getHeight());
color.a = 1f; color.a = oldAlpha;
Utils.COLOR_WHITE_FADE.a = 1f; Utils.COLOR_WHITE_FADE.a = oldAlphaFade;
// repeats // repeats
if (hitObject.getRepeatCount() - 1 > currentRepeats) { if (hitObject.getRepeatCount() - 1 > currentRepeats) {

View File

@ -334,6 +334,7 @@ public class Game extends BasicGameState {
GameImage.SCOREBAR_BG.getImage().getHeight(), GameImage.SCOREBAR_BG.getImage().getHeight(),
GameImage.SCOREBAR_KI.getImage().getHeight() GameImage.SCOREBAR_KI.getImage().getHeight()
); );
float oldAlpha = Utils.COLOR_WHITE_FADE.a;
if (timeDiff < -500) if (timeDiff < -500)
Utils.COLOR_WHITE_FADE.a = (1000 + timeDiff) / 500f; Utils.COLOR_WHITE_FADE.a = (1000 + timeDiff) / 500f;
Utils.FONT_MEDIUM.drawString( Utils.FONT_MEDIUM.drawString(
@ -341,7 +342,7 @@ public class Game extends BasicGameState {
String.format("%d retries and counting...", retries), String.format("%d retries and counting...", retries),
Utils.COLOR_WHITE_FADE Utils.COLOR_WHITE_FADE
); );
Utils.COLOR_WHITE_FADE.a = 1f; Utils.COLOR_WHITE_FADE.a = oldAlpha;
} }
if (isLeadIn()) if (isLeadIn())

View File

@ -161,7 +161,7 @@ public class MainMenu extends BasicGameState {
if (Desktop.isDesktopSupported()) { // only if a webpage can be opened if (Desktop.isDesktopSupported()) { // only if a webpage can be opened
Image repoImg = GameImage.REPOSITORY.getImage(); Image repoImg = GameImage.REPOSITORY.getImage();
repoButton = new MenuButton(repoImg, repoButton = new MenuButton(repoImg,
(width * 0.995f) - repoImg.getWidth(), (height * 0.995f) - repoImg.getHeight() (width * 0.997f) - repoImg.getWidth(), (height * 0.997f) - repoImg.getHeight()
); );
} }
@ -185,6 +185,13 @@ public class MainMenu extends BasicGameState {
bg.draw(); bg.draw();
} }
float oldAlpha = Utils.COLOR_BLACK_ALPHA.a;
Utils.COLOR_BLACK_ALPHA.a = 0.2f;
g.setColor(Utils.COLOR_BLACK_ALPHA);
g.fillRect(0, 0, width, height / 9f);
g.fillRect(0, height * 8 / 9f, width, height / 9f);
Utils.COLOR_BLACK_ALPHA.a = oldAlpha;
// draw buttons // draw buttons
if (logoTimer > 0) { if (logoTimer > 0) {
playButton.draw(); playButton.draw();
@ -211,28 +218,29 @@ public class MainMenu extends BasicGameState {
repoButton.draw(); repoButton.draw();
// draw text // draw text
float marginX = width * 0.015f, marginY = height * 0.015f;
g.setFont(Utils.FONT_MEDIUM); g.setFont(Utils.FONT_MEDIUM);
int lineHeight = Utils.FONT_MEDIUM.getLineHeight(); int lineHeight = Utils.FONT_MEDIUM.getLineHeight() * 9 / 10;
g.drawString(String.format("Loaded %d songs and %d beatmaps.", g.drawString(String.format("Loaded %d songs and %d beatmaps.",
OsuGroupList.get().size(), OsuGroupList.get().getMapCount()), 25, 25); OsuGroupList.get().size(), OsuGroupList.get().getMapCount()), marginX, marginY);
if (MusicController.isTrackLoading()) if (MusicController.isTrackLoading())
g.drawString("Track loading...", 25, 25 + lineHeight); g.drawString("Track loading...", marginX, marginY + lineHeight);
else if (MusicController.trackExists()) { else if (MusicController.trackExists()) {
g.drawString((MusicController.isPlaying()) ? "Now Playing:" : "Paused:", 25, 25 + lineHeight); g.drawString((MusicController.isPlaying()) ? "Now Playing:" : "Paused:", marginX, marginY + lineHeight);
g.drawString(String.format("%s: %s", g.drawString(String.format("%s: %s",
MusicController.getArtistName(), MusicController.getArtistName(),
MusicController.getTrackName()), MusicController.getTrackName()),
50, 25 + (lineHeight * 2)); marginX + 25, marginY + (lineHeight * 2));
} }
long time = System.currentTimeMillis() - osuStartTime; long time = System.currentTimeMillis() - osuStartTime;
g.drawString(String.format("opsu! has been running for %d minutes, %d seconds.", g.drawString(String.format("opsu! has been running for %d minutes, %d seconds.",
TimeUnit.MILLISECONDS.toMinutes(time), TimeUnit.MILLISECONDS.toMinutes(time),
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MILLISECONDS.toSeconds(time) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(time))), TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(time))),
25, height - 25 - (lineHeight * 2)); marginX, height - marginY - (lineHeight * 2));
g.drawString(String.format("The current time is %s.", g.drawString(String.format("The current time is %s.",
new SimpleDateFormat("h:mm a").format(new Date())), new SimpleDateFormat("h:mm a").format(new Date())),
25, height - 25 - lineHeight); marginX, height - marginY - lineHeight);
Utils.drawFPS(); Utils.drawFPS();
Utils.drawCursor(); Utils.drawCursor();