package org.anddev.andengine.entity.text; import javax.microedition.khronos.opengles.GL10; import org.anddev.andengine.engine.camera.Camera; import org.anddev.andengine.opengl.font.Font; import org.anddev.andengine.opengl.vertex.TextVertexBuffer; import org.anddev.andengine.util.HorizontalAlign; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 10:02:04 - 05.05.2010 */ public class TickerText extends Text { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private float mCharactersPerSecond; private int mCharactersVisible = 0; private float mSecondsElapsed = 0; private boolean mReverse = false; private float mDuration; // =========================================================== // Constructors // =========================================================== public TickerText(final float pX, final float pY, final Font pFont, final String pText, final HorizontalAlign pHorizontalAlign, final float pCharactersPerSecond) { super(pX, pY, pFont, pText, pHorizontalAlign); this.setCharactersPerSecond(pCharactersPerSecond); } // =========================================================== // Getter & Setter // =========================================================== public boolean isReverse() { return this.mReverse; } public void setReverse(final boolean pReverse) { this.mReverse = pReverse; } public float getCharactersPerSecond() { return this.mCharactersPerSecond; } public void setCharactersPerSecond(final float pCharactersPerSecond) { this.mCharactersPerSecond = pCharactersPerSecond; this.mDuration = this.mCharactersMaximum * this.mCharactersPerSecond; } public int getCharactersVisible() { return this.mCharactersVisible; } // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override protected void onManagedUpdate(final float pSecondsElapsed) { super.onManagedUpdate(pSecondsElapsed); if(this.mReverse){ if(this.mCharactersVisible < this.mCharactersMaximum){ this.mSecondsElapsed = Math.max(0, this.mSecondsElapsed - pSecondsElapsed); this.mCharactersVisible = (int)(this.mSecondsElapsed * this.mCharactersPerSecond); } } else { if(this.mCharactersVisible < this.mCharactersMaximum){ this.mSecondsElapsed = Math.min(this.mDuration, this.mSecondsElapsed + pSecondsElapsed); this.mCharactersVisible = (int)(this.mSecondsElapsed * this.mCharactersPerSecond); } } } @Override protected void drawVertices(final GL10 pGL, final Camera pCamera) { pGL.glDrawArrays(GL10.GL_TRIANGLES, 0, this.mCharactersVisible * TextVertexBuffer.VERTICES_PER_CHARACTER); } @Override public void reset() { super.reset(); this.mCharactersVisible = 0; this.mSecondsElapsed = 0; this.mReverse = false; } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== }