package stray.transition;
import stray.Main;
import stray.Settings;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
public class Spiral implements Transition {
public Spiral() {
this(4);
}
public Spiral(int time) {
tilespertick = time;
tilewidth = Settings.DEFAULT_WIDTH / 16;
tileheight = Gdx.graphics.getHeight() / 9;
traversed = new boolean[tilewidth][tileheight];
}
int tilewidth;
int tileheight;
int tilespertick;
int tilescovered = 0;
boolean[][] traversed;
@Override
public boolean finished() {
return tilescovered >= (16 * 9);
}
int cx = 0;
int cy = 0;
/**
* 0 - 3 = up down left right
*/
int state = 1;
Color color = Color.BLACK;
@Override
public void render(Main main) {
main.batch.setColor(color);
for (int x = 0; x < tilewidth; x++) {
for (int y = 0; y < tileheight; y++) {
if (traversed[x][y]) main.fillRect(x * (tilewidth),
Main.convertY(y * (tileheight) + (tileheight)), (tilewidth), (tileheight));
}
}
main.batch.setColor(Color.WHITE);
}
public Spiral setColor(Color c) {
color = c;
return this;
}
@Override
public void tickUpdate(Main main) {
for (int i = 0; i < tilespertick; i++) {
if (!traversed[cx][cy]) {
traversed[cx][cy] = true;
tilescovered++;
}
switch (state) {
case 0: // up -> go left
cy--;
if (cy <= -1 || (traversed[cx][cy])) {
cy++;
state = 2;
}
break;
case 1: // down -> go right
cy++;
if (cy >= 9 || (traversed[cx][cy])) {
cy--;
state = 3;
}
break;
case 2: // left -> go down
cx--;
if (cx <= -1 || (traversed[cx][cy])) {
cx++;
state = 1;
}
break;
case 3: // right -> go up
cx++;
if (cx >= 16 || (traversed[cx][cy])) {
cx--;
state = 0;
}
break;
}
}
}
}