diff --git a/src/fr/enssat/BoulderDash/controllers/AbstractKeyController.java b/src/fr/enssat/BoulderDash/controllers/AbstractKeyController.java new file mode 100644 index 00000000..aea60a86 --- /dev/null +++ b/src/fr/enssat/BoulderDash/controllers/AbstractKeyController.java @@ -0,0 +1,46 @@ +package fr.enssat.BoulderDash.controllers; + +import fr.enssat.BoulderDash.models.LevelModel; + +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +public abstract class AbstractKeyController extends AbstractLevelController implements KeyListener { + public AbstractKeyController(LevelModel levelModel) { + super(levelModel); + } + + /** + * Handles the 'key pressed' event + * + * @param e Key event + */ + public void keyPressed(KeyEvent e) { + handleKey(e.getKeyCode()); + additionalSteps(); + } + + protected abstract void handleKey(final int keyCode); + + protected void additionalSteps(){} + + /** + * Handles the 'key released' event + * + * @param e Key event + */ + @Override + public void keyReleased(KeyEvent e) { + // Do nothing. + } + + /** + * Handles the 'key typed' event + * + * @param e Key event + */ + @Override + public void keyTyped(KeyEvent e) { + // Do nothing. + } +} diff --git a/src/fr/enssat/BoulderDash/controllers/GameKeyController.java b/src/fr/enssat/BoulderDash/controllers/GameKeyController.java index 45fb0b0e..b791b5b8 100644 --- a/src/fr/enssat/BoulderDash/controllers/GameKeyController.java +++ b/src/fr/enssat/BoulderDash/controllers/GameKeyController.java @@ -15,7 +15,7 @@ import java.awt.event.KeyListener; * @author Colin Leverger * @since 2015-06-19 */ -public class GameKeyController extends AbstractLevelController implements KeyListener { +public class GameKeyController extends AbstractKeyController { private RockfordUpdateController updatePosRockford; /** @@ -29,61 +29,60 @@ public class GameKeyController extends AbstractLevelController implements KeyLis this.updatePosRockford = new RockfordUpdateController(levelModel); } - /** - * Handles the 'key pressed' event - * - * @param e Key event - */ - public void keyPressed(KeyEvent e) { - int keyCode = e.getKeyCode(); - + @Override + protected void handleKey(final int keyCode) { switch (keyCode) { - // Direction: UP case KeyEvent.VK_UP: - DisplayableElementModel upElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() - 1]; - - if (upElement.getPriority() < levelModel.getRockford().getPriority()) { - this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() - 1); - this.levelModel.getRockford().startRunningUp(); - } - + up(); break; - - // Direction: DOWN case KeyEvent.VK_DOWN: - DisplayableElementModel downElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() + 1]; - - if (downElement.getPriority() < levelModel.getRockford().getPriority()) { - this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() + 1); - this.levelModel.getRockford().startRunningDown(); - } - + down(); break; - - // Direction: LEFT case KeyEvent.VK_LEFT: - DisplayableElementModel leftElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() - 1][levelModel.getRockfordPositionY()]; - - if (leftElement.getPriority() < levelModel.getRockford().getPriority()) { - this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() - 1, levelModel.getRockfordPositionY()); - this.levelModel.getRockford().startRunningLeft(); - } - + left(); break; - - // Direction: RIGHT case KeyEvent.VK_RIGHT: - DisplayableElementModel rightElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() + 1][levelModel.getRockfordPositionY()]; - - if (rightElement.getPriority() < levelModel.getRockford().getPriority()) { - this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() + 1, levelModel.getRockfordPositionY()); - this.levelModel.getRockford().startRunningRight(); - } - + right(); break; } } + private void right() { + DisplayableElementModel rightElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() + 1][levelModel.getRockfordPositionY()]; + + if (rightElement.getPriority() < levelModel.getRockford().getPriority()) { + this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() + 1, levelModel.getRockfordPositionY()); + this.levelModel.getRockford().startRunningRight(); + } + } + + private void left() { + DisplayableElementModel leftElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() - 1][levelModel.getRockfordPositionY()]; + + if (leftElement.getPriority() < levelModel.getRockford().getPriority()) { + this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() - 1, levelModel.getRockfordPositionY()); + this.levelModel.getRockford().startRunningLeft(); + } + } + + private void down() { + DisplayableElementModel downElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() + 1]; + + if (downElement.getPriority() < levelModel.getRockford().getPriority()) { + this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() + 1); + this.levelModel.getRockford().startRunningDown(); + } + } + + private void up() { + DisplayableElementModel upElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() - 1]; + + if (upElement.getPriority() < levelModel.getRockford().getPriority()) { + this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() - 1); + this.levelModel.getRockford().startRunningUp(); + } + } + /** * Handles the 'key released' event * @@ -93,14 +92,4 @@ public class GameKeyController extends AbstractLevelController implements KeyLis public void keyReleased(KeyEvent e) { this.levelModel.getRockford().startStaying(); } - - /** - * Handles the 'key typed' event - * - * @param e Key event - */ - @Override - public void keyTyped(KeyEvent e) { - // Do nothing. - } } diff --git a/src/fr/enssat/BoulderDash/controllers/LevelEditorKeyController.java b/src/fr/enssat/BoulderDash/controllers/LevelEditorKeyController.java index 6308b6eb..3883cb95 100644 --- a/src/fr/enssat/BoulderDash/controllers/LevelEditorKeyController.java +++ b/src/fr/enssat/BoulderDash/controllers/LevelEditorKeyController.java @@ -15,7 +15,7 @@ import java.awt.event.KeyListener; * @author Valerian Saliou * @since 2015-06-21 */ -public class LevelEditorKeyController extends AbstractLevelController implements KeyListener { +public class LevelEditorKeyController extends AbstractKeyController { private LevelEditorView levelEditorView; private boolean capLocks; @@ -31,68 +31,61 @@ public class LevelEditorKeyController extends AbstractLevelController implements this.levelEditorView = levelEditorView; } - /** - * Handles the 'key pressed' event - * - * @param e Key event - */ - public void keyPressed(KeyEvent e) { - int keyCode = e.getKeyCode(); - + @Override + protected void handleKey(final int keyCode) { switch (keyCode) { - // Direction: UP case KeyEvent.VK_UP: - this.levelModel.decrementCursorYPosition(); + up(); break; - - // Direction: DOWN case KeyEvent.VK_DOWN: - this.levelModel.incrementCursorYPosition(); + down(); break; - - // Direction: LEFT case KeyEvent.VK_LEFT: - this.levelModel.decrementCursorXPosition(); + left(); break; - - // Direction: RIGHT case KeyEvent.VK_RIGHT: - this.levelModel.incrementCursorXPosition(); + right(); break; - - // Key: SPACE case KeyEvent.VK_SPACE: - this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue()); + space(); break; - - case 16: - this.capLocks = !capLocks; + case KeyEvent.VK_SHIFT: + shift(); break; } + } + @Override + protected void additionalSteps() { // Hold block change (quick edit) if (capLocks) { this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue()); } } - /** - * Handles the 'key released' event - * - * @param e Key event - */ - @Override - public void keyReleased(KeyEvent e) { - // Do nothing. + private void shift() { + this.capLocks = !capLocks; } - /** - * Handles the 'key typed' event - * - * @param e Key event - */ - @Override - public void keyTyped(KeyEvent e) { - // Do nothing. + private void space() { + this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue()); } + + private void right() { + this.levelModel.incrementCursorXPosition(); + } + + private void left() { + this.levelModel.decrementCursorXPosition(); + } + + private void down() { + this.levelModel.incrementCursorYPosition(); + } + + private void up() { + this.levelModel.decrementCursorYPosition(); + return; + } + }