import java.util.ArrayList;

/**
 * A floating, gliding metroid TODO: Maybe add lifepoints, so that multiple hits are needed to destroy this
 * @author vanitas
 *
 */
public class Metroid extends MovingObject
{
	private int level,			//Size of the Metroid (default 3-1)
				countBabies;	//How many new Metroids spawn, when THIS gets killed?
	private float spin;
	public Metroid(int level)
	{
		this.level = level;
		this.spin = (float) Math.random();
		this.shape = new Shape(Shape.S_METROID);
		this.getShape().setSize(level);
		this.x = 400f;
		this.y = 150f;
		this.speedX = (float) (Math.random()*2f);
		this.speedY = (float) (Math.random()*2f);
	}
	/**
	 * Creates a Metroid with 
	 * @param level
	 * @param x
	 * @param y
	 * @param speedX
	 * @param speedY
	 */
	public Metroid(int level, float x, float y, float speedX, float speedY, float spin)
	{
		this.level = level;
		this.spin = (float) Math.random();
		this.shape = new Shape(Shape.S_METROID);
		this.getShape().setSize(level*1.5f);
		this.x = x;
		this.y = y;
		this.speedX = speedX;
		this.speedY = speedY;
	}
	
	/**
	 * This method moves the Metroid according to its speedVector
	 * @param delta
	 * @param keepOnScreen if true the method calls keepOnScreen()
	 */
	@Override
	public void move(float delta, boolean keepOnScreen)
	{
		
		this.x += delta*0.1f*this.speedX;
		this.y += delta*0.1f*this.speedY;
		this.rotation += delta*this.spin*0.2f;
		if(keepOnScreen) this.keepOnScreen();
	}
	
	/**
	 * this method handles the case that THIS Metroid gets hit by an Object (Normally Ammunition)
	 * @param o The object that hit the Metroid
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void processCollision(MovingObject o)
	{
		ArrayList<Metroid> m = SpaceSpiel.getMetroids();
		if(this.level>1)
		{
			for(int i = 0; i<4; i++)
			{
				m.add(new Metroid(this.level-1, this.getX(),this.getY(),(float) (Math.random()*2f),(float) (Math.random()*2f),(float) Math.random()));
			}
		}
		else
		{
			//TODO: By chance of 5% or so add some random Items or PowerUps to the game.
			//
		}
		m.remove(this);
	}
	/**
	 * An empty method (A Metroid shouldn't accelerate)
	 * Only here to overwrite the parents method
	 */
	@Override
	public void accelerate()
	{
		//Has to be empty
	}
	//Getters and setters
	public int getLevel()
	{
		return this.level;
	}
	public void setLevel(int level)
	{
		this.level = level;
	}
	public float getSpin()
	{
		return this.spin;
	}
	public void setSpin(float spin)
	{
		this.spin = spin;
	}
}
