//------------------------------------------------------------------------ void CWeaponSystem::OnLoadingComplete(ILevel *pLevel) { // marcio: precaching of items enabled by default for now // ICVar *sys_preload=m_pSystem->GetIConsole()->GetCVar("sys_preload"); // if ((!sys_preload || sys_preload->GetIVal()) && m_pPrecache->GetIVal()) { for (TAmmoTypeParams::iterator it=m_ammoparams.begin(); it!=m_ammoparams.end(); ++it) { const SAmmoParams *pParams=GetAmmoParams(it->first); const IItemParamsNode *params = pParams->pItemParams; const IItemParamsNode *geometry = params?params->GetChild("geometry"):0; m_pItemSystem->CacheGeometry(geometry); // Preload particle assets. for (int ch = params->GetChildCount()-1; ch >= 0; ch--) { const IItemParamsNode *child = params->GetChild(ch); if (child) { CItemParamReader reader(child); const char *effect = 0; reader.Read("effect", effect); if (effect && *effect) gEnv->p3DEngine->FindParticleEffect(effect, "WeaponSystem"); } } } } m_frozenEnvironment = false; m_wetEnvironment = false; }
//------------------------------------------------------------------------ bool CWeaponSystem::IsServerSpawn(IEntityClass* pAmmoType) const { if (!pAmmoType) return false; if (const SAmmoParams *pAmmoParams=GetAmmoParams(pAmmoType)) return pAmmoParams->serverSpawn!=0; return false; }
//------------------------------------------------------------------------ void CWeaponSystem::OnLoadingComplete(ILevel *pLevel) { // marcio: precaching of items enabled by default for now // ICVar *sys_preload=gEnv->pConsole->GetCVar("sys_preload"); // if ((!sys_preload || sys_preload->GetIVal()) && m_pPrecache->GetIVal()) { for(TAmmoTypeParams::iterator it=m_ammoparams.begin(); it!=m_ammoparams.end(); ++it) { const SAmmoParams *pParams=GetAmmoParams(it->first); const IItemParamsNode *params = pParams->pItemParams; //Beni - Projectile Geometry is cached on demand, only if it's spawn at least once //const IItemParamsNode *geometry = params?params->GetChild("geometry"):0; //m_pItemSystem->CacheGeometry(geometry); // Preload particle assets. for(int ch = params->GetChildCount()-1; ch >= 0; ch--) { const IItemParamsNode *child = params->GetChild(ch); if(child) { CItemParamReader reader(child); const char *effect = 0; reader.Read("effect", effect); if(effect && *effect) gEnv->pParticleManager->FindEffect(effect, "WeaponSystem"); } } } } if(!m_tokensUpdated) { m_wetEnvironment = m_frozenEnvironment = false; ApplyEnvironmentChanges(); //Reset on loading new level CreateEnvironmentGameTokens(m_frozenEnvironment,m_wetEnvironment); //Do not force set/creation if exit } m_tokensUpdated = false; }
//------------------------------------------ void CC4Projectile::HandleEvent(const SGameObjectEvent &event) { if (CheckAnyProjectileFlags(ePFlag_destroying)) return; CProjectile::HandleEvent(event); if (event.event == eGFE_OnCollision) { EventPhysCollision *pCollision = (EventPhysCollision *)event.ptr; if(pCollision && pCollision->pEntity[0]->GetType()==PE_PARTICLE) { float bouncy, friction; uint32 pierceabilityMat; gEnv->pPhysicalWorld->GetSurfaceParameters(pCollision->idmat[1], bouncy, friction, pierceabilityMat); pierceabilityMat &= sf_pierceable_mask; uint32 pierceabilityProj = GetAmmoParams().pParticleParams ? GetAmmoParams().pParticleParams->iPierceability : 13; if (pierceabilityMat > pierceabilityProj) return; if(gEnv->bMultiplayer) { // Don't stick to weapons. if(pCollision->iForeignData[1]==PHYS_FOREIGN_ID_ENTITY) { if(IEntity* pEntity = (IEntity*)pCollision->pForeignData[1]) { if(IItem* pItem = g_pGame->GetIGameFramework()->GetIItemSystem()->GetItem(pEntity->GetId())) { if(pItem->GetIWeapon()) { return; } } } } } // Notify AI system about the C4. if (gEnv->pAISystem) { // Associate event with vehicle if the shooter is in a vehicle (tank cannon shot, etc) EntityId ownerId = m_ownerId; IActor* pActor = g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(ownerId); if (pActor && pActor->GetLinkedVehicle() && pActor->GetLinkedVehicle()->GetEntityId()) ownerId = pActor->GetLinkedVehicle()->GetEntityId(); SAIStimulus stim(AISTIM_EXPLOSION, 0, ownerId, GetEntityId(), GetEntity()->GetWorldPos(), ZERO, 12.0f, AISTIMPROC_ONLY_IF_VISIBLE); gEnv->pAISystem->RegisterStimulus(stim); SAIStimulus soundStim(AISTIM_SOUND, AISOUND_COLLISION, ownerId, GetEntityId(), GetEntity()->GetWorldPos(), ZERO, 8.0f); gEnv->pAISystem->RegisterStimulus(soundStim); } } if (gEnv->bServer && !m_stickyProjectile.IsStuck()) m_stickyProjectile.Stick( CStickyProjectile::SStickParams(this, pCollision, CStickyProjectile::eO_AlignToSurface)); } }