Hud.java

/*
 * Copyright © 2011 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.battletank.game;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.TiledLayer;

public class Hud {
    public static final int NONE = 0;
    public static final int CONTINUE = 1;
    public static final int NEWGAME = 2;

    private final Resources resources;
    private int width = 0;
    private TiledLayer background;

    public volatile int lives;
    public volatile int score;
    public volatile int enemies;
    public volatile int leftButton = NONE;

    private final int padding;

    public Hud(Resources r, int w, int h) {
        resources = r;
        padding = r.gridSizeInPixels/2;
    }

    private void updateBackground(int w, int h) {
        if(background == null || w != width) {
            width = w;
            Image bg = resources.hudBackground;
            background = new TiledLayer(1, (w-1)/bg.getWidth() + 1, bg, bg.getWidth(), bg.getHeight());
            background.fillCells(0, 0, background.getColumns(), 1, 1);
        }
    }

    public void paint(Graphics g, int w, int h) {
        updateBackground(w, h);

        background.setPosition(0, 0);
        background.paint(g);
        // TODO to improve performance use images not strings
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
        int textOffset = (background.getHeight() - g.getFont().getHeight())/2;
        g.setColor(0x00ffffff);
        g.drawImage(resources.lifeIcon, padding, 0, Graphics.LEFT | Graphics.TOP);
        int x = padding + resources.lifeIcon.getWidth();
        g.drawString(" x "+lives, x, textOffset, Graphics.LEFT | Graphics.TOP);
        g.drawString("SCORE "+score, w/2, textOffset, Graphics.HCENTER | Graphics.TOP);
        g.drawString(" x "+enemies, w - padding, textOffset, Graphics.RIGHT | Graphics.TOP);
        x = w - g.getFont().stringWidth(" x "+enemies) - padding;
        g.drawImage(resources.enemyIcon, x, 0, Graphics.RIGHT | Graphics.TOP);

        background.setPosition(0, h - background.getHeight());
        background.paint(g);
        int y = h - textOffset;
        g.drawString("MENU", w - padding, y, Graphics.RIGHT | Graphics.BOTTOM);
        if(leftButton == CONTINUE) g.drawString("CONTINUE", padding, y, Graphics.LEFT | Graphics.BOTTOM);
        else if(leftButton == NEWGAME) g.drawString("NEW GAME", padding, y, Graphics.LEFT | Graphics.BOTTOM);
    }
}