DEADSOFTWARE

License project under GNU GPL 3.
[LongFlight.git] / src / code / kalter / longflight / screen / Screen.java
1 package code.kalter.longflight.screen;
3 import code.kalter.longflight.Area;
4 import code.kalter.longflight.FPS;
5 import code.kalter.longflight.Font;
6 import code.kalter.longflight.Pointer;
7 import code.kalter.longflight.Time;
8 import code.kalter.longflight.space.Space;
9 import java.io.IOException;
10 import javax.microedition.lcdui.Graphics;
11 import javax.microedition.lcdui.game.GameCanvas;
13 /**
14 * Абстрактный класс для всех экранов
15 *
16 * @author KalterFive
17 */
18 public abstract class Screen extends GameCanvas implements Runnable {
20 // софт-кнопки
21 public final int LEFT_SOFT = -6;
22 public final int RIGHT_SOFT = -7;
24 // некоторые свойства, характерные каждому экрану
25 protected final Graphics graphics;
26 protected final FPS fps;
27 protected final Space space;
28 protected final Font font;
29 protected final int screenW;
30 protected final int screenH;
32 // нажатие и области нажатия
33 private final Pointer pointer;
34 private final Area upArea;
35 private final Area downArea;
36 private final Area leftArea;
37 private final Area rightArea;
38 private final Area fireArea;
40 // текущее время и его координаты
41 private final Time time;
42 private int timeXPosition;
43 private int timeYPosition;
45 private Thread thread;
46 protected boolean gameLoop;
48 public Screen() throws IOException {
49 super(false);
50 setFullScreenMode(true);
51 graphics = getGraphics();
52 screenW = getWidth();
53 screenH = getHeight();
54 fps = FPS.getInstance(30);
55 space = Space.getInstance(screenW, screenH);
56 font = Font.getInstance();
57 time = Time.getInstance(60000);
58 pointer = new Pointer();
59 upArea = new Area(screenW / 3, 0, screenW - screenW / 3, screenH / 3);
60 downArea = new Area(screenW / 3, screenH - screenH / 3,
61 screenW - screenW / 3, screenH);
62 leftArea = new Area(0, 0, screenW / 3, screenH);
63 rightArea = new Area(screenW - screenW / 3, 0, screenW, screenH);
64 fireArea = new Area(screenW / 3, screenH / 3,
65 screenW - screenW / 3, screenH - screenH / 3);
66 }
68 public void start() {
69 showNotify();
70 space.paint(graphics);
71 gameLoop = true;
72 thread = new Thread(this);
73 thread.start();
74 }
76 public void stop() {
77 hideNotify();
78 gameLoop = false;
79 }
81 // override
82 public void pointerPressed(int x, int y) {
83 pointer.setPressed(x, y);
84 }
86 // override
87 public void pointerReleased(int x, int y) {
88 pointer.setReleased(x, y);
89 }
91 public final boolean getGameLoop() {
92 return gameLoop;
93 }
95 public int getXPressed() {
96 return pointer.getXPressed();
97 }
99 public int getYPressed() {
100 return pointer.getYPressed();
103 public int getXReleased() {
104 return pointer.getXReleased();
107 public int getYReleased() {
108 return pointer.getYReleased();
111 public boolean isPointerUp() {
112 return isPointerArea(upArea);
115 public boolean isPointerDown() {
116 return isPointerArea(downArea);
119 public boolean isPointerLeft() {
120 return isPointerArea(leftArea);
123 public boolean isPointerRight() {
124 return isPointerArea(rightArea);
127 public boolean isPointerFire() {
128 return isPointerArea(fireArea);
131 public boolean isPointerArea(Area area) {
132 return area.isEntry(pointer.getXPressed(), pointer.getYPressed());
135 protected final void setDate(int x, int y) {
136 this.timeXPosition = x;
137 this.timeYPosition = y;
140 protected final void paintDate() {
141 font.paint(graphics, time.toString(), timeXPosition, timeYPosition);