superclass implements KeyListener

This commit is contained in:
Daniel Langbein 2024-11-07 18:54:47 +01:00
parent 2247c7f43d
commit 59a7ecff2e
Signed by: langfingaz
GPG Key ID: 6C47C753F0823002
3 changed files with 124 additions and 96 deletions

View File

@ -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.
}
}

View File

@ -15,7 +15,7 @@ import java.awt.event.KeyListener;
* @author Colin Leverger <me@colinleverger.fr> * @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19 * @since 2015-06-19
*/ */
public class GameKeyController extends AbstractLevelController implements KeyListener { public class GameKeyController extends AbstractKeyController {
private RockfordUpdateController updatePosRockford; private RockfordUpdateController updatePosRockford;
/** /**
@ -29,61 +29,60 @@ public class GameKeyController extends AbstractLevelController implements KeyLis
this.updatePosRockford = new RockfordUpdateController(levelModel); this.updatePosRockford = new RockfordUpdateController(levelModel);
} }
/** @Override
* Handles the 'key pressed' event protected void handleKey(final int keyCode) {
*
* @param e Key event
*/
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) { switch (keyCode) {
// Direction: UP
case KeyEvent.VK_UP: case KeyEvent.VK_UP:
DisplayableElementModel upElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() - 1]; up();
if (upElement.getPriority() < levelModel.getRockford().getPriority()) {
this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() - 1);
this.levelModel.getRockford().startRunningUp();
}
break; break;
// Direction: DOWN
case KeyEvent.VK_DOWN: case KeyEvent.VK_DOWN:
DisplayableElementModel downElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX()][levelModel.getRockfordPositionY() + 1]; down();
if (downElement.getPriority() < levelModel.getRockford().getPriority()) {
this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX(), levelModel.getRockfordPositionY() + 1);
this.levelModel.getRockford().startRunningDown();
}
break; break;
// Direction: LEFT
case KeyEvent.VK_LEFT: case KeyEvent.VK_LEFT:
DisplayableElementModel leftElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() - 1][levelModel.getRockfordPositionY()]; left();
if (leftElement.getPriority() < levelModel.getRockford().getPriority()) {
this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() - 1, levelModel.getRockfordPositionY());
this.levelModel.getRockford().startRunningLeft();
}
break; break;
// Direction: RIGHT
case KeyEvent.VK_RIGHT: case KeyEvent.VK_RIGHT:
DisplayableElementModel rightElement = levelModel.getGroundLevelModel()[levelModel.getRockfordPositionX() + 1][levelModel.getRockfordPositionY()]; right();
if (rightElement.getPriority() < levelModel.getRockford().getPriority()) {
this.updatePosRockford.moveRockford(levelModel.getRockfordPositionX() + 1, levelModel.getRockfordPositionY());
this.levelModel.getRockford().startRunningRight();
}
break; 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 * Handles the 'key released' event
* *
@ -93,14 +92,4 @@ public class GameKeyController extends AbstractLevelController implements KeyLis
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
this.levelModel.getRockford().startStaying(); this.levelModel.getRockford().startStaying();
} }
/**
* Handles the 'key typed' event
*
* @param e Key event
*/
@Override
public void keyTyped(KeyEvent e) {
// Do nothing.
}
} }

View File

@ -15,7 +15,7 @@ import java.awt.event.KeyListener;
* @author Valerian Saliou <valerian@valeriansaliou.name> * @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-21 * @since 2015-06-21
*/ */
public class LevelEditorKeyController extends AbstractLevelController implements KeyListener { public class LevelEditorKeyController extends AbstractKeyController {
private LevelEditorView levelEditorView; private LevelEditorView levelEditorView;
private boolean capLocks; private boolean capLocks;
@ -31,68 +31,61 @@ public class LevelEditorKeyController extends AbstractLevelController implements
this.levelEditorView = levelEditorView; this.levelEditorView = levelEditorView;
} }
/** @Override
* Handles the 'key pressed' event protected void handleKey(final int keyCode) {
*
* @param e Key event
*/
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) { switch (keyCode) {
// Direction: UP
case KeyEvent.VK_UP: case KeyEvent.VK_UP:
this.levelModel.decrementCursorYPosition(); up();
break; break;
// Direction: DOWN
case KeyEvent.VK_DOWN: case KeyEvent.VK_DOWN:
this.levelModel.incrementCursorYPosition(); down();
break; break;
// Direction: LEFT
case KeyEvent.VK_LEFT: case KeyEvent.VK_LEFT:
this.levelModel.decrementCursorXPosition(); left();
break; break;
// Direction: RIGHT
case KeyEvent.VK_RIGHT: case KeyEvent.VK_RIGHT:
this.levelModel.incrementCursorXPosition(); right();
break; break;
// Key: SPACE
case KeyEvent.VK_SPACE: case KeyEvent.VK_SPACE:
this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue()); space();
break; break;
case KeyEvent.VK_SHIFT:
case 16: shift();
this.capLocks = !capLocks;
break; break;
} }
}
@Override
protected void additionalSteps() {
// Hold block change (quick edit) // Hold block change (quick edit)
if (capLocks) { if (capLocks) {
this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue()); this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue());
} }
} }
/** private void shift() {
* Handles the 'key released' event this.capLocks = !capLocks;
*
* @param e Key event
*/
@Override
public void keyReleased(KeyEvent e) {
// Do nothing.
} }
/** private void space() {
* Handles the 'key typed' event this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue());
*
* @param e Key event
*/
@Override
public void keyTyped(KeyEvent e) {
// Do nothing.
} }
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;
}
} }