/***********************************************************************

weapon_base.script

Base object for weapons.  Contains variables required by game code.

***********************************************************************/

object weapon_base {
				// required by game
	boolean		WEAPON_ATTACK;
	boolean		WEAPON_RELOAD;
	boolean		WEAPON_NETRELOAD;
	boolean		WEAPON_NETENDRELOAD;
	boolean		WEAPON_NETFIRING;
	boolean		WEAPON_RAISEWEAPON;
	boolean		WEAPON_LOWERWEAPON;

				// required by player script.
	boolean		WEAPON_START_FIRING;

				// called by game
	void		EnterCinematic();
	void		ExitCinematic();
	void		NetCatchup();
	void		WeaponStolen();
	void		OwnerDied();
	void		UpdateSkin();

				// called by player script
	string		GetFireAnim();
};

/*
=====================
weapon_base::EnterCinematic

Required by game code for cinematics.  Implemented in subclasses.
=====================
*/
void weapon_base::EnterCinematic() {
}

/*
=====================
weapon_base::ExitCinematic

Required by game code for cinematics.  Implemented in subclasses.
=====================
*/
void weapon_base::ExitCinematic() {
}

/*
=====================
weapon_base::NetCatchup

Required by game code for networking.  Implemented in subclasses.
=====================
*/
void weapon_base::NetCatchup() {
	weaponState( "Idle", 0 );
}

/*
=====================
weapon_base::WeaponStolen

Required by game code for multiplayer when weapon is stolen.  Implemented in subclasses.
=====================
*/
void weapon_base::WeaponStolen() {
}

/*
=====================
weapon_base::OwnerDied

Required by game code for when the weapon owner dies.  Implemented in subclasses.
Script is destroyed right after this is called, so any code must execute in a single frame.
=====================
*/
void weapon_base::OwnerDied() {
}

/*
=====================
weapon_base::UpdateSkin

Required by game code for when the skin needs to change (for example, when the player has a power up).  Implemented in subclasses.
Code is called is only guaranteed to execute for one frame, so any code should either set the weapon state or start a new thread.
=====================
*/
void weapon_base::UpdateSkin() {
	if ( isInvisible() ) {
		setSkin( getKey( "skin_invisible" ) );
	} else {
		setSkin( "" );
	}
}

/*
=====================
weapon_base::GetFireAnim

Used by the player script to get the fire anim.  Subclasses can override this in order to sync the
viewmodel with the player model.
=====================
*/
string weapon_base::GetFireAnim() {
	return "fire";
}
