package com.shade.entities.util; import java.util.ArrayList; import java.util.List; import org.lwjgl.opengl.GL11; import org.newdawn.slick.Graphics; import org.newdawn.slick.SpriteSheet; import org.newdawn.slick.SlickException; import com.crash.Body; import com.shade.states.MasterState; public class Sizzle2 { public static final float MAX_SCALEUP = 0.5f; public static final int MAX_SPARKLES = 50; public static final float increment = 0.002f; private ArrayList<Sizz> sparkles; // the lovely source of sparkliness private Body origin; // the sparkle itself private int timer, timeInSun; private float intensity; private int x,y; private int sparkleCount; private String source; public Sizzle2(Body b, int count, int x, int y, String image) throws SlickException { timer = 0; sparkleCount = count; origin = b; this.x = x; this.y = y; source = image; initSparkles(); } public int getCount(){ return sparkleCount; } public void changeCount(int newCount){ sparkleCount = Math.min(newCount, MAX_SPARKLES); timer = 0; try{ while(sparkles.size()<sparkleCount){ float[] p = getPoint(); sparkles.add(new Sizz(p[0],p[1], MAX_SCALEUP, increment, (int)0, source, this)); } }catch(Exception e){ } } private void initSparkles() throws SlickException { sparkles = new ArrayList<Sizz>(); for (int i = 0; i < sparkleCount; i++) { float[] p = getPoint(); sparkles.add(new Sizz(p[0],p[1], MAX_SCALEUP, increment, (int)(MAX_SCALEUP/increment*i/sparkleCount), source, this)); } } public float getLuminosity (){ return intensity; } public void update(int delta) { timer+=delta; for(int i = 0;i<sparkles.size();i++){ sparkles.get(i).update(delta); } if (intensity > MasterState.SHADOW_THRESHOLD) { timeInSun+=delta; } else timeInSun = 0; changeCount(timeInSun/200); } public void animate(Graphics g) { //TODO: YAY OPENGL CALLS float posx = origin.getXCenter()-1.5f + x;// +origin.getWidth()/2;//-origin.getWidth()/2+x; float posy = origin.getYCenter() + y;// -origin.getHeight()/2+y; intensity = g.getPixel((int) posx-x/5, (int) posy+1-y/5).a; GL11.glAlphaFunc(GL11.GL_GREATER, 0.01f); GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA); for(int i = 0;i<sparkles.size();i++){ sparkles.get(i).draw(); } GL11.glAlphaFunc(GL11.GL_GREATER, 0.95f); GL11.glBlendFunc(GL11.GL_DST_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } public void resetTimer(){ timeInSun = 0; sparkles.clear(); } public float[] getPoint(){ float posx = origin.getXCenter()-1.5f + x;// +origin.getWidth()/2;//-origin.getWidth()/2+x; float posy = origin.getYCenter() + y;// -origin.getHeight()/2+y; if(sparkles.size()>sparkleCount) sparkles.remove(sparkles.size()-1); // add a new sparkle return new float[]{posx, posy}; } }