From 28dfb26329afd1a6a46fa67a4113306b88785d5d Mon Sep 17 00:00:00 2001 From: drdev Date: Thu, 25 Sep 2014 14:04:26 +0000 Subject: [PATCH] Prevent mana tapping for second human player causing issues --- forge-gui-mobile/src/forge/Forge.java | 4 ++-- forge-gui-mobile/src/forge/Graphics.java | 24 +++++++++---------- .../src/forge/toolbox/FCardPanel.java | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 787e034905b..8afaddc97ae 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -240,11 +240,11 @@ public class Forge implements ApplicationListener { for (FOverlay overlay : FOverlay.getOverlays()) { overlay.setSize(screenWidth, screenHeight); //update overlay sizes as they're rendered if (overlay.getRotate180()) { - graphics.setRotateTransform(screenWidth / 2, screenHeight / 2, 180); + graphics.startRotateTransform(screenWidth / 2, screenHeight / 2, 180); } overlay.draw(graphics); if (overlay.getRotate180()) { - graphics.clearTransform(); + graphics.endTransform(); } } graphics.end(); diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index b5f74929e42..f38af9f344e 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -1,5 +1,7 @@ package forge; +import java.util.Stack; + import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; @@ -28,6 +30,7 @@ public class Graphics { private final SpriteBatch batch = new SpriteBatch(); private final ShapeRenderer shapeRenderer = new ShapeRenderer(); + private final Stack transforms = new Stack(); private final Vector3 tmp = new Vector3(); private float regionHeight; private Rectangle bounds; @@ -66,7 +69,7 @@ public class Graphics { batch.flush(); //must flush batch to prevent other things not rendering Rectangle clip = new Rectangle(adjustX(x), adjustY(y, h), w, h); - if (isTransformed) { //transform position if needed + if (!transforms.isEmpty()) { //transform position if needed tmp.set(clip.x + clip.width / 2, clip.y + clip.height / 2, 0); tmp.mul(batch.getTransformMatrix()); clip.x = tmp.x - clip.width / 2; @@ -95,7 +98,7 @@ public class Graphics { final Rectangle parentBounds = bounds; bounds = new Rectangle(parentBounds.x + displayObj.getLeft(), parentBounds.y + displayObj.getTop(), displayObj.getWidth(), displayObj.getHeight()); - if (isTransformed) { //transform screen position if needed + if (!transforms.isEmpty()) { //transform screen position if needed tmp.set(bounds.x + bounds.width / 2, regionHeight - bounds.y - bounds.height / 2, 0); tmp.mul(batch.getTransformMatrix()); displayObj.setScreenPosition(tmp.x - bounds.width / 2, regionHeight - tmp.y - bounds.height / 2); @@ -110,13 +113,13 @@ public class Graphics { visibleBounds = intersection; if (displayObj.getRotate180()) { - setRotateTransform(displayObj.getWidth() / 2, displayObj.getHeight() / 2, 180); + startRotateTransform(displayObj.getWidth() / 2, displayObj.getHeight() / 2, 180); } displayObj.draw(this); if (displayObj.getRotate180()) { - clearTransform(); + endTransform(); } visibleBounds = backup; @@ -452,7 +455,7 @@ public class Graphics { } private void startShape(ShapeType shapeType) { - if (isTransformed) { + if (!transforms.isEmpty()) { //must copy matrix before starting shape if transformed shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); } @@ -504,25 +507,22 @@ public class Graphics { shapeRenderer.setProjectionMatrix(matrix); } - private boolean isTransformed; - - public void setRotateTransform(float originX, float originY, float rotation) { + public void startRotateTransform(float originX, float originY, float rotation) { batch.end(); float dx = adjustX(originX); float dy = adjustY(originY, 0); + transforms.add(new Matrix4(batch.getTransformMatrix())); //backup current transform matrix batch.getTransformMatrix().translate(dx, dy, 0); batch.getTransformMatrix().rotate(Vector3.Z, rotation); batch.getTransformMatrix().translate(-dx, -dy, 0); batch.begin(); - isTransformed = true; } - public void clearTransform() { + public void endTransform() { batch.end(); - batch.getTransformMatrix().idt(); + batch.getTransformMatrix().set(transforms.pop()); shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); batch.begin(); - isTransformed = false; } public void drawRotatedImage(Texture image, float x, float y, float w, float h, float originX, float originY, float rotation) { diff --git a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java index 6c3b7f1dc01..1095790a1f8 100644 --- a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java +++ b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java @@ -90,13 +90,13 @@ public class FCardPanel extends FDisplayObject { if (tapped) { float edgeOffset = w / 2f; - g.setRotateTransform(x + edgeOffset, y + h - edgeOffset, tappedAngle); + g.startRotateTransform(x + edgeOffset, y + h - edgeOffset, tappedAngle); } CardRenderer.drawCardWithOverlays(g, card, x, y, w, h); if (tapped) { - g.clearTransform(); + g.endTransform(); } } }