summaryrefslogtreecommitdiff
path: root/jeu-test/Lemmini/0.84/src/Lemmini.java
diff options
context:
space:
mode:
Diffstat (limited to 'jeu-test/Lemmini/0.84/src/Lemmini.java')
-rw-r--r--jeu-test/Lemmini/0.84/src/Lemmini.java987
1 files changed, 532 insertions, 455 deletions
diff --git a/jeu-test/Lemmini/0.84/src/Lemmini.java b/jeu-test/Lemmini/0.84/src/Lemmini.java
index a2dfe08..d1e3083 100644
--- a/jeu-test/Lemmini/0.84/src/Lemmini.java
+++ b/jeu-test/Lemmini/0.84/src/Lemmini.java
@@ -102,7 +102,8 @@ public class Lemmini extends JFrame implements KeyListener {
private final static int WIN_OFS = 120;
/** flag: started as Webstart application */
private static boolean isWebstartApp = true;
-
+
+
private final static long serialVersionUID = 0x01;
/** self reference */
@@ -636,7 +637,7 @@ public class Lemmini extends JFrame implements KeyListener {
try {
ServiceManager.lookup("javax.jnlp.BasicService");
} catch (UnavailableServiceException ex) {*/
- isWebstartApp = false;
+ isWebstartApp = false;
//};
// workaround to adjust time base to 1ms under XP
@@ -728,135 +729,208 @@ public class Lemmini extends JFrame implements KeyListener {
int code = keyevent.getKeyCode();
if (GameController.getGameState() == GameController.State.LEVEL) {
switch (code) {
- case KeyEvent.VK_1:
- case KeyEvent.VK_F3:
- GameController.handleIconButton(Icons.Type.CLIMB);
- break;
- case KeyEvent.VK_2:
- case KeyEvent.VK_F4:
- GameController.handleIconButton(Icons.Type.FLOAT);
- break;
- case KeyEvent.VK_3:
- case KeyEvent.VK_F5:
- GameController.handleIconButton(Icons.Type.BOMB);
- break;
- case KeyEvent.VK_4:
- case KeyEvent.VK_F6:
- GameController.handleIconButton(Icons.Type.BLOCK);
- break;
- case KeyEvent.VK_5:
- case KeyEvent.VK_F7:
- GameController.handleIconButton(Icons.Type.BUILD);
- break;
- case KeyEvent.VK_6:
- case KeyEvent.VK_F8:
- GameController.handleIconButton(Icons.Type.BASH);
- break;
- case KeyEvent.VK_7:
- case KeyEvent.VK_F9:
- GameController.handleIconButton(Icons.Type.MINE);
- break;
- case KeyEvent.VK_8:
- case KeyEvent.VK_F10:
- GameController.handleIconButton(Icons.Type.DIG);
- break;
- case KeyEvent.VK_D:
- if (GameController.isCheat())
- gp.setDebugDraw(!gp.getDebugDraw());
- break;
- case KeyEvent.VK_W:
- if (GameController.isCheat()) {
- GameController.setNumLeft(GameController.getNumLemmingsMax());
- GameController.endLevel();
- }
- break;
- case KeyEvent.VK_L: // print current level on the console
- if (GameController.isCheat())
- System.out.println(GameController.getLevelPack(GameController.getCurLevelPackIdx()).getInfo(GameController.getCurDiffLevel(), GameController.getCurLevelNumber()).getFileName());
- break;
- case KeyEvent.VK_S: // superlemming on/off
+ case KeyEvent.VK_1:
+ case KeyEvent.VK_F3:
+ GameController.handleIconButton(Icons.Type.CLIMB);
+ break;
+ case KeyEvent.VK_2:
+ case KeyEvent.VK_F4:
+ GameController.handleIconButton(Icons.Type.FLOAT);
+ break;
+ case KeyEvent.VK_3:
+ case KeyEvent.VK_F5:
+ GameController.handleIconButton(Icons.Type.BOMB);
+ break;
+ case KeyEvent.VK_4:
+ case KeyEvent.VK_F6:
+ GameController.handleIconButton(Icons.Type.BLOCK);
+ break;
+ case KeyEvent.VK_5:
+ case KeyEvent.VK_F7:
+ GameController.handleIconButton(Icons.Type.BUILD);
+ break;
+ case KeyEvent.VK_6:
+ case KeyEvent.VK_F8:
+ GameController.handleIconButton(Icons.Type.BASH);
+ break;
+ case KeyEvent.VK_7:
+ case KeyEvent.VK_F9:
+ GameController.handleIconButton(Icons.Type.MINE);
+ break;
+ case KeyEvent.VK_8:
+ case KeyEvent.VK_F10:
+ GameController.handleIconButton(Icons.Type.DIG);
+ break;
+ case KeyEvent.VK_D:
+ if (GameController.isCheat())
+ gp.setDebugDraw(!gp.getDebugDraw());
+ break;
+ case KeyEvent.VK_W:
+ if (GameController.isCheat()) {
+ GameController.setNumLeft(GameController.getNumLemmingsMax());
+ GameController.endLevel();
+ }
+ break;
+ case KeyEvent.VK_L: // print current level on the console
+ if (GameController.isCheat())
+ System.out.println(GameController.getLevelPack(GameController.getCurLevelPackIdx()).getInfo(GameController.getCurDiffLevel(), GameController.getCurLevelNumber()).getFileName());
+ break;
+ case KeyEvent.VK_S: // superlemming on/off
+ if (GameController.isCheat())
+ GameController.setSuperLemming(!GameController.isSuperLemming());
+ else {
+ try{
+ File file = new File(Core.resourcePath+"/level.png");
+ BufferedImage tmp = GameController.getLevel().createMiniMap(null,GameController.getBgImage(), 1, 1, false);
+ ImageIO.write(tmp, "png", file);
+ } catch (Exception ex) {}
+ }
+ break;
+ case KeyEvent.VK_C:
+ if (Core.player.isCheat()) {
+ GameController.setCheat(!GameController.isCheat());
if (GameController.isCheat())
- GameController.setSuperLemming(!GameController.isSuperLemming());
- else {
- try{
- File file = new File(Core.resourcePath+"/level.png");
- BufferedImage tmp = GameController.getLevel().createMiniMap(null,GameController.getBgImage(), 1, 1, false);
- ImageIO.write(tmp, "png", file);
- } catch (Exception ex) {}
- }
- break;
- case KeyEvent.VK_C:
- if (Core.player.isCheat()) {
- GameController.setCheat(!GameController.isCheat());
- if (GameController.isCheat())
- GameController.setWasCheated(true);
- }
+ GameController.setWasCheated(true);
+ }
+ else
+ GameController.setCheat(false);
+ break;
+ case KeyEvent.VK_F11:
+ case KeyEvent.VK_P:
+ GameController.setPaused(!GameController.isPaused());
+ GameController.pressIcon(Icons.Type.PAUSE);
+ break;
+ case KeyEvent.VK_F:
+ case KeyEvent.VK_ENTER:
+ GameController.setFastForward(!GameController.isFastForward());
+ GameController.pressIcon(Icons.Type.FFWD);
+ break;
+ case KeyEvent.VK_X:
+ if (GameController.isCheat())
+ patchLevel(GameController.getLevelPack(GameController.getCurLevelPackIdx()).getInfo(GameController.getCurDiffLevel(), GameController.getCurLevelNumber()).getFileName());
+ break;
+ case KeyEvent.VK_RIGHT /*39*/: {
+ if (GameController.isAdvancedSelect())
+ gp.setCursor(LemmCursor.Type.RIGHT);
+ else {
+ int xOfsTemp = GameController.getxPos() + ((gp.isShiftPressed()) ? GraphicsPane.X_STEP_FAST : GraphicsPane.X_STEP);
+ if (xOfsTemp < Level.WIDTH-this.getWidth())
+ GameController.setxPos(xOfsTemp);
else
- GameController.setCheat(false);
- break;
- case KeyEvent.VK_F11:
- case KeyEvent.VK_P:
- GameController.setPaused(!GameController.isPaused());
- GameController.pressIcon(Icons.Type.PAUSE);
- break;
- case KeyEvent.VK_F:
- case KeyEvent.VK_ENTER:
- GameController.setFastForward(!GameController.isFastForward());
- GameController.pressIcon(Icons.Type.FFWD);
- break;
- case KeyEvent.VK_X:
- if (GameController.isCheat())
- patchLevel(GameController.getLevelPack(GameController.getCurLevelPackIdx()).getInfo(GameController.getCurDiffLevel(), GameController.getCurLevelNumber()).getFileName());
- break;
- case KeyEvent.VK_RIGHT /*39*/: {
- if (GameController.isAdvancedSelect())
- gp.setCursor(LemmCursor.Type.RIGHT);
- else {
- int xOfsTemp = GameController.getxPos() + ((gp.isShiftPressed()) ? GraphicsPane.X_STEP_FAST : GraphicsPane.X_STEP);
- if (xOfsTemp < Level.WIDTH-this.getWidth())
- GameController.setxPos(xOfsTemp);
- else
- GameController.setxPos(Level.WIDTH-this.getWidth());
- }
- break; }
- case KeyEvent.VK_LEFT /*37*/: {
- if (GameController.isAdvancedSelect())
- gp.setCursor(LemmCursor.Type.LEFT);
- else {
- int xOfsTemp = GameController.getxPos() - ((gp.isShiftPressed()) ? GraphicsPane.X_STEP_FAST : GraphicsPane.X_STEP);
- if (xOfsTemp > 0)
- GameController.setxPos(xOfsTemp);
- else
- GameController.setxPos(0);
- }
- break; }
- case KeyEvent.VK_UP: {
- gp.setCursor(LemmCursor.Type.WALKER);
- break;}
- case KeyEvent.VK_SHIFT:
- gp.setShiftPressed(true);
- break;
- case KeyEvent.VK_SPACE:
- if (GameController.isCheat()) {
- Lemming l = new Lemming(gp.getCursorX(), gp.getCursorY());
- synchronized (GameController.getLemmings()) {
- GameController.getLemmings().add(l);
- }
+ GameController.setxPos(Level.WIDTH-this.getWidth());
+ }
+ break; }
+ case KeyEvent.VK_LEFT /*37*/: {
+ if (GameController.isAdvancedSelect())
+ gp.setCursor(LemmCursor.Type.LEFT);
+ else {
+ int xOfsTemp = GameController.getxPos() - ((gp.isShiftPressed()) ? GraphicsPane.X_STEP_FAST : GraphicsPane.X_STEP);
+ if (xOfsTemp > 0)
+ GameController.setxPos(xOfsTemp);
+ else
+ GameController.setxPos(0);
+ }
+ break; }
+ case KeyEvent.VK_UP: {
+ gp.setCursor(LemmCursor.Type.WALKER);
+ break;}
+ case KeyEvent.VK_SHIFT:
+ gp.setShiftPressed(true);
+ break;
+ case KeyEvent.VK_SPACE:
+ if (GameController.isCheat()) {
+ Lemming l = new Lemming(gp.getCursorX(), gp.getCursorY());
+ synchronized (GameController.getLemmings()) {
+ GameController.getLemmings().add(l);
}
- break;
- case KeyEvent.VK_PLUS:
- case KeyEvent.VK_ADD:
- case KeyEvent.VK_F2:
- GameController.pressPlus(GameController.KEYREPEAT_KEY);
- break;
- case KeyEvent.VK_MINUS:
- case KeyEvent.VK_SUBTRACT:
- case KeyEvent.VK_F1:
- GameController.pressMinus(GameController.KEYREPEAT_KEY);
- break;
- case KeyEvent.VK_F12:
- GameController.handleIconButton(Icons.Type.NUKE);
- break;
+ }
+ break;
+ case KeyEvent.VK_Q:
+ if (GameController.cheat) {
+ GameController.modeW=true;
+ // GameController.stencil = GameController.level.paintLevel(GameController.bgImage, Core.getCmp(), GameController.stencil,3);
+ for(int pixelj=0;pixelj<GameController.stencil.getHeight();++pixelj){
+ for(int pixel=0;pixel<GameController.stencil.getWidth();++pixel){
+ //System.out.print(GameController.stencil.get(pixel));
+ //if(pixel%GameController.stencil.getWidth()==0){System.out.println("|"+pixel);}
+ // -28120
+ // -2064352
+ // -3100608
+ // -4173808
+ // -5210080
+ // -5752816
+ // -7331824
+ // -8376304
+ // -9400320
+ // -10485744
+ // -12054520
+ // -13022976
+ // -13697016
+ // -14655456
+ // -15716593
+ // -16289024
+ int ccc_temp=0;
+ switch(GameController.stencil.get(pixel,pixelj)){ //*GameController.stencil.getHeight())){
+ case 0 : // MSK_EMPTY
+ ccc_temp=0;
+ break;
+ case 1 : // MSK_BRICK
+ ccc_temp=-9400320;
+ break;
+ case 2 : // MSK_STEEL
+ ccc_temp=-16289024;
+ break;
+ case 8 : // MSK_STOPPER_RIGHT
+ ccc_temp=-13022976;
+ break;
+ case 16 : // MSK_STOPPER_LEFT
+ ccc_temp=-14655456;
+ break;
+ case 32 : // MSK_NO_DIG_LEFT
+ ccc_temp=-28120;
+ break;
+ case 64 : // MSK_NO_DIG_RIGHT
+ ccc_temp=-2064352;
+ break;
+ case 128 : // MSK_TRAP_DROWN
+ ccc_temp=-15716593;
+ break;
+ case 256 : // MSK_TRAP_REPLACE
+ ccc_temp=-8376304;
+ break;
+ case 512 : // MSK_TRAP_DIE
+ ccc_temp=-13697016;
+ break;
+ case 1024 : // MSK_EXIT
+ ccc_temp=-7331824;
+ break;
+ default: break;
+ }
+ GameController.bgImage.setRGB(pixel, pixelj , ccc_temp );
+ }}
+ } else {
+ GameController.modeW=false;
+ GameController.stencil = GameController.level.paintLevel(GameController.bgImage, Core.getCmp(), GameController.stencil,0);
+ }
+ break;
+ case KeyEvent.VK_PLUS:
+ case KeyEvent.VK_ADD:
+ case KeyEvent.VK_F2:
+ GameController.pressPlus(GameController.KEYREPEAT_KEY);
+ break;
+ case KeyEvent.VK_T: if (GameController.cheat)
+ { GameController.cheat=false; }
+ else
+ {GameController.cheat=true;}
+ break;
+ case KeyEvent.VK_MINUS:
+ case KeyEvent.VK_SUBTRACT:
+ case KeyEvent.VK_F1:
+ GameController.pressMinus(GameController.KEYREPEAT_KEY);
+ break;
+ case KeyEvent.VK_F12:
+ GameController.handleIconButton(Icons.Type.NUKE);
+ break;
}
keyevent.consume();
}
@@ -870,34 +944,34 @@ public class Lemmini extends JFrame implements KeyListener {
int code = keyevent.getKeyCode();
if (GameController.getGameState() == GameController.State.LEVEL) {
switch (code) {
- case KeyEvent.VK_SHIFT:
- gp.setShiftPressed(false);
- break;
- case KeyEvent.VK_PLUS:
- case KeyEvent.VK_ADD:
- case KeyEvent.VK_F2:
- GameController.releasePlus(GameController.KEYREPEAT_KEY);
- break;
- case KeyEvent.VK_MINUS:
- case KeyEvent.VK_SUBTRACT:
- case KeyEvent.VK_F1:
- GameController.releaseMinus(GameController.KEYREPEAT_KEY);
- break;
- case KeyEvent.VK_F12:
- GameController.releaseIcon(Icons.Type.NUKE);
- break;
- case KeyEvent.VK_LEFT:
- if (LemmCursor.getType() == LemmCursor.Type.LEFT)
- gp.setCursor(LemmCursor.Type.NORMAL);
- break;
- case KeyEvent.VK_RIGHT:
- if (LemmCursor.getType() == LemmCursor.Type.RIGHT)
- gp.setCursor(LemmCursor.Type.NORMAL);
- break;
- case KeyEvent.VK_UP:
- if (LemmCursor.getType() == LemmCursor.Type.WALKER)
- gp.setCursor(LemmCursor.Type.NORMAL);
- break;
+ case KeyEvent.VK_SHIFT:
+ gp.setShiftPressed(false);
+ break;
+ case KeyEvent.VK_PLUS:
+ case KeyEvent.VK_ADD:
+ case KeyEvent.VK_F2:
+ GameController.releasePlus(GameController.KEYREPEAT_KEY);
+ break;
+ case KeyEvent.VK_MINUS:
+ case KeyEvent.VK_SUBTRACT:
+ case KeyEvent.VK_F1:
+ GameController.releaseMinus(GameController.KEYREPEAT_KEY);
+ break;
+ case KeyEvent.VK_F12:
+ GameController.releaseIcon(Icons.Type.NUKE);
+ break;
+ case KeyEvent.VK_LEFT:
+ if (LemmCursor.getType() == LemmCursor.Type.LEFT)
+ gp.setCursor(LemmCursor.Type.NORMAL);
+ break;
+ case KeyEvent.VK_RIGHT:
+ if (LemmCursor.getType() == LemmCursor.Type.RIGHT)
+ gp.setCursor(LemmCursor.Type.NORMAL);
+ break;
+ case KeyEvent.VK_UP:
+ if (LemmCursor.getType() == LemmCursor.Type.WALKER)
+ gp.setCursor(LemmCursor.Type.NORMAL);
+ break;
}
}
}
@@ -1128,187 +1202,189 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
BufferedImage bgImage = GameController.getBgImage();
switch (GameController.getGameState()) {
- case INTRO:
- TextScreen.setMode(TextScreen.Mode.INTRO);
- TextScreen.update();
- offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
- //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
- break;
- case BRIEFING:
- TextScreen.setMode(TextScreen.Mode.BRIEFING);
- TextScreen.update();
- offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
- //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
- break;
- case DEBRIEFING:
- TextScreen.setMode(TextScreen.Mode.DEBRIEFING);
- TextScreen.update();
- offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
- TextScreen.getDialog().handleMouseMove(xMouseScreen, yMouseScreen);
- //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
- break;
- case LEVEL:
- case LEVEL_END:
- if (bgImage != null) {
- GameController.update();
- // mouse movement
- if (yMouseScreen > 40 && yMouseScreen <scoreY) { // avoid scrolling if menu is selected
- int xOfsTemp;
- if (xMouseScreen > this.getWidth() - AUTOSCROLL_RANGE) {
- xOfsTemp = GameController.getxPos() + ((shiftPressed) ? X_STEP_FAST : X_STEP);
- if (xOfsTemp < Level.WIDTH-this.getWidth())
- GameController.setxPos(xOfsTemp);
- else
- GameController.setxPos(Level.WIDTH-this.getWidth());
- } else if (xMouseScreen < AUTOSCROLL_RANGE) {
- xOfsTemp = GameController.getxPos() - ((shiftPressed) ? X_STEP_FAST : X_STEP);
- if (xOfsTemp > 0)
- GameController.setxPos(xOfsTemp);
- else
- GameController.setxPos(0);
- }
+ case INTRO:
+ TextScreen.setMode(TextScreen.Mode.INTRO);
+ TextScreen.update();
+ offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
+ //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
+ break;
+ case BRIEFING:
+ TextScreen.setMode(TextScreen.Mode.BRIEFING);
+ TextScreen.update();
+ offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
+ //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
+ break;
+ case DEBRIEFING:
+ TextScreen.setMode(TextScreen.Mode.DEBRIEFING);
+ TextScreen.update();
+ offGfx.drawImage(TextScreen.getScreen(), 0,0,null);
+ TextScreen.getDialog().handleMouseMove(xMouseScreen, yMouseScreen);
+ //offGfx.drawImage(LemmCursor.getImage(LemmCursor.TYPE_NORMAL), LemmCursor.x, LemmCursor.y, null);
+ break;
+ case LEVEL:
+ case LEVEL_END:
+ if (bgImage != null) {
+ GameController.update();
+ // mouse movement
+ if (yMouseScreen > 40 && yMouseScreen <scoreY) { // avoid scrolling if menu is selected
+ int xOfsTemp;
+ if (xMouseScreen > this.getWidth() - AUTOSCROLL_RANGE) {
+ xOfsTemp = GameController.getxPos() + ((shiftPressed) ? X_STEP_FAST : X_STEP);
+ if (xOfsTemp < Level.WIDTH-this.getWidth())
+ GameController.setxPos(xOfsTemp);
+ else
+ GameController.setxPos(Level.WIDTH-this.getWidth());
+ } else if (xMouseScreen < AUTOSCROLL_RANGE) {
+ xOfsTemp = GameController.getxPos() - ((shiftPressed) ? X_STEP_FAST : X_STEP);
+ if (xOfsTemp > 0)
+ GameController.setxPos(xOfsTemp);
+ else
+ GameController.setxPos(0);
}
- // store local copy of xOfs to avoid sync problems with AWT threads
- // (scrolling by dragging changes xOfs as well)
- int xOfsTemp = GameController.getxPos();
+ }
+ // store local copy of xOfs to avoid sync problems with AWT threads
+ // (scrolling by dragging changes xOfs as well)
+ int xOfsTemp = GameController.getxPos();
- //timeBaseRedraw +=GameController.timePerFrame;
- int w = this.getWidth();
- int h = Level.HEIGHT;
- if (h>this.getHeight())
- h = this.getHeight();
+ //timeBaseRedraw +=GameController.timePerFrame;
+ int w = this.getWidth();
+ int h = Level.HEIGHT;
+ if (h>this.getHeight())
+ h = this.getHeight();
- Level level = GameController.getLevel();
- if (level != null) {
+ Level level = GameController.getLevel();
+ if (level != null) {
- // clear screen
- offGfx.setClip(0,0,w,h);
- offGfx.setBackground(level.getBgColor());
- offGfx.clearRect(0, 0, w, h);
+ // clear screen
+ offGfx.setClip(0,0,w,h);
+ offGfx.setBackground(level.getBgColor());
+ offGfx.clearRect(0, 0, w, h);
- // draw "behind" objects
- GameController.getLevel().drawBehindObjects(offGfx, w, xOfsTemp);
+ // draw "behind" objects
+ GameController.getLevel().drawBehindObjects(offGfx, w, xOfsTemp);
- // draw background
- offGfx.drawImage(bgImage, 0, 0, w, h, xOfsTemp, 0, xOfsTemp+w, h, this);
+ // draw backgroundtest
+ offGfx.drawImage(bgImage, 0, 0, w, h, xOfsTemp, 0, xOfsTemp+w, h, this);
- // draw "in front" objects
- GameController.getLevel().drawInFrontObjects(offGfx, w, xOfsTemp);
- }
- // clear parts of the screen for menu etc.
- offGfx.setClip(0,Level.HEIGHT,w,this.getHeight());
- offGfx.setBackground(Color.BLACK);
- offGfx.clearRect(0,scoreY,w,this.getHeight());
- // draw counter, icons, small level pic
- // draw menu
- //Icons icons = GameController.getIcons();
- GameController.drawIcons(offGfx, 0, iconsY);
- offGfx.drawImage(MiscGfx.getImage(MiscGfx.Index.BORDER), smallX-4, smallY-4, null);
- MiniMap.draw(offGfx, smallX, smallY, xOfsTemp);
- // draw counters
- GameController.drawCounters(offGfx,counterY);
-
- // draw lemmings
- offGfx.setClip(0,0,w,h);
- GameController.getLemmsUnderCursor().clear();
- List<Lemming> lemmings = GameController.getLemmings();
- synchronized (GameController.getLemmings()) {
- Iterator<Lemming> it = lemmings.iterator();
- while (it.hasNext()) {
- Lemming l = it.next();
- int lx = l.screenX();
- int ly = l.screenY();
- int mx = l.midX()-16;
- if (lx+l.width() > xOfsTemp && lx < xOfsTemp+w) {
- offGfx.drawImage(l.getImage(),lx-xOfsTemp,ly,null);
- if (LemmCursor.doesCollide(l, xOfsTemp)) {
- GameController.getLemmsUnderCursor().add(l);
- }
- BufferedImage cd = l.getCountdown();
- if (cd!=null)
- offGfx.drawImage(cd,mx-xOfsTemp,ly-cd.getHeight(),null);
+ // draw "in front" objects
+ GameController.getLevel().drawInFrontObjects(offGfx, w, xOfsTemp);
+ }
+
+
+ // clear parts of the screen for menu etc.
+ offGfx.setClip(0,Level.HEIGHT,w,this.getHeight());
+ offGfx.setBackground(Color.BLACK);
+ offGfx.clearRect(0,scoreY,w,this.getHeight());
+ // draw counter, icons, small level pic
+ // draw menu
+ //Icons icons = GameController.getIcons();
+ GameController.drawIcons(offGfx, 0, iconsY);
+ offGfx.drawImage(MiscGfx.getImage(MiscGfx.Index.BORDER), smallX-4, smallY-4, null);
+ MiniMap.draw(offGfx, smallX, smallY, xOfsTemp);
+ // draw counters
+ GameController.drawCounters(offGfx,counterY);
+
+ // draw lemmings
+ offGfx.setClip(0,0,w,h);
+ GameController.getLemmsUnderCursor().clear();
+ List<Lemming> lemmings = GameController.getLemmings();
+ synchronized (GameController.getLemmings()) {
+ Iterator<Lemming> it = lemmings.iterator();
+ while (it.hasNext()) {
+ Lemming l = it.next();
+ int lx = l.screenX();
+ int ly = l.screenY();
+ int mx = l.midX()-16;
+ if (lx+l.width() > xOfsTemp && lx < xOfsTemp+w) {
+ offGfx.drawImage(l.getImage(),lx-xOfsTemp,ly,null);
+ if (LemmCursor.doesCollide(l, xOfsTemp)) {
+ GameController.getLemmsUnderCursor().add(l);
+ }
+ BufferedImage cd = l.getCountdown();
+ if (cd!=null)
+ offGfx.drawImage(cd,mx-xOfsTemp,ly-cd.getHeight(),null);
- BufferedImage sel = l.getSelectImg();
- if (sel!=null)
- offGfx.drawImage(sel,mx-xOfsTemp,ly-sel.getHeight(),null);
+ BufferedImage sel = l.getSelectImg();
+ if (sel!=null)
+ offGfx.drawImage(sel,mx-xOfsTemp,ly-sel.getHeight(),null);
- }
- }
- // draw pixels in mini map
- offGfx.setClip(0,0,w,this.getHeight());
- it = lemmings.iterator();
- while (it.hasNext()) {
- Lemming l = it.next();
- int lx = l.screenX();
- int ly = l.screenY();
- // draw pixel in mini map
- MiniMap.drawLemming(offGfx, lx, ly);
}
}
- Lemming lemmUnderCursor = GameController.lemmUnderCursor(LemmCursor.getType());
- offGfx.setClip(0,0,w,h);
- // draw explosions
- GameController.drawExplosions(offGfx,offImage[0].getWidth(), Level.HEIGHT, xOfsTemp);
+ // draw pixels in mini map
offGfx.setClip(0,0,w,this.getHeight());
-
- // draw info string
- outStrGfx.clearRect(0, 0, outStrImg.getWidth(), outStrImg.getHeight());
- if (GameController.isCheat()) {
- Stencil stencil = GameController.getStencil();
- if (stencil != null) {
- int stencilVal = stencil.get(xMouse+yMouse*Level.WIDTH);
- String test = "x: "+xMouse+", y: "+yMouse+", mask: "+(stencilVal&0xffff)+" "+Stencil.getObjectID(stencilVal);
- LemmFont.strImage(outStrGfx, test);
- offGfx.drawImage(outStrImg,4,Level.HEIGHT+8,null);
- }
- } else {
- StringBuffer sb = new StringBuffer();
- sb.append("OUT ");
- String s = Integer.toString(GameController.getLemmings().size());
- sb.append(s);
- if (s.length()==1)
- sb.append(" ");
- sb.append(" IN ");
- s = Integer.toString(GameController.getNumLeft()*100/GameController.getNumLemmingsMax());
- if (s.length()==1)
- sb.append("0");
- sb.append(s);
- sb.append("% TIME ").append(GameController.getTimeString());
- //BufferedImage iout = LemmFont.strImage(out);
- String n=null;
- if (lemmUnderCursor != null) {
- n = lemmUnderCursor.getName();
- // display also the total number of lemmings under the cursor
- int num = GameController.getLemmsUnderCursor().size();
- if (num > 1)
- n = n + " " + Integer.toString(num);
- }
- if (n!=null) {
- int ln = n.length();
- if (ln>14)
- ln = 14;
- sb.insert(0," ".substring(0, 14-ln));
- sb.insert(0,n);
- } else
- sb.insert(0," ");
- LemmFont.strImage(outStrGfx, sb.toString());
+ it = lemmings.iterator();
+ while (it.hasNext()) {
+ Lemming l = it.next();
+ int lx = l.screenX();
+ int ly = l.screenY();
+ // draw pixel in mini map
+ MiniMap.drawLemming(offGfx, lx, ly);
+ }
+ }
+ Lemming lemmUnderCursor = GameController.lemmUnderCursor(LemmCursor.getType());
+ offGfx.setClip(0,0,w,h);
+ // draw explosions
+ GameController.drawExplosions(offGfx,offImage[0].getWidth(), Level.HEIGHT, xOfsTemp);
+ offGfx.setClip(0,0,w,this.getHeight());
+
+ // draw info string
+ outStrGfx.clearRect(0, 0, outStrImg.getWidth(), outStrImg.getHeight());
+ if (GameController.isCheat()) {
+ Stencil stencil = GameController.getStencil();
+ if (stencil != null) {
+ int stencilVal = stencil.get(xMouse+yMouse*Level.WIDTH);
+ String test = "x: "+xMouse+", y: "+yMouse+", mask: "+(stencilVal&0xffff)+" "+Stencil.getObjectID(stencilVal);
+ LemmFont.strImage(outStrGfx, test);
offGfx.drawImage(outStrImg,4,Level.HEIGHT+8,null);
}
- // replay icon
- BufferedImage replayImage = GameController.getReplayImage();
- if (replayImage != null)
- offGfx.drawImage(replayImage,this.getWidth()-2*replayImage.getWidth(),replayImage.getHeight(),null);
- // draw cursor
+ } else {
+ StringBuffer sb = new StringBuffer();
+ sb.append("OUT ");
+ String s = Integer.toString(GameController.getLemmings().size());
+ sb.append(s);
+ if (s.length()==1)
+ sb.append(" ");
+ sb.append(" IN ");
+ s = Integer.toString(GameController.getNumLeft()*100/GameController.getNumLemmingsMax());
+ if (s.length()==1)
+ sb.append("0");
+ sb.append(s);
+ sb.append("% TIME ").append(GameController.getTimeString());
+ //BufferedImage iout = LemmFont.strImage(out);
+ String n=null;
if (lemmUnderCursor != null) {
- int lx = lemmUnderCursor.midX()-xOfsTemp;
- int ly = lemmUnderCursor.midY();
- BufferedImage cursorImg = LemmCursor.getBoxImage();
- lx -= cursorImg.getWidth()/2;
- ly -= cursorImg.getHeight()/2;
- offGfx.drawImage(cursorImg,lx,ly,null);
+ n = lemmUnderCursor.getName();
+ // display also the total number of lemmings under the cursor
+ int num = GameController.getLemmsUnderCursor().size();
+ if (num > 1)
+ n = n + " " + Integer.toString(num);
}
- //offGfx.drawImage(LemmCursor.getImage(0), LemmCursor.x, LemmCursor.y, null);
+ if (n!=null) {
+ int ln = n.length();
+ if (ln>14)
+ ln = 14;
+ sb.insert(0," ".substring(0, 14-ln));
+ sb.insert(0,n);
+ } else
+ sb.insert(0," ");
+ LemmFont.strImage(outStrGfx, sb.toString());
+ offGfx.drawImage(outStrImg,4,Level.HEIGHT+8,null);
+ }
+ // replay icon
+ BufferedImage replayImage = GameController.getReplayImage();
+ if (replayImage != null)
+ offGfx.drawImage(replayImage,this.getWidth()-2*replayImage.getWidth(),replayImage.getHeight(),null);
+ // draw cursor
+ if (lemmUnderCursor != null) {
+ int lx = lemmUnderCursor.midX()-xOfsTemp;
+ int ly = lemmUnderCursor.midY();
+ BufferedImage cursorImg = LemmCursor.getBoxImage();
+ lx -= cursorImg.getWidth()/2;
+ ly -= cursorImg.getHeight()/2;
+ offGfx.drawImage(cursorImg,lx,ly,null);
}
+ //offGfx.drawImage(LemmCursor.getImage(0), LemmCursor.x, LemmCursor.y, null);
+ }
}
// fader
@@ -1335,6 +1411,7 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
if (timerRepaint.timePassedAdd(GameController.MICROSEC_PER_FRAME)) {
// time passed -> redraw necessary
redraw();
+
// special handling for fast forward or super lemming mode only during real gameplay
if (gameState == GameController.State.LEVEL) {
// in fast forward or super lemming modes, update the game mechanics
@@ -1379,22 +1456,22 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
leftMousePressed = false;
switch (GameController.getGameState()) {
- case LEVEL:
- if (y > iconsY && y < iconsY+Icons.HEIGHT) {
- Icons.Type type = GameController.getIconType(x);
- if (type != Icons.Type.INVALID)
- GameController.releaseIcon(type);
- }
- // always release icons which don't stay pressed
- // this is to avoid the icons get stuck when they're pressed,
- // the the mouse is dragged out and released outside
- GameController.releasePlus(GameController.KEYREPEAT_ICON);
- GameController.releaseMinus(GameController.KEYREPEAT_ICON);
- GameController.releaseIcon(Icons.Type.MINUS);
- GameController.releaseIcon(Icons.Type.PLUS);
- GameController.releaseIcon(Icons.Type.NUKE);
- mouseevent.consume();
- break;
+ case LEVEL:
+ if (y > iconsY && y < iconsY+Icons.HEIGHT) {
+ Icons.Type type = GameController.getIconType(x);
+ if (type != Icons.Type.INVALID)
+ GameController.releaseIcon(type);
+ }
+ // always release icons which don't stay pressed
+ // this is to avoid the icons get stuck when they're pressed,
+ // the the mouse is dragged out and released outside
+ GameController.releasePlus(GameController.KEYREPEAT_ICON);
+ GameController.releaseMinus(GameController.KEYREPEAT_ICON);
+ GameController.releaseIcon(Icons.Type.MINUS);
+ GameController.releaseIcon(Icons.Type.PLUS);
+ GameController.releaseIcon(Icons.Type.NUKE);
+ mouseevent.consume();
+ break;
}
}
@@ -1419,70 +1496,70 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
return;
switch (GameController.getGameState()) {
- case BRIEFING:
- MiniMap.init(smallX, smallY, 16, 8, true);
- GameController.setTransition(GameController.TransitionState.TO_LEVEL);
+ case BRIEFING:
+ MiniMap.init(smallX, smallY, 16, 8, true);
+ GameController.setTransition(GameController.TransitionState.TO_LEVEL);
+ Fader.setState(Fader.State.OUT);
+ mouseevent.consume();
+ break;
+ case DEBRIEFING:
+ int button = TextScreen.getDialog().handleLeftClick(x,y);
+ switch (button) {
+ case TextScreen.BUTTON_CONTINUE:
+ GameController.nextLevel(); // continue to next level
+ GameController.requestChangeLevel(GameController.getCurLevelPackIdx(), GameController.getCurDiffLevel(),
+ GameController.getCurLevelNumber(), false);
+ break;
+ case TextScreen.BUTTON_RESTART:
+ GameController.requestRestartLevel(false);
+ break;
+ case TextScreen.BUTTON_MENU:
+ GameController.setTransition(GameController.TransitionState.TO_INTRO);
Fader.setState(Fader.State.OUT);
- mouseevent.consume();
+ ((JFrame)Core.getCmp()).setTitle("Lemmini");
break;
- case DEBRIEFING:
- int button = TextScreen.getDialog().handleLeftClick(x,y);
- switch (button) {
- case TextScreen.BUTTON_CONTINUE:
- GameController.nextLevel(); // continue to next level
- GameController.requestChangeLevel(GameController.getCurLevelPackIdx(), GameController.getCurDiffLevel(),
- GameController.getCurLevelNumber(), false);
- break;
- case TextScreen.BUTTON_RESTART:
- GameController.requestRestartLevel(false);
- break;
- case TextScreen.BUTTON_MENU:
- GameController.setTransition(GameController.TransitionState.TO_INTRO);
- Fader.setState(Fader.State.OUT);
- ((JFrame)Core.getCmp()).setTitle("Lemmini");
- break;
- case TextScreen.BUTTON_REPLAY:
- GameController.requestRestartLevel(true);
- break;
- case TextScreen.BUTTON_SAVEREPLAY:
- String replayPath = ToolBox.getFileName(Lemmini.thisFrame,Core.resourcePath,Core.REPLAY_EXTENSIONS,false);
- if (replayPath != null) {
- try {
- String ext = ToolBox.getExtension(replayPath);
- if (ext == null)
- replayPath += ".rpl";
- if (GameController.saveReplay(replayPath))
- return;
- // else: no success
- JOptionPane.showMessageDialog(Core.getCmp(), "Error!", "Saving replay failed", JOptionPane.INFORMATION_MESSAGE);
- } catch (Exception ex) {
- ToolBox.showException(ex);
- }
- }
- break;
+ case TextScreen.BUTTON_REPLAY:
+ GameController.requestRestartLevel(true);
+ break;
+ case TextScreen.BUTTON_SAVEREPLAY:
+ String replayPath = ToolBox.getFileName(Lemmini.thisFrame,Core.resourcePath,Core.REPLAY_EXTENSIONS,false);
+ if (replayPath != null) {
+ try {
+ String ext = ToolBox.getExtension(replayPath);
+ if (ext == null)
+ replayPath += ".rpl";
+ if (GameController.saveReplay(replayPath))
+ return;
+ // else: no success
+ JOptionPane.showMessageDialog(Core.getCmp(), "Error!", "Saving replay failed", JOptionPane.INFORMATION_MESSAGE);
+ } catch (Exception ex) {
+ ToolBox.showException(ex);
+ }
}
- mouseevent.consume();
break;
- case LEVEL:
- // debug drawing
- debugDraw(x,y,leftMousePressed);
- if (leftMousePressed) {
- if (y > iconsY && y < iconsY+Icons.HEIGHT) {
- Icons.Type type = GameController.getIconType(x);
- if (type != Icons.Type.INVALID) {
- GameController.handleIconButton(type);
- }
- } else {
- Lemming l = GameController.lemmUnderCursor(LemmCursor.getType());
- if (l != null)
- GameController.requestSkill(l);
+ }
+ mouseevent.consume();
+ break;
+ case LEVEL:
+ // debug drawing
+ debugDraw(x,y,leftMousePressed);
+ if (leftMousePressed) {
+ if (y > iconsY && y < iconsY+Icons.HEIGHT) {
+ Icons.Type type = GameController.getIconType(x);
+ if (type != Icons.Type.INVALID) {
+ GameController.handleIconButton(type);
}
- // check minimap mouse move
- int ofs = MiniMap.move(x,y,this.getWidth());
- if (ofs != -1)
- GameController.setxPos(ofs);
- mouseevent.consume();
+ } else {
+ Lemming l = GameController.lemmUnderCursor(LemmCursor.getType());
+ if (l != null)
+ GameController.requestSkill(l);
}
+ // check minimap mouse move
+ int ofs = MiniMap.move(x,y,this.getWidth());
+ if (ofs != -1)
+ GameController.setxPos(ofs);
+ mouseevent.consume();
+ }
}
}
@@ -1528,36 +1605,36 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
public void mouseExited(final MouseEvent mouseevent) {
int x = xMouseScreen + mouseDx;
switch (GameController.getGameState()) {
- case BRIEFING:
- case DEBRIEFING:
- case LEVEL:
- if (x>=this.getWidth())
- x = this.getWidth()-1;
- if (x<0)
- x = 0;
- xMouseScreen = x;
- x += GameController.getxPos();
- if (x>=Level.WIDTH)
- x = Level.WIDTH-1;
- xMouse = x;
- LemmCursor.setX(xMouseScreen/*-LemmCursor.width/2*/);
-
- int y = yMouseScreen + mouseDy;
- if (y >= this.getHeight())
- y = this.getHeight()-1;
- if (y<0)
- y = 0;
- yMouseScreen = y;
-
- y = yMouse + mouseDy;
- if (y >= Level.HEIGHT)
- y = Level.HEIGHT-1;
- if (y<0)
- y = 0;
- yMouse = y;
- LemmCursor.setY(yMouseScreen/*-LemmCursor.height/2*/);
- mouseevent.consume();
- break;
+ case BRIEFING:
+ case DEBRIEFING:
+ case LEVEL:
+ if (x>=this.getWidth())
+ x = this.getWidth()-1;
+ if (x<0)
+ x = 0;
+ xMouseScreen = x;
+ x += GameController.getxPos();
+ if (x>=Level.WIDTH)
+ x = Level.WIDTH-1;
+ xMouse = x;
+ LemmCursor.setX(xMouseScreen/*-LemmCursor.width/2*/);
+
+ int y = yMouseScreen + mouseDy;
+ if (y >= this.getHeight())
+ y = this.getHeight()-1;
+ if (y<0)
+ y = 0;
+ yMouseScreen = y;
+
+ y = yMouse + mouseDy;
+ if (y >= Level.HEIGHT)
+ y = Level.HEIGHT-1;
+ if (y<0)
+ y = 0;
+ yMouse = y;
+ LemmCursor.setY(yMouseScreen/*-LemmCursor.height/2*/);
+ mouseevent.consume();
+ break;
}
}
@@ -1569,26 +1646,26 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
mouseDy = 0;
// check minimap mouse move
switch (GameController.getGameState()) {
- case LEVEL:
- int x = mouseevent.getX();
- int y = mouseevent.getY();
- if (leftMousePressed) {
- int ofs = MiniMap.move(x,y,this.getWidth());
- if (ofs != -1)
- GameController.setxPos(ofs);
- } else {
- int xOfsTemp = GameController.getxPos() + (x-mouseDragStartX);
- if (xOfsTemp < 0)
- xOfsTemp = 0;
- else if (xOfsTemp >= Level.WIDTH-this.getWidth())
- GameController.setxPos(Level.WIDTH-this.getWidth());
- else GameController.setxPos(xOfsTemp);
- }
- // debug drawing
- debugDraw(x,y,leftMousePressed);
- mouseMoved(mouseevent);
- mouseevent.consume();
- break;
+ case LEVEL:
+ int x = mouseevent.getX();
+ int y = mouseevent.getY();
+ if (leftMousePressed) {
+ int ofs = MiniMap.move(x,y,this.getWidth());
+ if (ofs != -1)
+ GameController.setxPos(ofs);
+ } else {
+ int xOfsTemp = GameController.getxPos() + (x-mouseDragStartX);
+ if (xOfsTemp < 0)
+ xOfsTemp = 0;
+ else if (xOfsTemp >= Level.WIDTH-this.getWidth())
+ GameController.setxPos(Level.WIDTH-this.getWidth());
+ else GameController.setxPos(xOfsTemp);
+ }
+ // debug drawing
+ debugDraw(x,y,leftMousePressed);
+ mouseMoved(mouseevent);
+ mouseevent.consume();
+ break;
}
}
@@ -1624,17 +1701,17 @@ class GraphicsPane extends JPanel implements Runnable, MouseListener, MouseMotio
LemmCursor.setY(yMouseScreen/*-LemmCursor.height/2*/);
switch (GameController.getGameState()) {
- case INTRO:
- case BRIEFING:
- case DEBRIEFING:
- TextScreen.getDialog().handleMouseMove(xMouseScreen, yMouseScreen);
- //$FALL-THROUGH$
- case LEVEL:
- mouseDx = (xMouse - oldX);
- mouseDy = (yMouse - oldY);
- mouseDragStartX = mouseevent.getX();
- mouseevent.consume();
- break;
+ case INTRO:
+ case BRIEFING:
+ case DEBRIEFING:
+ TextScreen.getDialog().handleMouseMove(xMouseScreen, yMouseScreen);
+ //$FALL-THROUGH$
+ case LEVEL:
+ mouseDx = (xMouse - oldX);
+ mouseDy = (yMouse - oldY);
+ mouseDragStartX = mouseevent.getX();
+ mouseevent.consume();
+ break;
}
}