package scene2d; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Array; public class Sprite extends Actor { private Array<String> textures = new Array<String>(); private Animation animation; private TextureRegion keyFrame; private float duration = 1f; private int frameCount = 1; public boolean isAnimationActive = true; public boolean isAnimationLooping = true; public Sprite(String texName, int frameCount){ textures.add(texName); setFrameCount(frameCount); } public Sprite(String texName, int frameCount, float duration){ textures.add(texName); setFrameCount(frameCount, duration); } public Sprite(String... texNames){ setTextures(texNames); } public Sprite(float duration, String... texNames){ setTextures(duration, texNames); this.duration = duration; } @Override public void draw(Batch batch, float parentAlpha) { super.draw(batch, parentAlpha); if (isAnimationActive && animation != null) { keyFrame = animation.getKeyFrame(Scene.stateTime, isAnimationLooping); batch.draw(keyFrame, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation()); } } public void setTextures(String... texNames){ textures.clear(); if(texNames.length == 1){ textures.add(texNames[0]); animation = Asset.anim(texNames[0], frameCount); setSize(animation.getKeyFrame(0).getRegionWidth(), animation.getKeyFrame(0).getRegionHeight()); return; } Array<TextureRegion> array = new Array<TextureRegion>(); for(int i=0;i<texNames.length;i++){ if(!texNames[i].trim().isEmpty()){ array.add(Asset.tex(texNames[i])); textures.add(texNames[i]); } } animation = new Animation(1f/texNames.length, array); duration = 1f/texNames.length; setSize(array.first().getRegionWidth(), array.first().getRegionHeight()); } public void setTextures(float duration, String... texNames){ textures.clear(); if(texNames.length == 1){ textures.add(texNames[0]); animation = Asset.anim(texNames[0], frameCount, duration); setSize(animation.getKeyFrame(0).getRegionWidth(), animation.getKeyFrame(0).getRegionHeight()); return; } Array<TextureRegion> array = new Array<TextureRegion>(); for(int i=0;i<texNames.length;i++){ if(!texNames[i].trim().isEmpty()){ array.add(Asset.tex(texNames[i])); textures.add(texNames[i]); } } animation = new Animation(duration, array); setSize(array.first().getRegionWidth(), array.first().getRegionHeight()); } public Array<String> getTextures(){ return textures; } public void setDuration(float duration){ this.duration = duration; StringBuilder sb = new StringBuilder(); for(String s: textures){ sb.append(s); sb.append(","); } setTextures(duration, sb.toString().split(",")); } public float getDuration(){ return this.duration; } public int getFrameCount(){ return frameCount; } public void setFrameCount(int count){ frameCount = count; animation = Asset.anim(textures.get(0), frameCount); setSize(animation.getKeyFrame(0).getRegionWidth(), animation.getKeyFrame(0).getRegionHeight()); } public void setFrameCount(int count, float duration){ frameCount = count; animation = Asset.anim(textures.get(0), frameCount, duration); setSize(animation.getKeyFrame(0).getRegionWidth(), animation.getKeyFrame(0).getRegionHeight()); } @Override public String toString(){ StringBuilder sb = new StringBuilder(); for(String tex: textures){ sb.append(tex); sb.append(","); } sb.deleteCharAt(sb.lastIndexOf(",")); return sb.toString(); } }