//-------------------------------------------- void CC4Projectile::Launch(const Vec3 &pos, const Vec3 &dir, const Vec3 &velocity, float speedScale) { CProjectile::Launch(pos, dir, velocity, speedScale); if(!gEnv->bMultiplayer) { //don't want the hud grenade indicator on c4 in multiplayer OnLaunch(); } if(m_pAmmoParams->armTime > 0.f) { GetEntity()->SetTimer(ePTIMER_ACTIVATION, (int)(m_pAmmoParams->armTime*1000.f)); Arm(false); } else { Arm(true); } //Set up armed/disarmed materials and set material based on initial armed state if(SC4ExplosiveParams* pExplosiveParams = m_pAmmoParams->pC4ExplosiveParams) { if(int count = GetEntity()->GetSlotCount()) { for(int i = 0; i < count; i++) { SEntitySlotInfo info; GetEntity()->GetSlotInfo(i, info); if(info.pStatObj) { IMaterial* pMaterial = info.pStatObj->GetMaterial(); if(pMaterial) { m_pStatObj = info.pStatObj; m_pStatObj->AddRef(); IMaterialManager* pMatManager = gEnv->p3DEngine->GetMaterialManager(); if( m_pArmedMaterial = pMatManager->LoadMaterial(pExplosiveParams->armedMaterial, false) ) { m_pArmedMaterial->AddRef(); } if( m_pDisarmedMaterial = pMatManager->LoadMaterial(pExplosiveParams->disarmedMaterial, false) ) { m_pDisarmedMaterial->AddRef(); } info.pStatObj->SetMaterial(m_armed ? m_pArmedMaterial : m_pDisarmedMaterial); break; } } } } } }
//-------------------------------------------------------------------------------------------------- // Name: LoadMaterial // Desc: Loads and calls AddRef on material //-------------------------------------------------------------------------------------------------- IMaterial* CGameEffect::LoadMaterial(const char* pMaterialName) { IMaterial* pMaterial = NULL; I3DEngine* p3DEngine = gEnv->p3DEngine; if(pMaterialName && p3DEngine) { IMaterialManager* pMaterialManager = p3DEngine->GetMaterialManager(); if(pMaterialManager) { pMaterial = pMaterialManager->LoadMaterial(pMaterialName); if(pMaterial) { pMaterial->AddRef(); } } } return pMaterial; }//-------------------------------------------------------------------------------------------------
void CTeamVisualizationManager::InitTeamVisualizationData( XmlNodeRef xmlNode ) { if(m_teamVisualizationPartsMap.empty()) { IMaterialManager *pMaterialManager = gEnv->p3DEngine->GetMaterialManager(); // Parse Team vis data and add to m_teamVisualizationPartsMap; XmlNodeRef pPlayerTeamVisualization = xmlNode->findChild("PlayerTeamVisualization"); DesignerWarning(pPlayerTeamVisualization, "expected to find <PlayerTeamVisualization> </PlayerTeamVisualization>, not found"); if(pPlayerTeamVisualization) { Crc32Gen* pCRCGen = gEnv->pSystem->GetCrc32Gen(); // Grab each model setup node const int modelCount = pPlayerTeamVisualization->getChildCount(); for(int i = 0; i < modelCount; ++i) { XmlNodeRef pModelSetup = pPlayerTeamVisualization->getChild(i); if(pModelSetup) { // Friendly XmlNodeRef friendlyNode = pModelSetup->findChild("Friendly"); DesignerWarning(friendlyNode, "missing <Friendly> </Friendly> tags in model setup <%d> - PlayerTeamVisualization.xml", i); if(friendlyNode) { // Hostile XmlNodeRef hostileNode = pModelSetup->findChild("Hostile"); DesignerWarning(hostileNode, "missing <Hostile> </Hostile> tags in model setup <%d> - PlayerTeamVisualization.xml", i); if(hostileNode) { XmlNodeRef attachmentsNode = pModelSetup->findChild("BodyAttachments"); const int numAttachments = attachmentsNode->getChildCount(); DesignerWarning(attachmentsNode && numAttachments > 0, "missing <BodyAttachments> </bodyAttachments> tags in model setup <%d> or no child <BodyAttachment> elements - PlayerTeamVisualization.xml", i); if(attachmentsNode && numAttachments > 0) { const char* pModelName = pModelSetup->getAttr("name"); DesignerWarning(pModelName && pModelName[0], "missing <Model> tag - or <Model name=""> attribute invalid - in model setup <%d> - PlayerTeamVisualization.xml", i); if(pModelName && pModelName[0]) { // Add new + Fill in details TModelNameCRC modelNameCRC = pCRCGen->GetCRC32Lowercase(pModelName); CRY_ASSERT(m_teamVisualizationPartsMap.find(modelNameCRC) == m_teamVisualizationPartsMap.end()); m_teamVisualizationPartsMap[modelNameCRC] = SModelMaterialSetup(); SModelMaterialSetup& newConfig = m_teamVisualizationPartsMap[modelNameCRC]; // Get materials newConfig.SetMaterial(eMI_AliveFriendly, pMaterialManager->LoadMaterial(friendlyNode->getAttr("MaterialName"))); newConfig.SetMaterial(eMI_AliveHostile, pMaterialManager->LoadMaterial(hostileNode->getAttr("MaterialName"))); // Hostile XmlNodeRef deadFriendlyNode = pModelSetup->findChild("DeadFriendly"); DesignerWarning(deadFriendlyNode, "missing <DeadFriendly> </DeadFriendly> tags in model setup <%d> - PlayerTeamVisualization.xml", i); if(deadFriendlyNode) { newConfig.SetMaterial(eMI_DeadFriendly, pMaterialManager->LoadMaterial(deadFriendlyNode->getAttr("MaterialName"))); } XmlNodeRef deadHostileNode = pModelSetup->findChild("DeadHostile"); DesignerWarning(deadHostileNode, "missing <deadHostileNode> </deadHostileNode> tags in model setup <%d> - PlayerTeamVisualization.xml", i); if(deadHostileNode) { newConfig.SetMaterial(eMI_DeadHostile, pMaterialManager->LoadMaterial(deadHostileNode->getAttr("MaterialName"))); } // Attachments newConfig.m_attachments.reserve(numAttachments); for(int j = 0; j < numAttachments; ++j) { XmlNodeRef attachmentNode = attachmentsNode->getChild(j); newConfig.m_attachments.push_back(pCRCGen->GetCRC32Lowercase(attachmentNode->getAttr("name"))); } continue; } } } } } } } } }