/**
 * @class kPlayer
 * @brief Player functions
 */
 
class kPlayer
{
public:

	/**
	 * @brief Returns the players inventory
	 */
	kPlayerInventory @Inventory();

	/**
	 * @brief Returns the players current weapon
	 */
	kWeapon @WeaponActor();

	/**
	 * @brief returns the players puppet actor
	 */
	kPuppet@ Actor();
	
	/**
	 * @brief Returns the number of frames the button has been held down. Does not work for buttonID 7 (Alt Fire)
	 * @param buttonID The button to check for. A valid buttonID is one of the following: 0 = Attack, 1 = Jump, 2 = Forward, 3 = Backward,
	 *	4 = Strafe Left, 5 = Strafe Right, 6 = Crouch, 7 = Alt Fire (Doesn't work), 8 = Scope Zoom In, 9 = Scope Zoom Out
	 */
	const uint16 ButtonHeldTime(const int buttonID);

	/**
	 * @brief Returns the button input flags for the player.
	 */
	const EnumPlayerButtons Buttons();
	
	/**
	 * @brief Returns the amount of alt ammo the player has for the specified weapon
	 */
	const int GetAltAmmo(const int weaponID);
	
	/**
	 * @brief Returns the amount of primary ammo the player has for the specified weapon
	 */
	const int GetAmmo(const int weaponID);
	
	/**
	 * @brief Reduces alt ammo by \a amount for the current weapon
	 */
	void ConsumeAltAmmo(const int amount);
	
	/**
	 * @brief Reduces primary ammo by \a amount for the current weapon
	 */
	void ConsumeAmmo(const int amount);
	
	/**
	 * @brief Returns the current weapons ID defined in weaponInfo.txt
	 */
	const int CurrentWeaponID();
	
	/**
	 * @brief Gives the specified weapon to the player and adds \a ammoAmount to the weapons primary ammo type.
	 */
	bool GiveWeapon(const int weaponID, const int ammoAmount);
	
	/**
	 * @brief Returns true if has the weapon
	 */
	const bool HasWeapon(const int weaponID);
	
	/**
	 * @brief Returns true if alt ammo for the current weapon is > 0
	 */
	const bool HasAltAmmo(const int weaponID);
	
	/**
	 * @brief Returns true if prmary ammo for the current weapon is > 0
	 */
	const bool HasAmmo(const int weaponID);

};
