Example #1
0
void CWeaponMagazined::FireStart()
{
	if (IsValid() && !IsMisfire())
	{
		if (!IsWorking() || AllowFireWhileWorking())
		{
			if (GetState() == eReload) return;
			if (GetState() == eShowing) return;
			if (GetState() == eHiding) return;
			if (GetState() == eMisfire) return;

			inherited::FireStart();

			if (iAmmoElapsed == 0)
				OnMagazineEmpty();
			else
				SwitchState(eFire);
		}
	}
	else
	{
		if (eReload != GetState() && eMisfire != GetState()) OnMagazineEmpty();
	}
}
Example #2
0
void CWeaponMagazined::UpdateCL			()
{
	inherited::UpdateCL	();
	float dt = Device.fTimeDelta;

	

	//когда происходит апдейт состояния оружия
	//ничего другого не делать
	if(GetNextState() == GetState())
	{
		switch (GetState())
		{
		case eShowing:
		case eHiding:
		case eReload:
		case eIdle:
			fTime			-=	dt;
			if (fTime<0)	
				fTime = 0;
			break;
		case eFire:			
			if(iAmmoElapsed>0)
				state_Fire		(dt);
			
			if(fTime<=0)
			{
				if(iAmmoElapsed == 0)
					OnMagazineEmpty();
				StopShooting();
			}
			else
			{
				fTime			-=	dt;
			}

			break;
		case eMisfire:		state_Misfire	(dt);	break;
		case eMagEmpty:		state_MagEmpty	(dt);	break;
		case eHidden:		break;
		}
	}

	UpdateSounds		();
}