package stray; import stray.ui.LevelSelectButton; import stray.ui.NextLevelButton; import stray.ui.RetryLevelButton; import stray.util.AssetMap; import stray.util.DamageSource; import stray.util.Utils; import stray.world.World; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.utils.Array; public class ResultsScreen extends Updateable { public ResultsScreen(Main m) { super(m); container.elements.add(new LevelSelectButton(Settings.DEFAULT_WIDTH / 2 - 24 - 8 - 48, Gdx.graphics.getHeight() / 4) { @Override public boolean onLeftClick() { main.setScreen(Main.LEVELSELECT); return true; } }); container.elements.add(new RetryLevelButton(Settings.DEFAULT_WIDTH / 2 - 24, Gdx.graphics .getHeight() / 4) { @Override public boolean onLeftClick() { Main.LEVELSELECT.goToLevel(levelname); return true; } }); container.elements.add(new NextLevelButton(Settings.DEFAULT_WIDTH / 2 - 24 + 8 + 48, Gdx.graphics.getHeight() / 4) { @Override public boolean onLeftClick() { Main.LEVELSELECT.goToLevel(Math.round(Main.LEVELSELECT.wanted)); return true; } }); } private String levelfile = null; private int levelname = 0; private int resultsPick = MathUtils.random(0, 3); private Array<DamageSource> deaths = new Array<DamageSource>(1); private Array<DeathIcon> icons = new Array<DeathIcon>(64); public ResultsScreen setData(String levelf, int levelid, Array<DamageSource> deaths) { levelfile = levelf; levelname = levelid; this.deaths = deaths; groupDeaths(); int old = resultsPick; while (resultsPick == old) { resultsPick = MathUtils.random(0, 3); } return this; } private void groupDeaths() { icons.clear(); for (int i = 0; i < deaths.size; i++) { int following = 0; boolean added = false; if (i + 1 < deaths.size) { int cur = i + 1; while (cur < deaths.size) { if (deaths.get(cur) == deaths.get(i)) { following++; } else { icons.add(new DeathIcon(deaths.get(i), 1 + following)); i += following; added = true; break; } cur++; } } if (!added) { icons.add(new DeathIcon(deaths.get(i), 1 + following)); i += following; } } } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); main.batch.begin(); if (levelfile != null) { main.font.setColor(1, 1, 1, 1); main.font.setScale(2); main.drawCentered(Levels.getLevelName(levelname), Settings.DEFAULT_WIDTH / 2, Main.convertY(225)); main.font.setScale(1); main.drawCentered( Translator.getMsg("menu.results.latesttime") + Utils.formatMs(main.progress.getLong(levelfile + "-latesttime")), Settings.DEFAULT_WIDTH / 2, Main.convertY(275)); main.drawCentered( Translator.getMsg("menu.results.besttime") + Utils.formatMs(main.progress.getLong(levelfile + "-latesttime")), Settings.DEFAULT_WIDTH / 2, Main.convertY(300)); main.drawCentered(Translator.getMsg("menu.results.deaths") + deaths.size, Settings.DEFAULT_WIDTH / 2, Main.convertY(325)); if (deaths.size > 0) { renderDeaths(Settings.DEFAULT_WIDTH / 2 - ((icons.size / 2f) * 35), Main.convertY(375)); } } container.render(main); main.batch.end(); } private void renderDeaths(float x, float y) { for (int i = 0; i < icons.size; i++) { main.batch.draw(main.manager.get("images/ui/damage/" + icons.get(i).source.name + ".png", Texture.class), x + (i * 35), y); if (icons.get(i).count > 1) { main.drawCentered("x" + icons.get(i).count, x + (i * 35) + 16.5f, y); } } } @Override public void renderUpdate() { } @Override public void tickUpdate() { } @Override public void renderDebug(int starting) { } @Override public void resize(int width, int height) { } @Override public void show() { } @Override public void hide() { } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { } public static class DeathIcon { DamageSource source = DamageSource.yourMother; int count = 1; public DeathIcon(DamageSource dmg, int group) { source = dmg; count = group; } } }