From 65ad4ab1f65280247649b6a47590128d92fc5672 Mon Sep 17 00:00:00 2001 From: musilto9 Date: Tue, 24 Mar 2020 18:46:37 +0100 Subject: [PATCH] moved camera to separate class --- .../gameOfProd/Cells/InteractionCell.java | 12 +- .../ruscz/game/gameOfProd/Map/MapPainter.java | 114 ---------------- .../ruscz/game/gameOfProd/Windows/Camera.java | 127 ++++++++++++++++++ .../gameOfProd/Windows/WindowOfFreeMove.java | 8 +- 4 files changed, 139 insertions(+), 122 deletions(-) create mode 100644 src/main/java/ruscz/game/gameOfProd/Windows/Camera.java diff --git a/src/main/java/ruscz/game/gameOfProd/Cells/InteractionCell.java b/src/main/java/ruscz/game/gameOfProd/Cells/InteractionCell.java index 3eeee5b..4183b5c 100644 --- a/src/main/java/ruscz/game/gameOfProd/Cells/InteractionCell.java +++ b/src/main/java/ruscz/game/gameOfProd/Cells/InteractionCell.java @@ -60,10 +60,10 @@ public class InteractionCell extends Cell { } else if (data.contains("")) { String[] cameraInfo = data.split(" "); - window.getMapPainter().setCameraStart(); - window.getMapPainter().setCameraBound(false); - window.getMapPainter().setCameraEnd(Integer.parseInt(cameraInfo[1]), Integer.parseInt(cameraInfo[2])); - window.getMapPainter().setCameraSpeed(Integer.parseInt(cameraInfo[3])); + window.getCamera().setCameraStart(); + window.getCamera().setCameraBound(false); + window.getCamera().setCameraEnd(Integer.parseInt(cameraInfo[1]), Integer.parseInt(cameraInfo[2])); + window.getCamera().setCameraSpeed(Integer.parseInt(cameraInfo[3])); readNextLine(); } else if (data.contains("")) { @@ -96,8 +96,8 @@ public class InteractionCell extends Cell { dialog.hideText(); dialog.setImageDialog(null); } - if (!window.getMapPainter().getCameraBound()) { - window.getMapPainter().returnFreeCamera(); + if (!window.getCamera().getCameraBound()) { + window.getCamera().returnFreeCamera(); } WindowOfFreeMove.setCanPersonMove(true); Person.setInEvent(false); diff --git a/src/main/java/ruscz/game/gameOfProd/Map/MapPainter.java b/src/main/java/ruscz/game/gameOfProd/Map/MapPainter.java index ddd5b41..7aa1e37 100644 --- a/src/main/java/ruscz/game/gameOfProd/Map/MapPainter.java +++ b/src/main/java/ruscz/game/gameOfProd/Map/MapPainter.java @@ -14,18 +14,10 @@ public class MapPainter { private WindowOfFreeMove.Canvas canvas; private LinkedList maps; private Map actualMap; - private boolean isCameraBound; - private int cameraEndX; - private int cameraEndY; - private int cameraSpeed; - private int cameraStartX; - private int cameraStartY; - private boolean isCameraReturning; public MapPainter(LinkedList maps, WindowOfFreeMove.Canvas canvas) { this.canvas = canvas; this.maps = maps; - this.isCameraBound = true; } public void setMap(Map map) { @@ -97,113 +89,7 @@ public class MapPainter { } } - public void moveCamera() { - if (isCameraBound) { - moveBoundCamera(); - } - else { - moveFreeCamera(); - } - } - - public void moveBoundCamera() { - int cameraOffsetX = (-1) * CELL_SIZE * (getActualMap().getPerson().getX() - WINDOW_WIDTH / 2); - int cameraOffsetY = (-1) * CELL_SIZE * (getActualMap().getPerson().getY() - WINDOW_HEIGHT / 2); - int direction = getActualMap().getPerson().getDirectionMoveLast(); - int size = -getActualMap().getPerson().getSize(); - int Ysize = 0; - int Xsize = 0; - switch (direction) { - case WindowOfFreeMove.KEY_LEFT: - Xsize = size; - break; - case WindowOfFreeMove.KEY_RIGHT: - Xsize -= size; - break; - case WindowOfFreeMove.KEY_UP: - Ysize = size; - break; - case WindowOfFreeMove.KEY_DOWN: - Ysize -= size; - break; - } - if (!getActualMap().getPerson().getIsMoving()) { - Xsize = 0; - Ysize = 0; - } - if (cameraOffsetX + Xsize >= 0 || cameraOffsetX > 0) { - cameraOffsetX = 0; - Xsize = 0; - } - else if (CELL_SIZE * WINDOW_WIDTH - (cameraOffsetX + Xsize) >= CELL_SIZE * CANVAS_WIDTH || CELL_SIZE * WINDOW_WIDTH - cameraOffsetX > CELL_SIZE * CANVAS_WIDTH) { - cameraOffsetX = (-1) * (CELL_SIZE * CANVAS_WIDTH - CELL_SIZE * WINDOW_WIDTH); - Xsize = 0; - } - if (cameraOffsetY + Ysize >= 0 || cameraOffsetY > 0) { - cameraOffsetY = 0; - Ysize = 0; - } - else if (CELL_SIZE * WINDOW_HEIGHT - (cameraOffsetY + Ysize) >= CELL_SIZE * CANVAS_HEIGHT || CELL_SIZE * WINDOW_HEIGHT - cameraOffsetY > CELL_SIZE * CANVAS_HEIGHT) { - cameraOffsetY = (-1) * (CELL_SIZE * CANVAS_HEIGHT - CELL_SIZE * WINDOW_HEIGHT); - Ysize = 0; - } - canvas.setLocation(cameraOffsetX + Xsize, cameraOffsetY + Ysize); - } - - public void moveFreeCamera() { - int coordX = (int) (canvas.getLocation().getX()); - int coordY = (int) (canvas.getLocation().getY()); - if (coordX != cameraEndX || coordY != cameraEndY) { - int distanceX = cameraEndX - cameraStartX; - int distanceY = cameraEndY - cameraStartY; - int stepX = distanceX * cameraSpeed / CELL_SIZE; - int stepY = distanceY * cameraSpeed / CELL_SIZE; - canvas.setLocation(coordX + stepX, coordY + stepY); - } - if (coordX == cameraEndX && coordY == cameraEndY && isCameraReturning) { - isCameraBound = true; - } - } - - public void returnFreeCamera() { - setCameraStart(); - cameraEndX = (-1) * CELL_SIZE * (getActualMap().getPerson().getX() - WINDOW_WIDTH / 2); - cameraEndY = (-1) * CELL_SIZE * (getActualMap().getPerson().getY() - WINDOW_HEIGHT / 2); - if (cameraEndX > 0) { - cameraEndX = 0; - } - else if (CELL_SIZE * WINDOW_WIDTH - cameraEndX > CELL_SIZE * CANVAS_WIDTH) { - cameraEndX = (-1) * (CELL_SIZE * CANVAS_WIDTH - CELL_SIZE * WINDOW_WIDTH); - } - if (cameraEndY > 0) { - cameraEndY = 0; - } - else if (CELL_SIZE * WINDOW_WIDTH - cameraEndY > CELL_SIZE * CANVAS_WIDTH) { - cameraEndY = (-1) * (CELL_SIZE * CANVAS_HEIGHT - CELL_SIZE * WINDOW_HEIGHT); - } - cameraSpeed = 1; - isCameraReturning = true; - } - public void repaintCanvas() { canvas.repaint(); } - - public void setCameraStart() { - this.cameraStartX = (int) (canvas.getLocation().getX()); - this.cameraStartY = (int) (canvas.getLocation().getY()); - } - - public void setCameraEnd(int x, int y) { - this.cameraEndX = x; - this.cameraEndY = y; - } - - public void setCameraSpeed(int speed) { - this.cameraSpeed = speed; - } - - public void setCameraBound(boolean bound) { this.isCameraBound = bound; } - - public boolean getCameraBound() {return isCameraBound; } } diff --git a/src/main/java/ruscz/game/gameOfProd/Windows/Camera.java b/src/main/java/ruscz/game/gameOfProd/Windows/Camera.java new file mode 100644 index 0000000..64f552f --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/Windows/Camera.java @@ -0,0 +1,127 @@ +package ruscz.game.gameOfProd.Windows; + +import static ruscz.game.gameOfProd.Windows.WindowOfFreeMove.*; + +public class Camera { + private WindowOfFreeMove window; + private WindowOfFreeMove.Canvas canvas; + private boolean isBound; + private int endX; + private int endY; + private int speed; + private int startX; + private int startY; + private boolean isReturning; + + public Camera(WindowOfFreeMove window, WindowOfFreeMove.Canvas canvas) { + this.window = window; + this.canvas = canvas; + this.isBound = true; + } + + public void moveCamera() { + if (isBound) { + moveBoundCamera(); + } + else { + moveFreeCamera(); + } + } + + public void moveBoundCamera() { + int cameraOffsetX = (-1) * CELL_SIZE * (window.getMapPainter().getActualMap().getPerson().getX() - WINDOW_WIDTH / 2); + int cameraOffsetY = (-1) * CELL_SIZE * (window.getMapPainter().getActualMap().getPerson().getY() - WINDOW_HEIGHT / 2); + int direction = window.getMapPainter().getActualMap().getPerson().getDirectionMoveLast(); + int size = (-1) * window.getMapPainter().getActualMap().getPerson().getSize(); + int Ysize = 0; + int Xsize = 0; + switch (direction) { + case WindowOfFreeMove.KEY_LEFT: + Xsize = size; + break; + case WindowOfFreeMove.KEY_RIGHT: + Xsize -= size; + break; + case WindowOfFreeMove.KEY_UP: + Ysize = size; + break; + case WindowOfFreeMove.KEY_DOWN: + Ysize -= size; + break; + } + if (!window.getMapPainter().getActualMap().getPerson().getIsMoving()) { + Xsize = 0; + Ysize = 0; + } + if (cameraOffsetX + Xsize >= 0 || cameraOffsetX > 0) { + cameraOffsetX = 0; + Xsize = 0; + } + else if (CELL_SIZE * WINDOW_WIDTH - (cameraOffsetX + Xsize) >= CELL_SIZE * CANVAS_WIDTH || CELL_SIZE * WINDOW_WIDTH - cameraOffsetX > CELL_SIZE * CANVAS_WIDTH) { + cameraOffsetX = (-1) * (CELL_SIZE * CANVAS_WIDTH - CELL_SIZE * WINDOW_WIDTH); + Xsize = 0; + } + if (cameraOffsetY + Ysize >= 0 || cameraOffsetY > 0) { + cameraOffsetY = 0; + Ysize = 0; + } + else if (CELL_SIZE * WINDOW_HEIGHT - (cameraOffsetY + Ysize) >= CELL_SIZE * CANVAS_HEIGHT || CELL_SIZE * WINDOW_HEIGHT - cameraOffsetY > CELL_SIZE * CANVAS_HEIGHT) { + cameraOffsetY = (-1) * (CELL_SIZE * CANVAS_HEIGHT - CELL_SIZE * WINDOW_HEIGHT); + Ysize = 0; + } + canvas.setLocation(cameraOffsetX + Xsize, cameraOffsetY + Ysize); + } + + public void moveFreeCamera() { + int coordX = (int) (canvas.getLocation().getX()); + int coordY = (int) (canvas.getLocation().getY()); + if (coordX != endX || coordY != endY) { + int distanceX = endX - startX; + int distanceY = endY - startY; + int stepX = distanceX * speed / CELL_SIZE; + int stepY = distanceY * speed / CELL_SIZE; + canvas.setLocation(coordX + stepX, coordY + stepY); + } + if (coordX == endX && coordY == endY && isReturning) { + isBound = true; + } + } + + public void returnFreeCamera() { + setCameraStart(); + endX = (-1) * CELL_SIZE * (window.getMapPainter().getActualMap().getPerson().getX() - WINDOW_WIDTH / 2); + endY = (-1) * CELL_SIZE * (window.getMapPainter().getActualMap().getPerson().getY() - WINDOW_HEIGHT / 2); + if (endX > 0) { + endX = 0; + } + else if (CELL_SIZE * WINDOW_WIDTH - endX > CELL_SIZE * CANVAS_WIDTH) { + endX = (-1) * (CELL_SIZE * CANVAS_WIDTH - CELL_SIZE * WINDOW_WIDTH); + } + if (endY > 0) { + endY = 0; + } + else if (CELL_SIZE * WINDOW_WIDTH - endY > CELL_SIZE * CANVAS_WIDTH) { + endY = (-1) * (CELL_SIZE * CANVAS_HEIGHT - CELL_SIZE * WINDOW_HEIGHT); + } + speed = 1; + isReturning = true; + } + + public void setCameraStart() { + this.startX = (int) (canvas.getLocation().getX()); + this.startY = (int) (canvas.getLocation().getY()); + } + + public void setCameraEnd(int x, int y) { + this.endX = x; + this.endY = y; + } + + public void setCameraSpeed(int speed) { + this.speed = speed; + } + + public void setCameraBound(boolean bound) { this.isBound = bound; } + + public boolean getCameraBound() {return isBound; } +} diff --git a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfFreeMove.java b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfFreeMove.java index 2dc51b5..705fc01 100644 --- a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfFreeMove.java +++ b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfFreeMove.java @@ -33,6 +33,7 @@ public class WindowOfFreeMove extends JFrame { private Canvas canvas; private DialogBar dialogBar; private MapPainter mapPainter; + private Camera camera; private Timer inputTimer; private LinkedList mapLinkedList; @@ -69,12 +70,15 @@ public class WindowOfFreeMove extends JFrame { return mapLinkedList; } + public Camera getCamera() { return camera; } + public WindowOfFreeMove() { isReadyToPaint = false; canPersonMove = true; JLayeredPane lp = getLayeredPane(); canvas = new Canvas(); + camera = new Camera(this, canvas); canvas.setBackground(Color.black); canvas.setPreferredSize(new Dimension( CELL_SIZE * CANVAS_WIDTH, @@ -194,7 +198,7 @@ public class WindowOfFreeMove extends JFrame { setMapPainter(m5); - mapPainter.moveCamera(); + camera.moveCamera(); mapPainter.createMap(); isReadyToPaint = true; canvas.repaint(); @@ -204,7 +208,7 @@ public class WindowOfFreeMove extends JFrame { Timer timer = new Timer(10, actionEvent -> { mapPainter.getActualMap().getPerson().move(); - mapPainter.moveCamera(); + camera.moveCamera(); canvas.repaint(); }); timer.start();