package stray.util.render;
import stray.Main;
import stray.Settings;
import stray.blocks.BlockOuterSpace;
import stray.blocks.Blocks;
import stray.transition.FadeOut;
import stray.transition.Spiral;
import stray.util.AssetMap;
import stray.util.Utils;
import stray.world.World;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.Array;
public class SpaceBackground {
private static SpaceBackground instance;
private SpaceBackground() {
}
public static SpaceBackground instance() {
if (instance == null) {
instance = new SpaceBackground();
instance.loadResources();
}
return instance;
}
private int magicnumber = Main.getRandom().nextInt();
private float camerax = 0;
private double timewatched = 0d;
private float krakenx = Settings.DEFAULT_WIDTH;
private Array<VisualAsteroid> asteroids = new Array<VisualAsteroid>();
private int cooldown = 0;
public static int maxAsteroids = 16;
private void loadResources() {
while (asteroids.size < maxAsteroids) {
VisualAsteroid ast = new VisualAsteroid();
moveAsteroidToEdge(ast);
ast.x = World.tilesizex + (Settings.DEFAULT_WIDTH * Main.getRandom().nextFloat());
asteroids.add(ast);
}
}
public void render(Main main) {
if (asteroids.size < maxAsteroids) {
VisualAsteroid ast = new VisualAsteroid();
moveAsteroidToEdge(ast);
asteroids.add(ast);
}
for (int x = Math.max(Math.round(camerax / World.tilesizex - 1), 0); x < (((Gdx.graphics
.getWidth() + camerax) / World.tilesizex) + 1); x++) {
for (int y = 0; y < ((Gdx.graphics.getHeight() / World.tilesizey) + 2); y++) {
((BlockOuterSpace) Blocks.instance().getBlock("space"))
.renderPlain(main, camerax, 0, x, y, magicnumber);
}
}
camerax = camerax + (World.tilesizex / 2) * Gdx.graphics.getRawDeltaTime();
main.font.setColor(Color.WHITE);
for (int i = asteroids.size - 1; i > -1; i--) {
// main.drawCentered("||||||||||||||||||||||||||||||||||||||||",
// asteroids.get(i).x, asteroids.get(i).y - 15);
asteroids.get(i).renderPlain(main);
asteroids.get(i).x -= (asteroids.get(i).speed * World.tilesizex)
* Gdx.graphics.getRawDeltaTime();
if (asteroids.get(i).x < -(32 * asteroids.get(i).size)) {
if (asteroids.size > maxAsteroids
&& (getAsteroidsRight(Settings.DEFAULT_WIDTH / 2) > maxAsteroids)) {
asteroids.removeIndex(i);
} else {
moveAsteroidToEdge(asteroids.get(i));
}
}
}
main.batch.draw(main.manager.get(AssetMap.get("spacekraken"), Texture.class), krakenx, 0,
Settings.DEFAULT_WIDTH, Gdx.graphics.getHeight());
main.font.draw(main.batch, "Did you ever really remove me?", krakenx + 100, 225);
if (Settings.debug) {
if (Gdx.input.isKeyJustPressed(Keys.UP)) {
maxAsteroids++;
msg = "# of asteroids now: " + maxAsteroids;
msgtime = 3;
} else if (Gdx.input.isKeyJustPressed(Keys.DOWN) && maxAsteroids > 0) {
maxAsteroids--;
msg = "# of asteroids now: " + maxAsteroids;
msgtime = 3;
}
}
main.font.setColor(1, 1, 1, (msgtime <= 0.5f ? msgtime * 2f : 1));
main.font.draw(main.batch, msg, 5, 35);
if (msgtime > 0) {
msgtime -= Gdx.graphics.getDeltaTime();
if (msgtime <= 0) {
msgtime = 0;
msg = "";
}
}
if (Gdx.input.isButtonPressed(Buttons.LEFT) && cooldown == 0) {
if (krakenx < Settings.DEFAULT_WIDTH && krakenx > -Settings.DEFAULT_WIDTH) {
main.awardAchievement("kraken");
}
}
if (cooldown > 0) cooldown--;
timewatched += Gdx.graphics.getRawDeltaTime();
if (timewatched >= (1800) && krakenx > -Settings.DEFAULT_WIDTH) {
krakenx -= Gdx.graphics.getDeltaTime() * 64;
}
}
private int getAsteroidsRight(int rightof) {
tmp = 0;
for (VisualAsteroid ast : asteroids) {
if (ast.x >= rightof) tmp++;
}
return tmp;
}
private int tmp = 0;
private String msg = "";
private float msgtime = 0;
private void moveAsteroidToEdge(VisualAsteroid ast) {
ast.y = (Gdx.graphics.getHeight() - (ast.size * (32 / 4)))
* Main.getRandom().nextFloat();
ast.x = Settings.DEFAULT_WIDTH + World.tilesizex
+ (Main.getRandom().nextFloat() * (World.tilesizex * 2));
ast.prepare();
}
public boolean containsSpecial() {
for (VisualAsteroid a : asteroids) {
if (a.colour) return true;
}
return false;
}
}
class VisualAsteroid {
float x = 0;
float y = 0;
float size, speed;
boolean colour = false;
public VisualAsteroid() {
prepare();
}
public void prepare() {
size = 0.75f + Main.getRandom().nextFloat();
speed = 0.75f + Main.getRandom().nextFloat();
colour = false;
// if ((MathUtils.random(1, Math.round(SpaceBackground.maxAsteroids * 32)) == 1)
// && !SpaceBackground.instance().containsSpecial()) {
// colour = true;
// }
}
public void renderPlain(Main main) {
if (!colour) {
main.batch.draw(main.manager.get(AssetMap.get("smallasteroid"), Texture.class), x,
Main.convertY(y), 32 * size, 32 * size);
} else {
Utils.drawTexWithShiny(main,
main.manager.get(AssetMap.get("smallasteroid"), Texture.class), x,
Main.convertY(y), 32 * size, 32 * size);
}
}
}