package code.kalter.longflight.screen; import code.kalter.longflight.Area; import code.kalter.longflight.FPS; import code.kalter.longflight.Font; import code.kalter.longflight.Pointer; import code.kalter.longflight.Time; import code.kalter.longflight.space.Space; import java.io.IOException; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.game.GameCanvas; /** * Абстрактный класс для всех экранов * * @author KalterFive */ public abstract class Screen extends GameCanvas implements Runnable { // софт-кнопки public final int LEFT_SOFT = -6; public final int RIGHT_SOFT = -7; // некоторые свойства, характерные каждому экрану protected final Graphics graphics; protected final FPS fps; protected final Space space; protected final Font font; protected final int screenW; protected final int screenH; // нажатие и области нажатия private final Pointer pointer; private final Area upArea; private final Area downArea; private final Area leftArea; private final Area rightArea; private final Area fireArea; // текущее время и его координаты private final Time time; private int timeXPosition; private int timeYPosition; private Thread thread; protected boolean gameLoop; public Screen() throws IOException { super(false); setFullScreenMode(true); graphics = getGraphics(); screenW = getWidth(); screenH = getHeight(); fps = FPS.getInstance(30); space = Space.getInstance(screenW, screenH); font = Font.getInstance(); time = Time.getInstance(60000); pointer = new Pointer(); upArea = new Area(screenW / 3, 0, screenW - screenW / 3, screenH / 3); downArea = new Area(screenW / 3, screenH - screenH / 3, screenW - screenW / 3, screenH); leftArea = new Area(0, 0, screenW / 3, screenH); rightArea = new Area(screenW - screenW / 3, 0, screenW, screenH); fireArea = new Area(screenW / 3, screenH / 3, screenW - screenW / 3, screenH - screenH / 3); } public void start() { showNotify(); space.paint(graphics); gameLoop = true; thread = new Thread(this); thread.start(); } public void stop() { hideNotify(); gameLoop = false; } // override public void pointerPressed(int x, int y) { pointer.setPressed(x, y); } // override public void pointerReleased(int x, int y) { pointer.setReleased(x, y); } public final boolean getGameLoop() { return gameLoop; } public int getXPressed() { return pointer.getXPressed(); } public int getYPressed() { return pointer.getYPressed(); } public int getXReleased() { return pointer.getXReleased(); } public int getYReleased() { return pointer.getYReleased(); } public boolean isPointerUp() { return isPointerArea(upArea); } public boolean isPointerDown() { return isPointerArea(downArea); } public boolean isPointerLeft() { return isPointerArea(leftArea); } public boolean isPointerRight() { return isPointerArea(rightArea); } public boolean isPointerFire() { return isPointerArea(fireArea); } public boolean isPointerArea(Area area) { return area.isEntry(pointer.getXPressed(), pointer.getYPressed()); } protected final void setDate(int x, int y) { this.timeXPosition = x; this.timeYPosition = y; } protected final void paintDate() { font.paint(graphics, time.toString(), timeXPosition, timeYPosition); } }