refactor stack -> deque

This commit is contained in:
Anthony Calosa
2020-04-21 20:31:41 +08:00
parent 8acb143fea
commit f68ac2e43a
2 changed files with 26 additions and 23 deletions

View File

@@ -38,9 +38,10 @@ import forge.util.Utils;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.util.ArrayDeque;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Deque;
import java.util.List; import java.util.List;
import java.util.Stack;
public class Forge implements ApplicationListener { public class Forge implements ApplicationListener {
public static final String CURRENT_VERSION = "1.6.33.001"; public static final String CURRENT_VERSION = "1.6.33.001";
@@ -57,7 +58,7 @@ public class Forge implements ApplicationListener {
private static KeyInputAdapter keyInputAdapter; private static KeyInputAdapter keyInputAdapter;
private static boolean exited; private static boolean exited;
private static int continuousRenderingCount = 1; //initialize to 1 since continuous rendering is the default private static int continuousRenderingCount = 1; //initialize to 1 since continuous rendering is the default
private static final Stack<FScreen> screens = new Stack<>(); private static final Deque<FScreen> Dscreens = new ArrayDeque<>();
private static boolean textureFiltering = false; private static boolean textureFiltering = false;
private static boolean destroyThis = false; private static boolean destroyThis = false;
public static String extrawide = "default"; public static String extrawide = "default";
@@ -259,13 +260,13 @@ public class Forge implements ApplicationListener {
} }
public static boolean onHomeScreen() { public static boolean onHomeScreen() {
return screens.size() == 1; return Dscreens.size() == 1;
} }
public static void back() { public static void back() {
if(destroyThis && isLandscapeMode()) if(destroyThis && isLandscapeMode())
return; return;
if (screens.size() < 2) { if (Dscreens.size() < 2) {
exit(false); //prompt to exit if attempting to go back from home screen exit(false); //prompt to exit if attempting to go back from home screen
return; return;
} }
@@ -273,8 +274,8 @@ public class Forge implements ApplicationListener {
@Override @Override
public void run(Boolean result) { public void run(Boolean result) {
if (result) { if (result) {
screens.pop(); Dscreens.removeFirst();
setCurrentScreen(screens.lastElement()); setCurrentScreen(Dscreens.getFirst());
} }
} }
}); });
@@ -282,12 +283,12 @@ public class Forge implements ApplicationListener {
//set screen that will be gone to on pressing Back before going to current Back screen //set screen that will be gone to on pressing Back before going to current Back screen
public static void setBackScreen(final FScreen screen0, boolean replace) { public static void setBackScreen(final FScreen screen0, boolean replace) {
screens.remove(screen0); //remove screen from previous position in navigation history Dscreens.remove(screen0); //remove screen from previous position in navigation history
int index = screens.size() - 1; int index = Dscreens.size() - 1;
if (index > 0) { if (index > 0) {
screens.add(index, screen0); Dscreens.addLast(screen0);
if (replace) { //remove previous back screen if replacing back screen if (replace) { //remove previous back screen if replacing back screen
screens.remove(index - 1); Dscreens.removeFirst();
} }
} }
} }
@@ -349,7 +350,7 @@ public class Forge implements ApplicationListener {
if (currentScreen == screen0) { return; } if (currentScreen == screen0) { return; }
if (currentScreen == null) { if (currentScreen == null) {
screens.push(screen0); Dscreens.addFirst(screen0);
setCurrentScreen(screen0); setCurrentScreen(screen0);
return; return;
} }
@@ -358,11 +359,11 @@ public class Forge implements ApplicationListener {
@Override @Override
public void run(Boolean result) { public void run(Boolean result) {
if (result) { if (result) {
if (replaceBackScreen && !screens.isEmpty()) { if (replaceBackScreen && !Dscreens.isEmpty()) {
screens.pop(); Dscreens.removeFirst();
} }
if (screens.peek() != screen0) { //prevent screen being its own back screen if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen
screens.push(screen0); Dscreens.addFirst(screen0);
} }
setCurrentScreen(screen0); setCurrentScreen(screen0);
} }
@@ -505,7 +506,7 @@ public class Forge implements ApplicationListener {
currentScreen.onClose(null); currentScreen.onClose(null);
currentScreen = null; currentScreen = null;
} }
screens.clear(); Dscreens.clear();
graphics.dispose(); graphics.dispose();
SoundSystem.instance.dispose(); SoundSystem.instance.dispose();
try { try {

View File

@@ -19,7 +19,9 @@ import forge.assets.FSkinFont;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.util.Utils; import forge.util.Utils;
import forge.util.TextBounds; import forge.util.TextBounds;
import java.util.Stack;
import java.util.ArrayDeque;
import java.util.Deque;
public class Graphics { public class Graphics {
private static final int GL_BLEND = GL20.GL_BLEND; private static final int GL_BLEND = GL20.GL_BLEND;
@@ -27,7 +29,7 @@ public class Graphics {
private final SpriteBatch batch = new SpriteBatch(); private final SpriteBatch batch = new SpriteBatch();
private final ShapeRenderer shapeRenderer = new ShapeRenderer(); private final ShapeRenderer shapeRenderer = new ShapeRenderer();
private final Stack<Matrix4> transforms = new Stack<>(); private final Deque<Matrix4> Dtransforms = new ArrayDeque<>();
private final Vector3 tmp = new Vector3(); private final Vector3 tmp = new Vector3();
private float regionHeight; private float regionHeight;
private Rectangle bounds; private Rectangle bounds;
@@ -70,7 +72,7 @@ public class Graphics {
batch.flush(); //must flush batch to prevent other things not rendering batch.flush(); //must flush batch to prevent other things not rendering
Rectangle clip = new Rectangle(adjustX(x), adjustY(y, h), w, h); Rectangle clip = new Rectangle(adjustX(x), adjustY(y, h), w, h);
if (!transforms.isEmpty()) { //transform position if needed if (!Dtransforms.isEmpty()) { //transform position if needed
tmp.set(clip.x, clip.y, 0); tmp.set(clip.x, clip.y, 0);
tmp.mul(batch.getTransformMatrix()); tmp.mul(batch.getTransformMatrix());
float minX = tmp.x; float minX = tmp.x;
@@ -121,7 +123,7 @@ public class Graphics {
final Rectangle parentBounds = bounds; final Rectangle parentBounds = bounds;
bounds = new Rectangle(parentBounds.x + displayObj.getLeft(), parentBounds.y + displayObj.getTop(), displayObj.getWidth(), displayObj.getHeight()); bounds = new Rectangle(parentBounds.x + displayObj.getLeft(), parentBounds.y + displayObj.getTop(), displayObj.getWidth(), displayObj.getHeight());
if (!transforms.isEmpty()) { //transform screen position if needed by applying transform matrix to rectangle if (!Dtransforms.isEmpty()) { //transform screen position if needed by applying transform matrix to rectangle
updateScreenPosForRotation(displayObj); updateScreenPosForRotation(displayObj);
} }
else { else {
@@ -542,7 +544,7 @@ public class Graphics {
} }
private void startShape(ShapeType shapeType) { private void startShape(ShapeType shapeType) {
if (!transforms.isEmpty()) { if (!Dtransforms.isEmpty()) {
//must copy matrix before starting shape if transformed //must copy matrix before starting shape if transformed
shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); shapeRenderer.setTransformMatrix(batch.getTransformMatrix());
} }
@@ -624,7 +626,7 @@ public class Graphics {
public void startRotateTransform(float originX, float originY, float rotation) { public void startRotateTransform(float originX, float originY, float rotation) {
batch.end(); batch.end();
transforms.add(0, new Matrix4(batch.getTransformMatrix().idt())); //startshape is using this above as reference Dtransforms.addFirst(new Matrix4(batch.getTransformMatrix().idt())); //startshape is using this above as reference
batch.getTransformMatrix().idt().translate(adjustX(originX), adjustY(originY, 0), 0).rotate(Vector3.Z, rotation).translate(-adjustX(originX), -adjustY(originY, 0), 0); batch.getTransformMatrix().idt().translate(adjustX(originX), adjustY(originY, 0), 0).rotate(Vector3.Z, rotation).translate(-adjustX(originX), -adjustY(originY, 0), 0);
batch.begin(); batch.begin();
} }
@@ -632,7 +634,7 @@ public class Graphics {
public void endTransform() { public void endTransform() {
batch.end(); batch.end();
shapeRenderer.setTransformMatrix(batch.getTransformMatrix().idt()); shapeRenderer.setTransformMatrix(batch.getTransformMatrix().idt());
transforms.pop(); Dtransforms.removeFirst();
batch.getTransformMatrix().idt(); //reset batch.getTransformMatrix().idt(); //reset
shapeRenderer.getTransformMatrix().idt(); //reset shapeRenderer.getTransformMatrix().idt(); //reset
batch.begin(); batch.begin();