@author t0neg0d
*/
public class LevelSummary extends AbstractAppState {
Screen screen;
Texture texStars;
AnimElement stars;
ElementEmitter emitter;
private int showStars = 3;
// Emitter influencers per star
DirectionInfluencer di1, di2, di3;
// Emitter actions
EmitterEnableAction enable, disable;
EmitterInfluencerAction dir1, dir2, dir3;
MoveToAction move1, move2, move3;
EmitterEmitAction emit1, emit2, emit3;
// Star actions
ScaleByAction scaleOL1, scaleOL2, scaleOL3, scaleEX1, scaleEX2, scaleEX3;
RotateByAction rotOL1, rotOL2, rotOL3;
public LevelSummary(Screen screen) {
this.screen = screen;
createStarTexture();
createEmitter();
setupEmitterActions();
setupStarActions();
initScreen();
}
private void createStarTexture() {
texStars = screen.getApplication().getAssetManager().loadTexture(“mygame/textures/gui/Stars.png”);
texStars.setMagFilter(Texture.MagFilter.Bilinear);
texStars.setMinFilter(Texture.MinFilter.BilinearNoMipMaps);
texStars.setWrap(Texture.WrapMode.BorderClamp);
}
private void createEmitter() {
emitter = new ElementEmitter(screen, new Vector2f(screen.getWidth()/2-64-153,screen.getHeight()/2-64), 80, 80);
emitter.setEmitterShape(“mygame/textures/gui/EmitterShape2.png”);
emitter.setSprite(“mygame/textures/gui/Sprite.png”, 2, 2, 1);
emitter.setMaxParticles(210);
emitter.setLowHighLife(1.15f,1.85f);
emitter.setMinMaxForce(3f,12f);
emitter.setParticlesPerSecond(0);
setupInfluencers();
}
private void setupInfluencers() {
// Configure default influencers
emitter.removeInfluencer(SpriteInfluencer.class);
emitter.removeInfluencer(ImpulseInfluencer.class);
emitter.getInfluencer(GravityInfluencer.class).setGravity(new Vector2f(0,3));
emitter.getInfluencer(SizeInfluencer.class).setStartSize(0.25f);
emitter.getInfluencer(SizeInfluencer.class).setEndSize(.25f);
emitter.getInfluencer(RotationInfluencer.class).setMaxRotationSpeed(60);
emitter.getInfluencer(ColorInfluencer.class).setStartColor(new ColorRGBA(1,0,0,1));
emitter.getInfluencer(ColorInfluencer.class).setEndColor(new ColorRGBA(1,1,0,1));
emitter.getInfluencer(ColorInfluencer.class).setInterpolation(Interpolation.exp5Out);
emitter.getInfluencer(AlphaInfluencer.class).setStartAlpha(3);
emitter.getInfluencer(AlphaInfluencer.class).setEndAlpha(.25f);
emitter.getInfluencer(AlphaInfluencer.class).setInterpolation(Interpolation.exp5In);
// Create directional influencers for each star
di1 = new DirectionInfluencer();
di1.setDirection(new Vector2f(-1f,0f));
di1.setStrength(.65f);
di2 = new DirectionInfluencer();
di2.setDirection(new Vector2f(0f,0f));
di2.setStrength(0f);
di3 = new DirectionInfluencer();
di3.setDirection(new Vector2f(1f,0f));
di3.setStrength(.65f);
}
private void setupEmitterActions() {
enable = new EmitterEnableAction();
enable.setDuration(1);
enable.setEnableEmitter();
disable = new EmitterEnableAction();
disable.setDuration(1);
disable.setDisableEmitter();
move1 = new MoveToAction();
move1.setPosition(screen.getWidth()/2-62-140,screen.getHeight()/2-62);
move2 = new MoveToAction();
move2.setPosition(screen.getWidth()/2-62,screen.getHeight()/2-62);
move3 = new MoveToAction();
move3.setPosition(screen.getWidth()/2-62+140,screen.getHeight()/2-62);
dir1 = new EmitterInfluencerAction();
dir1.setInfluencer(di1);
dir2 = new EmitterInfluencerAction();
dir2.setInfluencer(di2);
dir3 = new EmitterInfluencerAction();
dir3.setInfluencer(di3);
emit1 = new EmitterEmitAction();
emit1.setEmitNumParticles(70);
emit2 = new EmitterEmitAction();
emit2.setEmitNumParticles(70);
emit3 = new EmitterEmitAction();
emit3.setEmitNumParticles(70);
}
private void setupStarActions() {
// Star outline center
scaleOL1 = new ScaleByAction();
scaleOL1.setAmount(-4f);
scaleOL1.setDuration(1);
scaleOL1.setInterpolation(Interpolation.exp5Out);
rotOL1 = new RotateByAction();
rotOL1.setAmount(360);
rotOL1.setDuration(1);
rotOL1.setInterpolation(Interpolation.exp5Out);
// Star outline left
scaleOL2 = new ScaleByAction();
scaleOL2.setAmount(-4f);
scaleOL2.setDuration(1);
scaleOL2.setInterpolation(Interpolation.exp5Out);
rotOL2 = new RotateByAction();
rotOL2.setAmount(360);
rotOL2.setDuration(1);
rotOL2.setInterpolation(Interpolation.exp5Out);
// Star outline right
scaleOL3 = new ScaleByAction();
scaleOL3.setAmount(-4f);
scaleOL3.setDuration(1);
scaleOL3.setInterpolation(Interpolation.exp5Out);
rotOL3 = new RotateByAction();
rotOL3.setAmount(360);
rotOL3.setDuration(1);
rotOL3.setInterpolation(Interpolation.exp5Out);
// Star extrude left
scaleEX1 = new ScaleByAction();
scaleEX1.setAmount(.9f);
scaleEX1.setDuration(.5f);
scaleEX1.setInterpolation(Interpolation.bounceOut);
// Star extrude center
scaleEX2 = new ScaleByAction();
scaleEX2.setAmount(.9f);
scaleEX2.setDuration(.5f);
scaleEX2.setInterpolation(Interpolation.bounceOut);
// Star extrude right
scaleEX3 = new ScaleByAction();
scaleEX3.setAmount(.9f);
scaleEX3.setDuration(.5f);
scaleEX3.setInterpolation(Interpolation.bounceOut);
}
private void initScreen() {
// Create anim element
stars = new AnimElement(screen.getApplication().getAssetManager()) {
@Override
public void animElementUpdate(float tpf) { }
};
// Set texture
stars.setTexture(texStars);
String trKey = "outline";
// Add texture region for star outline
stars.addTextureRegion(trKey,130,234,124,124);
stars.getTextureRegion(trKey).flip(false, true);
// Add center outline quad
// Define star outline center
String key = "outline1";
stars.addQuad(key, trKey, new Vector2f(screen.getWidth()/2-62,screen.getHeight()/2-62), new Vector2f(62,62));
// Define star outline left
key = "outline2";
stars.addQuad(key, trKey, new Vector2f(screen.getWidth()/2-62-140,screen.getHeight()/2-62), new Vector2f(62,62));
// Define star outline right
key = "outline3";
stars.addQuad(key, trKey, new Vector2f(screen.getWidth()/2-62+140,screen.getHeight()/2-62), new Vector2f(62,62));
// Define extruded star left
key = "extrude1";
stars.addTextureRegion(key,2,361,149,149);
stars.getTextureRegion(key).flip(false, true);
stars.addQuad(key, key, new Vector2f(screen.getWidth()/2-75-153,screen.getHeight()/2-60), new Vector2f(105,25));
// Define extruded star center
key = "extrude2";
stars.addTextureRegion(key,153,361,149,149);
stars.getTextureRegion(key).flip(false, true);
stars.addQuad(key, key, new Vector2f(screen.getWidth()/2-75,screen.getHeight()/2-60), new Vector2f(75,25));
// Define extruded star right
key = "extrude3";
stars.addTextureRegion(key,304,361,149,149);
stars.getTextureRegion(key).flip(false, true);
stars.addQuad(key, key, new Vector2f(screen.getWidth()/2-75+153,screen.getHeight()/2-60), new Vector2f(44,25));
stars.setScale(new Vector2f(1f,1f));
// Initialize anim element
stars.initialize();
// Hide quads
stars.getQuads().get("outline1").hide();
stars.getQuads().get("outline2").hide();
stars.getQuads().get("outline3").hide();
stars.getQuads().get("extrude1").hide();
stars.getQuads().get("extrude2").hide();
stars.getQuads().get("extrude3").hide();
}
public void setStarCount(int stars) {
this.showStars = stars;
}
@Override
public void initialize(AppStateManager stateManager, Application app) {
super.initialize(stateManager, app);
emitter.startEmitter();
emitter.setIsActive(false);
loadScreen();
}
private void resetQuads() {
// Reset quads
stars.getQuads().get(“outline1”).scaleX = 5;
stars.getQuads().get(“outline1”).scaleY = 5;
stars.getQuads().get(“outline1”).rotation = 0;
stars.getQuads().get(“outline1”).hide();
stars.getQuads().get("outline2").scaleX = 5;
stars.getQuads().get("outline2").scaleY = 5;
stars.getQuads().get("outline2").rotation = 0;
stars.getQuads().get("outline2").hide();
stars.getQuads().get("outline3").scaleX = 5;
stars.getQuads().get("outline3").scaleY = 5;
stars.getQuads().get("outline3").rotation = 0;
stars.getQuads().get("outline3").hide();
stars.getQuads().get("extrude1").scaleX = .1f;
stars.getQuads().get("extrude1").scaleY = .1f;
stars.getQuads().get("extrude1").hide();
stars.getQuads().get("extrude2").scaleX = .1f;
stars.getQuads().get("extrude2").scaleY = .1f;
stars.getQuads().get("extrude2").hide();
stars.getQuads().get("extrude3").scaleX = .1f;
stars.getQuads().get("extrude3").scaleY = .1f;
stars.getQuads().get("extrude3").hide();
}
private void resetActions() {
enable.restart();
disable.restart();
move1.restart();
move2.restart();
move3.restart();
dir1.restart();
dir2.restart();
dir3.restart();
emit1.restart();
emit2.restart();
emit3.restart();
scaleEX1.restart();
scaleEX2.restart();
scaleEX3.restart();
scaleOL1.restart();
rotOL1.restart();
scaleOL2.restart();
rotOL2.restart();
scaleOL3.restart();
rotOL3.restart();
}
private void loadScreen() {
resetQuads();
resetActions();
// Attach anim element
screen.getGUINode().attachChild(stars);
screen.getAnimManager().addQueuedAction(enable, emitter, 1f);
if (showStars >= 1) {
// Add extruded star left actions
screen.getAnimManager().addQueuedAction(scaleEX1, stars.getQuads().get("extrude1"), 2f);
// Emitter reposition, update influence and set emit command for left star
screen.getAnimManager().addQueuedAction(move1, emitter, 1.1f);
screen.getAnimManager().addQueuedAction(dir1, emitter, 1.2f);
screen.getAnimManager().addQueuedAction(emit1, emitter, 1.3f);
}
if (showStars >= 2) {
// Add extruded star center actions
screen.getAnimManager().addQueuedAction(scaleEX2, stars.getQuads().get("extrude2"), 2.1f);
// Emitter reposition, update influence and set emit command for center star
screen.getAnimManager().addQueuedAction(move2, emitter, 1.5f);
screen.getAnimManager().addQueuedAction(dir2, emitter, 1.55f);
screen.getAnimManager().addQueuedAction(emit2, emitter, 1.6f);
}
if (showStars == 3) {
// Add extruded star right actions
screen.getAnimManager().addQueuedAction(scaleEX3, stars.getQuads().get("extrude3"), 2.2f);
// Emitter reposition, update influence and set emit command for right star
screen.getAnimManager().addQueuedAction(move3, emitter, 1.8f);
screen.getAnimManager().addQueuedAction(dir3, emitter, 1.85f);
screen.getAnimManager().addQueuedAction(emit3, emitter, 1.9f);
}
// Add disable emitter action
screen.getAnimManager().addQueuedAction(disable, emitter, 4f);
// Add scale and rotate actions for center star outline
screen.getAnimManager().addQueuedAction(scaleOL1, stars.getQuads().get("outline1"), .3f);
screen.getAnimManager().addQueuedAction(rotOL1, stars.getQuads().get("outline1"), .3f);
// Add scale and rotate actions for left star outline
screen.getAnimManager().addQueuedAction(scaleOL2, stars.getQuads().get("outline2"), .6f);
screen.getAnimManager().addQueuedAction(rotOL2, stars.getQuads().get("outline2"), .6f);
// Add scale and rotate actions for left star outline
screen.getAnimManager().addQueuedAction(scaleOL3, stars.getQuads().get("outline3"), .9f);
screen.getAnimManager().addQueuedAction(rotOL3, stars.getQuads().get("outline3"), .9f);
}
@Override
public void update(float tpf) {
stars.update(tpf);
}
@Override
public void cleanup() {
super.cleanup();
emitter.setIsActive(false);
emitter.stopEmitter();
screen.getGUINode().detachChild(stars);
}
}