package code.kalter.longflight.screen; import code.kalter.longflight.EventListener; import code.kalter.longflight.Loader; import code.kalter.longflight.LongFlight; import code.kalter.longflight.Sprite; import java.io.IOException; import javax.microedition.lcdui.Image; /** * Специальный экран, предназначенный для временной задержки действующего экрана * и одновременным контактом с пользователем. Жёстко привязан к игровому экрану * * @author KalterFive */ public class Pause extends Screen { private static final int COUNT = 2; //choise private static final int FIGHT = 0; private static final int MENU = 1; private final Sprite[] choise; private final Sprite[] selectChoise; private final Sprite window; private final Sprite leftSoft; private final Sprite rightSoft; private final Image downPanel; private int position; public Pause() throws IOException { position = 0; Loader loader = Loader.getInstance(); // window Image windowImage = loader.getImage("/gfx/pause/window.png"); int windowX = (screenW - windowImage.getWidth()) / 2; int windowY = (screenH - windowImage.getHeight()) / 2; window = new Sprite(windowImage, windowX, windowY); // right soft Image rightSoftImage = loader.getImage("/gfx/awt/right_soft.png"); int rightSoftX = screenW - rightSoftImage.getWidth(); int rightSoftY = screenH - rightSoftImage.getHeight(); rightSoft = new Sprite(rightSoftImage, rightSoftX, rightSoftY); rightSoft.addEvent(new EventListener() { // override public boolean is() { return rightSoft.isEntrySet(getXPressed(), getYPressed()); } // override public void event() { rightSoftPressed(); } }); // left soft Image leftSoftImage = loader.getImage("/gfx/awt/left_soft.png"); int leftSoftX = 0; int leftSoftY = screenH - leftSoftImage.getHeight(); leftSoft = new Sprite(leftSoftImage, leftSoftX, leftSoftY); leftSoft.addEvent(new EventListener() { // override public boolean is() { return leftSoft.isEntrySet(getXPressed(), getYPressed()); } // override public void event() { leftSoftPressed(); } }); // down panel downPanel = loader.getImage("/gfx/awt/down_panel.png"); // choises Image choiseCrop = loader.getImage("/gfx/pause/choise.png"); choise = new Sprite[COUNT]; selectChoise = new Sprite[COUNT]; for (int i = 0; i < COUNT; i++) { // choise Image c = Image.createImage(choiseCrop, 0, i * 22, 102, 22, 0); int choiseX = (screenW - 102) / 2; int choiseY = window.getY() + 34 + i * 24; choise[i] = new Sprite(c, choiseX, choiseY); // selectchoise Image sc = Image.createImage(choiseCrop, 102, i * 22, 102, 22, 0); int selectChoiseX = choise[i].getX(); int selectChoiseY = choise[i].getY(); selectChoise[i] = new Sprite(sc, selectChoiseX, selectChoiseY); } // adding event listener for choise about of "fight" choise[FIGHT].addEvent(new EventListener() { // override public boolean is() { return choise[FIGHT].isEntrySet(getXPressed(), getYPressed()); } // override public void event() { position = FIGHT; firePressed(); } }); // adding event listener for choise about of "menu" choise[MENU].addEvent(new EventListener() { // override public boolean is() { return choise[MENU].isEntrySet(getXPressed(), getYPressed()); } // override public void event() { position = MENU; firePressed(); } }); } //override public void run() { while (getGameLoop()) { fps.process(); update(); paint(); LongFlight.link.sleep(20); fps.max(); } } // override public void start() { setDate(39, screenH - 9); super.start(); } // override public void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { case UP: upPressed(); break; case DOWN: downPressed(); break; case FIRE: firePressed(); break; } switch (keyCode) { case LEFT_SOFT: leftSoftPressed(); break; case RIGHT_SOFT: rightSoftPressed(); break; } } // override public void pointerPressed(int x, int y) { super.pointerPressed(x, y); leftSoft.exciteEvent(); rightSoft.exciteEvent(); choise[FIGHT].exciteEvent(); choise[MENU].exciteEvent(); } private void upPressed() { if (--position < 0) { position = 0; } } private void downPressed() { if (++position >= COUNT) { position = COUNT - 1; } } private void leftSoftPressed() { firePressed(); } private void rightSoftPressed() { position = FIGHT; firePressed(); } private void firePressed() { switch (position) { case FIGHT: LongFlight.link.setScreen(LongFlight.GAME); break; case MENU: Game.link.setNullPause(); LongFlight.link.setScreen(LongFlight.MENU); break; } } private void update() { space.update(); } private void paint() { space.paint(graphics); Game.link.paintElements(graphics); window.paint(graphics); paintChoise(); paintDownPanel(); leftSoft.paint(graphics); rightSoft.paint(graphics); paintDate(); flushGraphics(); } private void paintChoise() { for (int i = 0; i < COUNT; i++) { if (i == position) { selectChoise[i].paint(graphics); } else { choise[i].paint(graphics); } } } private void paintDownPanel() { for (int i = 0; i < screenW; i += 128) { graphics.drawImage(downPanel, i, screenH - 18, 0); } } }