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 Menu extends Screen { private static final int COUNT_CHOISE = 3; private static final int FIGHT = 0; private static final int HSCORE = 1; private static final int ABOUT = 2; 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 Menu() throws IOException { position = 0; Loader loader = Loader.getInstance(); // window Image windowImage = loader.getImage("/gfx/menu/window.png"); int windowX = (screenW - windowImage.getWidth()) / 2; int windowY = (screenH - windowImage.getHeight()) / 2; window = new Sprite(windowImage, windowX, windowY); //===========================================================[Пасхалка] window.addEvent(new EventListener() { // override public boolean is() { return (getXReleased() > getXPressed()) && (window.isEntrySet(getXPressed(), getYPressed())) && (window.isEntrySet(getXReleased(), getYReleased())) && (Math.abs(getXPressed() - getXReleased()) > window.getWidth() / 2); } // override public void event() { space.activateEgg(); } }); // left panel 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(); } }); // right panel 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(); } }); // down panel downPanel = loader.getImage("/gfx/awt/down_panel.png"); // choises Image choiseCrop = loader.getImage("/gfx/menu/choise.png"); choise = new Sprite[COUNT_CHOISE]; selectChoise = new Sprite[COUNT_CHOISE]; for (int i = 0; i < COUNT_CHOISE; 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(); } }); selectChoise[FIGHT].addEvent(choise[FIGHT].getEvent(0)); // adding event listener for choise about of "high score" choise[HSCORE].addEvent(new EventListener() { // override public boolean is() { return choise[HSCORE].isEntrySet(getXPressed(), getYPressed()); } // override public void event() { position = HSCORE; firePressed(); } }); selectChoise[HSCORE].addEvent(choise[HSCORE].getEvent(0)); // adding event listener for choise about of "about" choise[ABOUT].addEvent(new EventListener() { // override public boolean is() { return choise[ABOUT].isEntrySet(getXPressed(), getYPressed()); } // override public void event() { position = ABOUT; firePressed(); } }); selectChoise[ABOUT].addEvent(choise[ABOUT].getEvent(0)); } // override public void start() { final int previosScreenID = LongFlight.link.getPreviosScreenID(); if (previosScreenID == LongFlight.CRASH || previosScreenID == LongFlight.PAUSE) { Game.link.save(); } setDate(39, screenH - 9); super.start(); } // override public void run() { while (getGameLoop()) { fps.process(); update(); paint(); LongFlight.link.sleep(20); fps.max(); } } // override public void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { case UP: upPressed(); break; case DOWN: downPressed(); break; case FIRE: firePressed(); break; } switch (keyCode) { case RIGHT_SOFT: rightSoftPressed(); break; case LEFT_SOFT: leftSoftPressed(); break; } } // override public void keyReleased(int keyCode) { switch (keyCode) { //=======================================================[Пасхалка] case KEY_NUM0: space.activateEgg(); break; } } // override public void pointerReleased(int x, int y) { super.pointerReleased(x, y); window.exciteEvent(); } // override public void pointerPressed(int x, int y) { super.pointerPressed(x, y); rightSoft.exciteEvent(); leftSoft.exciteEvent(); choise[FIGHT].exciteEvent(); choise[HSCORE].exciteEvent(); choise[ABOUT].exciteEvent(); } private void upPressed() { position--; if (position < 0) { position = 0; } } private void downPressed() { position++; if (position >= COUNT_CHOISE) { position = COUNT_CHOISE - 1; } } private void firePressed() { leftSoftPressed(); } private void rightSoftPressed() { LongFlight.link.destroyApp(true); } private void leftSoftPressed() { switch (position) { case FIGHT: LongFlight.link.setScreen(LongFlight.SELECT_SHIP); break; case HSCORE: LongFlight.link.setScreen(LongFlight.HIGH_SCORE); break; case ABOUT: LongFlight.link.setScreen(LongFlight.ABOUT); break; } } private void update() { space.update(); } private void paint() { space.paint(graphics); window.paint(graphics); for (int i = 0; i < COUNT_CHOISE; i++) { if (i == position) { selectChoise[i].paint(graphics); } else { choise[i].paint(graphics); } } for (int i = 0; i < screenW; i += 128) { graphics.drawImage(downPanel, i, screenH - 18, 0); } leftSoft.paint(graphics); rightSoft.paint(graphics); paintDate(); flushGraphics(); } }