package ludumdare.game;

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.util.Random;

import org.crusty.math.Vec2double;

public class Particle {

	Vec2double pos, vel, acc;
	Sprite sprite;
	Random r;
	float alpha;
	AlphaComposite ac;
	
	public Particle(Sprite sprite, Vec2double v, String type, Vec2double dir) {
		r = new Random();
		pos = v;
		this.sprite = sprite;
		alpha = 1f;
		vel = new Vec2double(0, 0);
		acc = new Vec2double(0, 0);
		
		if (type.equals("rocketFire")) {
			vel = new Vec2double(Math.sin(r.nextInt(360 * 2))*0.02f, (Math.sin(r.nextInt(360 * 2)) + 1)*0.02f);
			acc = new Vec2double(0, 0);
		} else if (type.equals("rocketSmoke")) {
			vel = new Vec2double(Math.sin(r.nextInt(360 * 2))*0.05f, (Math.sin(r.nextInt(360 * 2)) + 1)*0.01f);
			acc = new Vec2double(0, 0);
			alpha = 0.5f;
		} else if (type.equals("jettisonSparks")) {
			vel = new Vec2double((1 - r.nextDouble()*2)*0.05, (1 - r.nextDouble()*2)*0.05);
			acc = new Vec2double(0, 0);
			alpha = 1f;
		} else if (type.equals("capsuleJet")) {
			vel = new Vec2double(-dir.x, -dir.y);
			acc = new Vec2double(0, 0);
			alpha = 0.2f;
		} else if (type.equals("crash")) {
			vel = new Vec2double((1 - r.nextDouble()*2)*0.05, (1 - r.nextDouble()*2)*0.05);
			acc = new Vec2double(0, 0);
			alpha = 0.5f;
		} else if (type.equals("wormhole")) {
			vel = new Vec2double((1 - r.nextDouble()*2)*0.05, (1 - r.nextDouble()*2)*0.05);
			acc = new Vec2double(0, 0);
			alpha = 0.5f;
		}
	}
	
	public void logic(double dt) {
		vel.x += acc.x / 1000;
		vel.y += acc.y / 1000;
		pos.x += vel.x * dt / 1000000;
		pos.y += vel.y * dt / 1000000;
		if (alpha > 0)
			alpha -= dt / 1000000000f;
		if (alpha < 0)
			alpha = 0;
	}
	
	public void draw(Graphics2D g) {
		ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
		g.setComposite(ac);
		g.drawImage(sprite.image, 
					(int) pos.x, 
					(int) pos.y, 
					null);
		ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f);
		g.setComposite(ac);
	}
	
}
