package it.marteEngine.game.starcleaner;
import it.marteEngine.ResourceManager;
import it.marteEngine.entity.Entity;
import org.newdawn.slick.Color;
import org.newdawn.slick.Font;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.RoundedRectangle;
/**
* The HUD class responsible for showing score and so on. Also the Game Maker
* like controller class which deals with input that should be handled for the
* world. This way we avoid adding input dealing code to the WorldGameState
* class. Just add some visible or invisible controller class to your world and
* handle input there.
*
* @author Thomas
*
*/
public class Hud extends Entity {
private static final String CMD_NEXT = "nextLevel";
private static final String CMD_PREVIOUS = "previousLevel";
private Font font;
public Hud(float x, float y) {
super(x, y);
this.name = "HUD";
this.depth = 400;
this.font = ResourceManager.getFont("bradleyhanditc24");
this.define(CMD_NEXT, Input.KEY_N);
this.define(CMD_PREVIOUS, Input.KEY_P);
}
public void render(GameContainer container, Graphics g)
throws SlickException {
IngameState state = (IngameState) this.world;
RoundedRectangle r = new RoundedRectangle(x, y,
container.getWidth() - 1, 40, 20);
Color c = Color.blue;
c.a = 0.3f;
Font oldFont = g.getFont();
g.setFont(font);
g.setColor(c);
g.fill(r);
g.draw(r);
g.setColor(Color.white);
g.drawString("Score: " + state.score, x + 5, y + 1);
g.drawString("Seconds left: " + state.timeLeft, x + 205, y + 1);
g.drawString("Stars left: " + state.getNrOfEntities(Star.STAR_TYPE),
x + 465, y + 1);
g.setFont(oldFont);
}
public void update(GameContainer container, int delta)
throws SlickException {
if (check(CMD_NEXT)) {
Globals.levelDone = true;
Globals.playerCheated = true;
}
if (check(CMD_PREVIOUS)) {
IngameState state = (IngameState) this.world;
state.levelNo -= 2;
if (state.levelNo < 0)
state.levelNo = 0;
Globals.levelDone = true;
Globals.playerCheated = true;
}
}
}