summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNao Pross <naopross@thearcway.org>2018-11-20 21:01:01 +0100
committerNao Pross <naopross@thearcway.org>2018-11-20 21:41:17 +0100
commitee6818234a28a63dca52f615d9fa57c7925e6149 (patch)
tree911b0ac6e9eaf8e58a984a65135517f6c8586fbe
parentCorrect BufferStrategy rendering (diff)
downloadSubconscious-java-ee6818234a28a63dca52f615d9fa57c7925e6149.tar.gz
Subconscious-java-ee6818234a28a63dca52f615d9fa57c7925e6149.zip
Refractor MapScene.render() AffineTransforms
-rw-r--r--src/subconscious/graphics/BattleScene.java3
-rw-r--r--src/subconscious/graphics/MapEditorScene.java3
-rw-r--r--src/subconscious/graphics/MapScene.java45
3 files changed, 32 insertions, 19 deletions
diff --git a/src/subconscious/graphics/BattleScene.java b/src/subconscious/graphics/BattleScene.java
index b1def18..0252dec 100644
--- a/src/subconscious/graphics/BattleScene.java
+++ b/src/subconscious/graphics/BattleScene.java
@@ -23,6 +23,7 @@ import java.awt.event.ActionListener;
import java.awt.image.BufferStrategy;
import java.awt.geom.Point2D;
+import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import javax.swing.JFrame;
@@ -38,6 +39,8 @@ public class BattleScene extends MapScene implements ActionListener {
NONE, ATTACK, MOVE
};
+ private AffineTransform tx = new AffineTransform();
+
// TODO: refractor, make Points()
private int previousX = -1;
private int previousY = -1;
diff --git a/src/subconscious/graphics/MapEditorScene.java b/src/subconscious/graphics/MapEditorScene.java
index 17e3c0c..edf9323 100644
--- a/src/subconscious/graphics/MapEditorScene.java
+++ b/src/subconscious/graphics/MapEditorScene.java
@@ -20,6 +20,7 @@ import java.awt.event.ActionListener;
import java.awt.image.BufferStrategy;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
+import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import javax.swing.JFrame;
@@ -34,6 +35,7 @@ import javax.swing.JCheckBox;
import java.lang.Integer;
+
@SuppressWarnings("serial")
public class MapEditorScene extends MapScene implements ActionListener {
private Tile.Type placingTile = Tile.Type.CLEAR;
@@ -41,6 +43,7 @@ public class MapEditorScene extends MapScene implements ActionListener {
private ArrayList<Object> actorFields = new ArrayList<>();
private JFrame actorFrame;
private boolean nukeActor = false;
+ private AffineTransform tx = new AffineTransform();
public MapEditorScene() {
super();
diff --git a/src/subconscious/graphics/MapScene.java b/src/subconscious/graphics/MapScene.java
index db12f63..a16fcf3 100644
--- a/src/subconscious/graphics/MapScene.java
+++ b/src/subconscious/graphics/MapScene.java
@@ -36,7 +36,11 @@ public abstract class MapScene extends Scene {
// used for rendering
protected int tileSize;
protected int shorterCanvasLenght;
- protected AffineTransform tx = new AffineTransform();
+
+ protected AffineTransform applyZoomTx = new AffineTransform();
+ protected AffineTransform applyPanTx = new AffineTransform();
+ protected AffineTransform undoZoomTx;
+ protected AffineTransform undoPanTx;
// used for panning
protected Point pan = new Point(0, 0);
@@ -183,44 +187,47 @@ public abstract class MapScene extends Scene {
g.setColor(Palette.BLACK);
g.fillRect(0, 0, this.canvasSize.width, this.canvasSize.height);
- // zoom
+ // update zoom transform
if (this.zooming) {
- Point2D p1 = new Point2D.Double(this.mouse.x, this.mouse.y);
- Point2D p2 = null;
+ Point2D center = new Point2D.Double(this.mouse.x, this.mouse.y);
+ Point2D restore = null;
try {
- p2 = tx.inverseTransform(p1, null);
+ restore = this.applyZoomTx.inverseTransform(center, null);
} catch (NoninvertibleTransformException ex) {
ex.printStackTrace();
}
- this.tx.setToIdentity();
- this.tx.translate(p1.getX(), p1.getY());
- this.tx.scale(this.zoom, this.zoom);
- this.tx.translate(-p2.getX(), -p2.getY());
+ this.applyZoomTx.setToIdentity();
+ this.applyZoomTx.translate(center.getX(), center.getY());
+ this.applyZoomTx.scale(this.zoom, this.zoom);
+ this.applyZoomTx.translate(-restore.getX(), -restore.getY());
this.zooming = false;
}
- // pan
+ // update pan transform
if (this.panning) {
- this.tx.translate(this.pan.x/this.zoom, this.pan.y/this.zoom);
+ this.applyPanTx.translate(this.pan.x/this.zoom, this.pan.y/this.zoom);
this.panning = false;
this.pan.move(0, 0);
}
-
- g.transform(this.tx);
-
- this.renderTiles(g);
- this.renderActors(g);
- // Restore absolute coordinates
+ // update inverese transform
try {
- g.transform(this.tx.createInverse());
+ this.undoPanTx = this.applyPanTx.createInverse();
+ this.undoZoomTx = this.applyZoomTx.createInverse();
} catch (NoninvertibleTransformException ex) {
ex.printStackTrace();
}
-
+
+ // draw
+ g.transform(this.applyZoomTx);
+ g.transform(this.applyPanTx);
+ this.renderTiles(g);
+ this.renderActors(g);
+ g.transform(this.undoPanTx);
+ g.transform(this.undoZoomTx);
}
@Override