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(); } }
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 (); }