package com.shade.states; import java.util.ArrayList; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.SlickException; import org.newdawn.slick.state.BasicGameState; import org.newdawn.slick.state.StateBasedGame; import com.centerkey.utils.BareBonesBrowserLaunch; import com.shade.controls.Button; import com.shade.controls.ClickListener; import com.shade.controls.FadeInImage; import com.shade.controls.FadeInText; import com.shade.controls.SlickButton; import com.shade.util.ResourceManager; import com.shade.score.FailSafeHighScoreReader; public class HighscoreState extends BasicGameState { public static final int ID = 4; private static final String FEEDBACK_URL = "http://anotherearlymorning.com/shade/feedback"; private static final String NO_INTERNET_MESSAGE = "Shade supports global high scores. Please connect to the internet to take advantage of this exciting feature."; private MasterState master; private ResourceManager resource; private SlickButton play, feedback, back; private int timer; private FailSafeHighScoreReader reader; private ArrayList<FadeInText> scores; private ArrayList<FadeInImage> crowns; private boolean noInternet; public HighscoreState(MasterState m) throws SlickException { master = m; resource = m.resource; resource.register("back-up", "states/common/back-up.png"); resource.register("back-down", "states/common/back-down.png"); resource.register("crown", "states/highscore/crown.png"); scores = new ArrayList<FadeInText>(); crowns = new ArrayList<FadeInImage>(); reader = new FailSafeHighScoreReader(); } @Override public int getID() { return ID; } public void init(GameContainer container, StateBasedGame game) throws SlickException { throw new RuntimeException("HighscoreState was init'd!"); } @Override public void enter(GameContainer container, StateBasedGame game) throws SlickException { initButtons(); timer = 0; scores.clear(); if (master.dimmer.reversed()) { master.dimmer.rewind(); } initScores(); } // render the aquarium public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException { master.control.render(game, g, resource.get("background")); master.dimmer.render(game, g); resource.get("header").draw(400, 0); play.render(game, g); feedback.render(game, g); back.render(game, g); resource.get("trim").draw(); for (FadeInText t : scores) { t.render(game, g); } for (FadeInImage i : crowns) { i.render(game, g); } if (noInternet) { drawCentered(container, NO_INTERNET_MESSAGE, 550); } } private void drawCentered(GameContainer c, String s, int y) { int x = (c.getWidth() - master.jekyllSmall.getWidth(s)) / 2; master.jekyllSmall.drawString(x, y, s); } // render the aquarium public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { master.control.update(game, delta); timer += delta; if (timer > MasterState.STATE_TRANSITION_DELAY) { play.update(game, delta); feedback.update(game, delta); back.update(game, delta); } master.dimmer.update(game, delta); for (FadeInText t : scores) { t.update(game, delta); } for (FadeInImage i : crowns) { i.update(game, delta); } } private void initButtons() throws SlickException { initPlayButton(); initFeedbackButton(); initBackButton(); } private void initPlayButton() throws SlickException { play = new SlickButton(620, 110, resource.get("play-up"), resource .get("play-down")); play.addListener(new ClickListener() { public void onClick(StateBasedGame game, Button clicked) { game.enterState(SelectState.ID); } }); } private void initFeedbackButton() throws SlickException { feedback = new SlickButton(620, 130, resource.get("feedback-up"), resource.get("feedback-down")); feedback.addListener(new ClickListener() { public void onClick(StateBasedGame game, Button clicked) { BareBonesBrowserLaunch.openURL(FEEDBACK_URL); } }); } private void initBackButton() throws SlickException { back = new SlickButton(620, 150, resource.get("back-up"), resource.get("back-down")); back.addListener(new ClickListener() { public void onClick(StateBasedGame game, Button clicked) { game.enterState(TitleState.ID); master.dimmer.reverse(); } }); } private void initScores() throws SlickException { scores.clear(); crowns.clear(); String[][] scoress = reader.getScores(0, 10); noInternet = reader.isLocal(); int x = 50; int y = 100; int n = 0; for (String[] s : scoress) { if (s[2].equals("1")) { crowns.add(new FadeInImage(resource.get("crown"), x, y + 3 + (40 * n), 1000 + 400 *n)); } scores.add(new FadeInText(s[0], master.jekyllLarge, x + 50, y + (40 * n), 1000 + 400 * n)); scores.add(new FadeInText(s[1], master.jekyllLarge, x + 300, y + (40 * n), 1000 + 400 * n)); n++; } } }