package code.kalter.longflight.screen; import code.kalter.longflight.ByteArrayOutputStream; import code.kalter.longflight.EventListener; import code.kalter.longflight.Loader; import code.kalter.longflight.LongFlight; import code.kalter.longflight.Sprite; import code.kalter.longflight.game.ship.Ship; import code.kalter.longflight.game.ship.ShipGamer; import code.kalter.longflight.rms.RMS; import java.io.IOException; import javax.microedition.lcdui.Image; import javax.microedition.rms.RecordStoreException; /** * Выбор кораблика * * @author KalterFive */ public class SelectShip extends Screen { private int position; private final Sprite window; private final Sprite frame; private final Sprite leftSoft; private final Sprite rightSoft; private final Sprite[] leftButton; private final Sprite[] rightButton; private final Sprite[] ship; private final Image downPanel; public SelectShip() throws IOException { Loader loader = Loader.getInstance(); // window Image windowImage = loader.getImage("/gfx/select_ship/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 window.isEntrySet(getXPressed(), getYPressed()) && getXPressed() == getXReleased() && getYPressed() == getYReleased(); } // override public void event() { firePressed(); } }); window.addEvent(new EventListener() { // override public boolean is() { return window.isEntrySet(getXPressed(), getYPressed()) && window.isEntrySet(getXReleased(), getYReleased()) && Math.abs(getXReleased() - getXPressed()) > 50 && Math.abs(getYReleased() - getYPressed()) < 50; } // override public void event() { if (getXPressed() < getXReleased()) { leftPressed(); } if (getXPressed() > getXReleased()) { rightPressed(); } } }); // 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(); } }); // 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(); } }); // down panel downPanel = loader.getImage("/gfx/awt/down_panel.png"); // frame Image frameImage = loader.getImage("/gfx/select_ship/frame.png"); int frameX = window.getX() + (window.getWidth() - frameImage.getWidth()) / 2; int frameY = window.getY() + 14 + (window.getHeight() - frameImage.getHeight()) / 2; frame = new Sprite(frameImage, frameX, frameY); // ships ship = new Sprite[4]; for (int i = 0; i < Ship.COUNT; i++) { Image shipImage = ShipGamer.getInstance().getImage(i); int shipX = frame.getX() + (frame.getWidth() - shipImage.getWidth()) / 2; int shipY = frame.getY() + (frame.getHeight() - shipImage.getHeight()) / 2; ship[i] = new Sprite(shipImage, shipX, shipY); } // left / right buttons Image button = loader.getImage("/gfx/select_ship/lr_button.png"); leftButton = new Sprite[2]; rightButton = new Sprite[2]; // left button Image leftButtonImage = Image.createImage(button, 0, 0, 6, 11, 0); int leftButtonX = window.getX() + 15; int leftButtonY = frame.getY() + (frame.getHeight() - 11) / 2; leftButton[0] = new Sprite(leftButtonImage, leftButtonX, leftButtonY); // select left button Image selectLeftButtonImage = Image.createImage(button, 0, 11, 6, 11, 0); int selectLeftButtonX = leftButton[0].getX(); int selectLeftButtonY = leftButton[0].getY(); leftButton[1] = new Sprite(selectLeftButtonImage, selectLeftButtonX, selectLeftButtonY); // right button Image rightButtonImage = Image.createImage(button, 6, 0, 6, 11, 0); int rightButtonX = window.getX() + window.getWidth() - 21; int rightButtonY = frame.getY() + (frame.getHeight() - 11) / 2; rightButton[0] = new Sprite(rightButtonImage, rightButtonX, rightButtonY); // select right button Image selectRightButtonImage = Image.createImage(button, 6, 11, 6, 11, 0); int selectRightButtonX = rightButton[0].getX(); int selectRightButtonY = rightButton[0].getY(); rightButton[1] = new Sprite(selectRightButtonImage, selectRightButtonX, selectRightButtonY); } // override public void start() { position = 0; setDate(39, screenH - 9); super.start(); } // override public void stop() { super.stop(); } // 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 LEFT: leftPressed(); break; case RIGHT: rightPressed(); break; case FIRE: firePressed(); break; } switch (keyCode) { case RIGHT_SOFT: rightSoftPressed(); break; case LEFT_SOFT: leftSoftPressed(); break; } } // override public void pointerPressed(int x, int y) { super.pointerPressed(x, y); rightSoft.exciteEvent(); leftSoft.exciteEvent(); } // override public void pointerReleased(int x, int y) { super.pointerReleased(x, y); window.exciteEvent(); } private void leftPressed() { if (--position < 0) { position = Ship.COUNT - 1; } } private void rightPressed() { if (++position >= Ship.COUNT) { position = 0; } } private void firePressed() { leftSoftPressed(); } private void rightSoftPressed() { LongFlight.link.setScreen(LongFlight.MENU); } private void leftSoftPressed() { saveAndGoToFire(); } private void update() { space.update(); } private void paint() { space.paint(graphics); window.paint(graphics); frame.paint(graphics); ship[position].paint(graphics); int keyStates = getKeyStates(); int li = 0; if ((keyStates & LEFT_PRESSED) != 0) { li = 1; } leftButton[li].paint(graphics); int ri = 0; if ((keyStates & RIGHT_PRESSED) != 0) { ri = 1; } rightButton[ri].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(); } private void saveAndGoToFire() { try { RMS rms = new RMS("longflight", true); ByteArrayOutputStream data = new ByteArrayOutputStream(1); data.writeByte((byte) position); rms.put(1, data); rms.close(); } catch (RecordStoreException rse) { LongFlight.link.catchException(rse); } space.deactivateEgg(); LongFlight.link.setScreen(LongFlight.LOADING); } }