moved camera to separate class
This commit is contained in:
parent
b261be38e0
commit
65ad4ab1f6
@ -60,10 +60,10 @@ public class InteractionCell extends Cell {
|
|||||||
}
|
}
|
||||||
else if (data.contains("<cameraFree>")) {
|
else if (data.contains("<cameraFree>")) {
|
||||||
String[] cameraInfo = data.split(" ");
|
String[] cameraInfo = data.split(" ");
|
||||||
window.getMapPainter().setCameraStart();
|
window.getCamera().setCameraStart();
|
||||||
window.getMapPainter().setCameraBound(false);
|
window.getCamera().setCameraBound(false);
|
||||||
window.getMapPainter().setCameraEnd(Integer.parseInt(cameraInfo[1]), Integer.parseInt(cameraInfo[2]));
|
window.getCamera().setCameraEnd(Integer.parseInt(cameraInfo[1]), Integer.parseInt(cameraInfo[2]));
|
||||||
window.getMapPainter().setCameraSpeed(Integer.parseInt(cameraInfo[3]));
|
window.getCamera().setCameraSpeed(Integer.parseInt(cameraInfo[3]));
|
||||||
readNextLine();
|
readNextLine();
|
||||||
}
|
}
|
||||||
else if (data.contains("<dialog>")) {
|
else if (data.contains("<dialog>")) {
|
||||||
@ -96,8 +96,8 @@ public class InteractionCell extends Cell {
|
|||||||
dialog.hideText();
|
dialog.hideText();
|
||||||
dialog.setImageDialog(null);
|
dialog.setImageDialog(null);
|
||||||
}
|
}
|
||||||
if (!window.getMapPainter().getCameraBound()) {
|
if (!window.getCamera().getCameraBound()) {
|
||||||
window.getMapPainter().returnFreeCamera();
|
window.getCamera().returnFreeCamera();
|
||||||
}
|
}
|
||||||
WindowOfFreeMove.setCanPersonMove(true);
|
WindowOfFreeMove.setCanPersonMove(true);
|
||||||
Person.setInEvent(false);
|
Person.setInEvent(false);
|
||||||
|
|||||||
@ -14,18 +14,10 @@ public class MapPainter {
|
|||||||
private WindowOfFreeMove.Canvas canvas;
|
private WindowOfFreeMove.Canvas canvas;
|
||||||
private LinkedList<Map> maps;
|
private LinkedList<Map> maps;
|
||||||
private Map actualMap;
|
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<Map> maps, WindowOfFreeMove.Canvas canvas) {
|
public MapPainter(LinkedList<Map> maps, WindowOfFreeMove.Canvas canvas) {
|
||||||
this.canvas = canvas;
|
this.canvas = canvas;
|
||||||
this.maps = maps;
|
this.maps = maps;
|
||||||
this.isCameraBound = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMap(Map map) {
|
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() {
|
public void repaintCanvas() {
|
||||||
canvas.repaint();
|
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; }
|
|
||||||
}
|
}
|
||||||
|
|||||||
127
src/main/java/ruscz/game/gameOfProd/Windows/Camera.java
Normal file
127
src/main/java/ruscz/game/gameOfProd/Windows/Camera.java
Normal file
@ -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; }
|
||||||
|
}
|
||||||
@ -33,6 +33,7 @@ public class WindowOfFreeMove extends JFrame {
|
|||||||
private Canvas canvas;
|
private Canvas canvas;
|
||||||
private DialogBar dialogBar;
|
private DialogBar dialogBar;
|
||||||
private MapPainter mapPainter;
|
private MapPainter mapPainter;
|
||||||
|
private Camera camera;
|
||||||
private Timer inputTimer;
|
private Timer inputTimer;
|
||||||
|
|
||||||
private LinkedList<Map> mapLinkedList;
|
private LinkedList<Map> mapLinkedList;
|
||||||
@ -69,12 +70,15 @@ public class WindowOfFreeMove extends JFrame {
|
|||||||
return mapLinkedList;
|
return mapLinkedList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Camera getCamera() { return camera; }
|
||||||
|
|
||||||
public WindowOfFreeMove() {
|
public WindowOfFreeMove() {
|
||||||
isReadyToPaint = false;
|
isReadyToPaint = false;
|
||||||
canPersonMove = true;
|
canPersonMove = true;
|
||||||
JLayeredPane lp = getLayeredPane();
|
JLayeredPane lp = getLayeredPane();
|
||||||
|
|
||||||
canvas = new Canvas();
|
canvas = new Canvas();
|
||||||
|
camera = new Camera(this, canvas);
|
||||||
canvas.setBackground(Color.black);
|
canvas.setBackground(Color.black);
|
||||||
canvas.setPreferredSize(new Dimension(
|
canvas.setPreferredSize(new Dimension(
|
||||||
CELL_SIZE * CANVAS_WIDTH,
|
CELL_SIZE * CANVAS_WIDTH,
|
||||||
@ -194,7 +198,7 @@ public class WindowOfFreeMove extends JFrame {
|
|||||||
|
|
||||||
setMapPainter(m5);
|
setMapPainter(m5);
|
||||||
|
|
||||||
mapPainter.moveCamera();
|
camera.moveCamera();
|
||||||
mapPainter.createMap();
|
mapPainter.createMap();
|
||||||
isReadyToPaint = true;
|
isReadyToPaint = true;
|
||||||
canvas.repaint();
|
canvas.repaint();
|
||||||
@ -204,7 +208,7 @@ public class WindowOfFreeMove extends JFrame {
|
|||||||
|
|
||||||
Timer timer = new Timer(10, actionEvent -> {
|
Timer timer = new Timer(10, actionEvent -> {
|
||||||
mapPainter.getActualMap().getPerson().move();
|
mapPainter.getActualMap().getPerson().move();
|
||||||
mapPainter.moveCamera();
|
camera.moveCamera();
|
||||||
canvas.repaint();
|
canvas.repaint();
|
||||||
});
|
});
|
||||||
timer.start();
|
timer.start();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user