package de.rico.adventure.entity.character;

import de.rico.engine.geometry.AbstractMesh;

/**
 * A class that represents characters that can't be
 * controlled by the player.
 * @author Frank Bruns
 *
 */
public class NonPlayerCharacter extends AbstractCharacter
{
	private int hitPoints = 100;
	
	private int bombHitPoints = 3;
	
	private int timeVulnerable = 5000;
	
	private int numberOfBombs = 5;
	
	private int bombDamage = 5;
	
	private float bombSpeed = 0.003f;
	
	/**
	 * Creates a new non-player-character with the specified mesh as a model.
	 * @param mesh mesh to use as a model
	 */
	public NonPlayerCharacter(AbstractMesh mesh)
	{
		super(mesh);
	}
	
	/**
	 * Decreases the hit points of the target by the specified amount
	 * @param amount amount of hit point to decrease
	 */
	public void decreaseHitPoints(int amount)
	{
		this.hitPoints -= amount;
	}
	
	/**
	 * Sets the hit points of the npc.
	 * @param hp number of hit points to set
	 */
	public void setHitPoints(int hp)
	{
		this.hitPoints = hp;
	}
	
	/**
	 * Returns the number of hit points left
	 * @return number of hit point of the npc
	 */
	public int getHitPoints()
	{
		return this.hitPoints;
	}
	
	/**
	 * Sets the time of vulnerability after each wave of bombs.
	 * @param timeVul time of vulnerability
	 */
	public void setTimeVulnerable(int timeVul)
	{
		this.timeVulnerable = timeVul;
	}
	
	/**
	 * Returns the time of vulnerability
	 * @return time of vulnerability
	 */
	public int getTimeVulnerable()
	{
		return this.timeVulnerable;
	}

	/**
	 * @return the numberOfBombs
	 */
	public int getNumberOfBombs()
	{
		return numberOfBombs;
	}

	/**
	 * @param numberOfBombs the numberOfBombs to set
	 */
	public void setNumberOfBombs(int numberOfBombs)
	{
		this.numberOfBombs = numberOfBombs;
	}

	/**
	 * @return the bombHitPoints
	 */
	public int getBombHitPoints()
	{
		return bombHitPoints;
	}

	/**
	 * @param bombHitPoints the bombHitPoints to set
	 */
	public void setBombHitPoints(int bombHitPoints)
	{
		this.bombHitPoints = bombHitPoints;
	}

	/**
	 * @return the bombDamage
	 */
	public int getBombDamage()
	{
		return bombDamage;
	}

	/**
	 * @param bombDamage the bombDamage to set
	 */
	public void setBombDamage(int bombDamage)
	{
		this.bombDamage = bombDamage;
	}

	/**
	 * @return the bombSpeed
	 */
	public float getBombSpeed()
	{
		return bombSpeed;
	}

	/**
	 * @param bombSpeed the bombSpeed to set
	 */
	public void setBombSpeed(float bombSpeed)
	{
		this.bombSpeed = bombSpeed;
	}
	
}
