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

weapon_fists.script

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

// blend times
#define FISTS_IDLE_TO_LOWER		4
#define FISTS_IDLE_TO_PUNCH		0
#define FISTS_RAISE_TO_IDLE		4
#define FISTS_PUNCH_TO_IDLE		1

object weapon_fists : weapon_base {
	float		side;

	void		init();
	
	void		Lower();
	void		Raise();
	void		Idle();
	void		Fire();
	void		ExitCinematic();
	string		GetFireAnim();
};

void weapon_fists::init() {
	weaponState( "Raise", 0 );
}

void weapon_fists::Raise() {
	weaponRising();
	playAnim( ANIMCHANNEL_ALL, "raise" );
	waitUntil( animDone( ANIMCHANNEL_ALL, FISTS_RAISE_TO_IDLE ) );
	weaponState( "Idle", FISTS_RAISE_TO_IDLE );
}

void weapon_fists::Lower() {
	weaponLowering();
	playAnim( ANIMCHANNEL_ALL, "putaway" );
	waitUntil( animDone( ANIMCHANNEL_ALL, 0 ) );
	weaponHolstered();
	waitUntil( WEAPON_RAISEWEAPON );
	weaponState( "Raise", 0 );
}

void weapon_fists::Idle() {
	weaponReady();
	playCycle( ANIMCHANNEL_ALL, "idle" );
	while( 1 ) {
		if ( WEAPON_LOWERWEAPON ) {
			weaponState( "Lower", FISTS_IDLE_TO_LOWER );
		}
		if ( WEAPON_ATTACK || WEAPON_NETFIRING ) {
			weaponState( "Fire", FISTS_IDLE_TO_PUNCH );
		}
		waitFrame();
	}
}

void weapon_fists::Fire() {
	playAnim( ANIMCHANNEL_ALL, GetFireAnim() );
	sys.wait( 0.1 );
	melee();
	waitUntil( animDone( ANIMCHANNEL_ALL, FISTS_PUNCH_TO_IDLE ) );
	side = !side;
	weaponState( "Idle", FISTS_PUNCH_TO_IDLE );
}

void weapon_fists::ExitCinematic() {
	weaponState( "Idle", 0 );
}

string weapon_fists::GetFireAnim() {
	if ( side ) {
		return "punch_left";
	} else {
		return "punch_right";
	}
}
