public void reset() { textureLifeSpan.setRegion( new Texture((Gdx.files.internal(Config.asString("lifeSpanTexture"))))); texture = new Texture(Gdx.files.internal(Config.asString(texturePath))); currentLife = lifeSpan; timer.timeCountDown = initTimer; currentRatio = targetRatio = beginingRatio; cutStep = 0; cutLeft = false; cutRight = false; while (textOutList.size() > 0) { PoolStore.textPool.free(textOutList.get(0)); textOutList.remove(0); } }
public abstract class CuttingObject { protected boolean bomb = false; protected byte initTimer; Timer timer; float x, y, width, height; byte cutStep = 0; public boolean finishAnimation = true; // protected Pool<TextOutput> pool; protected short lifeSpan; protected short currentLife; protected List<TextOutput> textOutList = new ArrayList<TextOutput>(); protected byte compatibleCut; protected Texture texture; protected String texturePath; protected TextureRegion textureRegion; protected float beginingRatio = 2f; protected float currentRatio = beginingRatio; protected float targetRatio = beginingRatio; TextOutput textBonus; protected TextureRegion textureLifeSpan = new TextureRegion(new Texture((Gdx.files.internal(Config.asString("lifeSpanTexture"))))); protected int index; boolean cutLeft = false, cutRight = false; public abstract boolean supportCut(byte typeCut); public abstract boolean takeCut(byte typeCut, boolean left); public abstract void takeCut(byte typeCut, byte times); public float currentPercentLifeSpan() { return (float) currentLife / lifeSpan; } public TextureRegion getTexture() { return textureRegion; } public void draw( SpriteBatch spriteBatch, BitmapFont font, TextureRegion leftTexture, TextureRegion rightTexture) { finishAnimation = true; if (currentRatio > targetRatio) { currentRatio -= 0.05; } else currentRatio = targetRatio; // render the life span if (!bomb) spriteBatch.draw( textureLifeSpan, this.x + 50, height - 50, 0f, 0f, textureLifeSpan.getRegionWidth(), textureLifeSpan.getRegionHeight(), currentRatio, 1f, 0f); if (currentRatio == 0) { if (textBonus == null) { RunningScreen.score += 50; textBonus = PoolStore.textPool.obtain(); textBonus.x = 0; textBonus.y = 0; } textBonus.text = " Bonus 50 points "; font.draw(spriteBatch, textBonus.text, this.x + 100, height - 150 + textBonus.y); textBonus.y += 2; if (textBonus.y >= 40) { PoolStore.textPool.free(textBonus); textBonus = null; } else finishAnimation = false; } // render timer timer.render(spriteBatch, font, this.x + width - 50, this.y + height - 50); // render the texture of object if (!Setting.debug) spriteBatch.draw(textureRegion, this.x + 50, height - 400); else spriteBatch.draw(textureRegion, this.x + 50, height - 300); // render the damage text for (index = 0; index < textOutList.size(); index++) { TextOutput temp = textOutList.get(index); font.draw(spriteBatch, temp.text, this.x + 50, height - 150 + temp.y); temp.y += 2; if (temp.y == 20) { textOutList.remove(index); PoolStore.textPool.free(temp); } else finishAnimation = false; } // render the cut animation if (cutRight) { if (!Setting.debug) spriteBatch.draw(leftTexture, this.x + 50 + 20 * cutStep, height - 300); else spriteBatch.draw(leftTexture, this.x + 50 + 20 * cutStep, height - 300); cutStep++; if (cutStep > 10) { cutRight = false; cutStep = 0; } else finishAnimation = false; } else if (cutLeft) { if (!Setting.debug) spriteBatch.draw( rightTexture, this.x + textureRegion.getRegionWidth() + 50 - 20 * cutStep, height - 300); else spriteBatch.draw( rightTexture, this.x + textureRegion.getRegionWidth() + 50 - 20 * cutStep, height - 100); cutStep++; if (cutStep > 10) { cutLeft = false; cutStep = 0; } else finishAnimation = false; } } // public void setPool(Pool<TextOutput> pool){ // this.pool=pool; // } public void decreaseTime() { timer.decreaseTime(); } public boolean isDead() { return (timer.timeCountDown <= 0 || currentLife <= 0); } // public void setPool(Pool pool){ // this.pool = pool; // } public void setRegion(float x, float y, float width, float height) { this.x = x; this.y = y; this.width = width; this.height = height; } public void copySetting(CuttingObject object) { this.x = object.x; this.y = object.y; this.width = object.width; this.height = object.height; } public void reset() { textureLifeSpan.setRegion( new Texture((Gdx.files.internal(Config.asString("lifeSpanTexture"))))); texture = new Texture(Gdx.files.internal(Config.asString(texturePath))); currentLife = lifeSpan; timer.timeCountDown = initTimer; currentRatio = targetRatio = beginingRatio; cutStep = 0; cutLeft = false; cutRight = false; while (textOutList.size() > 0) { PoolStore.textPool.free(textOutList.get(0)); textOutList.remove(0); } } public abstract void free(); public static CuttingObject obtain() { return null; } }