DEADSOFTWARE

License project under GNU GPL 3.
[LongFlight.git] / src / code / kalter / longflight / screen / SelectShip.java
1 package code.kalter.longflight.screen;
3 import code.kalter.longflight.ByteArrayOutputStream;
4 import code.kalter.longflight.EventListener;
5 import code.kalter.longflight.Loader;
6 import code.kalter.longflight.LongFlight;
7 import code.kalter.longflight.Sprite;
8 import code.kalter.longflight.game.ship.Ship;
9 import code.kalter.longflight.game.ship.ShipGamer;
10 import code.kalter.longflight.rms.RMS;
11 import java.io.IOException;
12 import javax.microedition.lcdui.Image;
13 import javax.microedition.rms.RecordStoreException;
15 /**
16 * Выбор кораблика
17 *
18 * @author KalterFive
19 */
20 public class SelectShip extends Screen {
22 private int position;
23 private final Sprite window;
24 private final Sprite frame;
25 private final Sprite leftSoft;
26 private final Sprite rightSoft;
27 private final Sprite[] leftButton;
28 private final Sprite[] rightButton;
29 private final Sprite[] ship;
30 private final Image downPanel;
32 public SelectShip() throws IOException {
33 Loader loader = Loader.getInstance();
35 // window
36 Image windowImage = loader.getImage("/gfx/select_ship/window.png");
37 int windowX = (screenW - windowImage.getWidth()) / 2;
38 int windowY = (screenH - windowImage.getHeight()) / 2;
39 window = new Sprite(windowImage, windowX, windowY);
40 window.addEvent(new EventListener() {
41 // override
42 public boolean is() {
43 return window.isEntrySet(getXPressed(), getYPressed())
44 && getXPressed() == getXReleased()
45 && getYPressed() == getYReleased();
46 }
48 // override
49 public void event() {
50 firePressed();
51 }
52 });
53 window.addEvent(new EventListener() {
54 // override
55 public boolean is() {
56 return window.isEntrySet(getXPressed(), getYPressed())
57 && window.isEntrySet(getXReleased(), getYReleased())
58 && Math.abs(getXReleased() - getXPressed()) > 50
59 && Math.abs(getYReleased() - getYPressed()) < 50;
60 }
62 // override
63 public void event() {
64 if (getXPressed() < getXReleased()) {
65 leftPressed();
66 }
67 if (getXPressed() > getXReleased()) {
68 rightPressed();
69 }
70 }
71 });
73 // left soft
74 Image leftSoftImage = loader.getImage("/gfx/awt/left_soft.png");
75 int leftSoftX = 0;
76 int leftSoftY = screenH - leftSoftImage.getHeight();
77 leftSoft = new Sprite(leftSoftImage, leftSoftX, leftSoftY);
78 leftSoft.addEvent(new EventListener() {
79 // override
80 public boolean is() {
81 return leftSoft.isEntrySet(getXPressed(), getYPressed());
82 }
84 // override
85 public void event() {
86 leftSoftPressed();
87 }
88 });
90 // right soft
91 Image rightSoftImage = loader.getImage("/gfx/awt/right_soft.png");
92 int rightSoftX = screenW - rightSoftImage.getWidth();
93 int rightSoftY = screenH - rightSoftImage.getHeight();
94 rightSoft = new Sprite(rightSoftImage, rightSoftX, rightSoftY);
95 rightSoft.addEvent(new EventListener() {
96 // override
97 public boolean is() {
98 return rightSoft.isEntrySet(getXPressed(), getYPressed());
99 }
101 // override
102 public void event() {
103 rightSoftPressed();
105 });
107 // down panel
108 downPanel = loader.getImage("/gfx/awt/down_panel.png");
110 // frame
111 Image frameImage = loader.getImage("/gfx/select_ship/frame.png");
112 int frameX = window.getX()
113 + (window.getWidth() - frameImage.getWidth()) / 2;
114 int frameY = window.getY() + 14
115 + (window.getHeight() - frameImage.getHeight()) / 2;
116 frame = new Sprite(frameImage, frameX, frameY);
118 // ships
119 ship = new Sprite[4];
120 for (int i = 0; i < Ship.COUNT; i++) {
121 Image shipImage = ShipGamer.getInstance().getImage(i);
122 int shipX = frame.getX()
123 + (frame.getWidth() - shipImage.getWidth()) / 2;
124 int shipY = frame.getY()
125 + (frame.getHeight() - shipImage.getHeight()) / 2;
126 ship[i] = new Sprite(shipImage, shipX, shipY);
129 // left / right buttons
130 Image button = loader.getImage("/gfx/select_ship/lr_button.png");
131 leftButton = new Sprite[2];
132 rightButton = new Sprite[2];
134 // left button
135 Image leftButtonImage = Image.createImage(button, 0, 0, 6, 11, 0);
136 int leftButtonX = window.getX() + 15;
137 int leftButtonY = frame.getY() + (frame.getHeight() - 11) / 2;
138 leftButton[0] = new Sprite(leftButtonImage, leftButtonX, leftButtonY);
140 // select left button
141 Image selectLeftButtonImage = Image.createImage(button, 0, 11,
142 6, 11, 0);
143 int selectLeftButtonX = leftButton[0].getX();
144 int selectLeftButtonY = leftButton[0].getY();
145 leftButton[1] = new Sprite(selectLeftButtonImage,
146 selectLeftButtonX, selectLeftButtonY);
148 // right button
149 Image rightButtonImage = Image.createImage(button, 6, 0, 6, 11, 0);
150 int rightButtonX = window.getX() + window.getWidth() - 21;
151 int rightButtonY = frame.getY() + (frame.getHeight() - 11) / 2;
152 rightButton[0] = new Sprite(rightButtonImage,
153 rightButtonX, rightButtonY);
155 // select right button
156 Image selectRightButtonImage = Image.createImage(button, 6, 11,
157 6, 11, 0);
158 int selectRightButtonX = rightButton[0].getX();
159 int selectRightButtonY = rightButton[0].getY();
160 rightButton[1] = new Sprite(selectRightButtonImage,
161 selectRightButtonX, selectRightButtonY);
164 // override
165 public void start() {
166 position = 0;
167 setDate(39, screenH - 9);
168 super.start();
171 // override
172 public void stop() {
173 super.stop();
176 // override
177 public void run() {
178 while (getGameLoop()) {
179 fps.process();
180 update();
181 paint();
182 LongFlight.link.sleep(20);
183 fps.max();
187 // override
188 public void keyPressed(int keyCode) {
189 switch (getGameAction(keyCode)) {
190 case LEFT:
191 leftPressed();
192 break;
194 case RIGHT:
195 rightPressed();
196 break;
198 case FIRE:
199 firePressed();
200 break;
202 switch (keyCode) {
203 case RIGHT_SOFT:
204 rightSoftPressed();
205 break;
207 case LEFT_SOFT:
208 leftSoftPressed();
209 break;
213 // override
214 public void pointerPressed(int x, int y) {
215 super.pointerPressed(x, y);
216 rightSoft.exciteEvent();
217 leftSoft.exciteEvent();
220 // override
221 public void pointerReleased(int x, int y) {
222 super.pointerReleased(x, y);
223 window.exciteEvent();
226 private void leftPressed() {
227 if (--position < 0) {
228 position = Ship.COUNT - 1;
232 private void rightPressed() {
233 if (++position >= Ship.COUNT) {
234 position = 0;
238 private void firePressed() {
239 leftSoftPressed();
242 private void rightSoftPressed() {
243 LongFlight.link.setScreen(LongFlight.MENU);
246 private void leftSoftPressed() {
247 saveAndGoToFire();
250 private void update() {
251 space.update();
254 private void paint() {
255 space.paint(graphics);
256 window.paint(graphics);
257 frame.paint(graphics);
258 ship[position].paint(graphics);
259 int keyStates = getKeyStates();
260 int li = 0;
261 if ((keyStates & LEFT_PRESSED) != 0) {
262 li = 1;
264 leftButton[li].paint(graphics);
265 int ri = 0;
266 if ((keyStates & RIGHT_PRESSED) != 0) {
267 ri = 1;
269 rightButton[ri].paint(graphics);
270 for (int i = 0; i < screenW; i += 128) {
271 graphics.drawImage(downPanel, i, screenH - 18, 0);
273 leftSoft.paint(graphics);
274 rightSoft.paint(graphics);
275 paintDate();
276 flushGraphics();
279 private void saveAndGoToFire() {
280 try {
281 RMS rms = new RMS("longflight", true);
282 ByteArrayOutputStream data = new ByteArrayOutputStream(1);
283 data.writeByte((byte) position);
284 rms.put(1, data);
285 rms.close();
286 } catch (RecordStoreException rse) {
287 LongFlight.link.catchException(rse);
289 space.deactivateEgg();
290 LongFlight.link.setScreen(LongFlight.LOADING);