class KFzoom extends SniperZoom;

event ModeDoFire()
{
	if (!AllowFire())
		return;

	if (MaxHoldTime > 0.0)
		HoldTime = FMin(HoldTime, MaxHoldTime);

	// server
	if (Weapon.Role == ROLE_Authority)
	{
		HoldTime = 0;   // if bot decides to stop firing, HoldTime must be reset first
		if ( (Instigator == None) || (Instigator.Controller == None) )
			return;

		if ( AIController(Instigator.Controller) != None )
			AIController(Instigator.Controller).WeaponFireAgain(BotRefireRate, true);

		Instigator.DeactivateSpawnProtection();
	}
	// client
	if (Instigator.IsLocallyControlled())
	{
		if( KFWeapon(Weapon)!=none )
		{
			KFWeapon(Weapon).bAimingRifle = True;
			KFWeapon(Weapon).ServerSetAiming(True);
			KFWeapon(Weapon).PlayAnimZoom(True);
		}
		if( KFHumanPawn(Instigator)!=None )
			KFHumanPawn(Instigator).SetAiming(True);
	}


       // Weapon.IncrementFlashCount(ThisModeNum);

	// set the next firing time. must be careful here so client and server do not get out of sync
	if (bFireOnRelease)
	{
		if (bIsFiring)
			NextFireTime += MaxHoldTime + FireRate;
		else NextFireTime = Level.TimeSeconds + FireRate;
	}
	else
	{
		NextFireTime += FireRate;
		NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
	}
	Load = AmmoPerFire;
	HoldTime = 0;

	if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != None)
	{
		bIsFiring = false;
		Weapon.PutDown();
	}
}

function PlayFireEnd()
{
	if( KFWeapon(Weapon)!=none )
	{
		KFWeapon(Weapon).bAimingRifle = False;
		KFWeapon(Weapon).ServerSetAiming(False);
		KFWeapon(Weapon).PlayAnimZoom(False);
	}
	if( KFHumanPawn(Instigator)!=None )
		KFHumanPawn(Instigator).SetAiming(False);
		

	Super.PlayFireEnd();
}

simulated function bool AllowFire()
{
	if (Weapon.Owner.Physics == PHYS_Falling)
		return false;
	if( KFWeapon(Weapon).bIsReloading || !KFWeapon(Weapon).CanZoomNow() )
		return false; 
	return true;
}



defaultproperties
{
     FireAnim="raise"
     FireSound=Sound'KFPlayerSound.getweaponout3'
     FireRate=0.5
     BotRefireRate=0.500000
}
