void CKVoltEffect::ResetScreenEffect() { if(m_screenEffect && m_ownerActor->IsClient()) { IAttachment* screenAttachment = GetScreenAttachment(); if(screenAttachment) { CEffectAttachment* pEffectAttachment = new CEffectAttachment(m_screenEffect->GetName(), Vec3(0,0,0), Vec3(0,1,0), 1.f); if (pEffectAttachment->GetEmitter()) { screenAttachment->AddBinding(pEffectAttachment); pEffectAttachment->ProcessAttachment(screenAttachment); } else { delete pEffectAttachment; } } else { GameWarning("Failed to find #camera attachment"); } //FadeCrosshair(); DisableScopeReticule(); } }
TAttachedEffectId CEffectsController::AttachParticleEffect(IParticleEffect* pParticleEffect, const int targetSlot, const char *helperName, const SEffectAttachParams &attachParams) { CRY_ASSERT(m_pOwnerEntity); if (pParticleEffect) { SEntitySlotInfo slotInfo; SEffectInfo effectInfo; const bool validSlot = m_pOwnerEntity->GetSlotInfo(targetSlot, slotInfo); if (!validSlot || slotInfo.pStatObj) { //Get helper position on static object (if any) Vec3 localHelperPosition = attachParams.offset; if (validSlot) { const Matrix34& localSlotMtx = m_pOwnerEntity->GetSlotLocalTM(targetSlot, false); localHelperPosition = slotInfo.pStatObj->GetHelperPos(helperName) + attachParams.offset; localHelperPosition = localSlotMtx.TransformPoint(localHelperPosition); } int attachSlot = FindSafeSlot(attachParams.firstSafeSlot); //Offset particle to desired location effectInfo.entityEffectSlot = m_pOwnerEntity->LoadParticleEmitter(attachSlot, pParticleEffect, 0, attachParams.prime, false); Matrix34 localEffectMtx(IParticleEffect::ParticleLoc(localHelperPosition, attachParams.direction, attachParams.scale)); m_pOwnerEntity->SetSlotLocalTM(effectInfo.entityEffectSlot, localEffectMtx); ++m_effectGeneratorId; effectInfo.id = m_effectGeneratorId; m_attachedEffects.push_back(effectInfo); return m_effectGeneratorId; } else if (slotInfo.pCharacter) { IAttachmentManager *pAttachmentManager = slotInfo.pCharacter->GetIAttachmentManager(); IAttachment *pAttachment = pAttachmentManager->GetInterfaceByName(helperName); if (pAttachment) { CEffectAttachment *pEffectAttachment = new CEffectAttachment(pParticleEffect, attachParams.offset, attachParams.direction, attachParams.scale); if (attachParams.prime) { if (IParticleEmitter* pEmitter = pEffectAttachment->GetEmitter()) { pEmitter->Prime(); } } pAttachment->AddBinding(pEffectAttachment); pEffectAttachment->ProcessAttachment(pAttachment); } else { GameWarning("[EntityEffects] Can not attach '%s' to entity '%s', attachment point helper '%s' does not exist", pParticleEffect->GetName(), m_pOwnerEntity->GetName(), helperName); return 0; } ++m_effectGeneratorId; effectInfo.id = m_effectGeneratorId; effectInfo.characterEffectSlot = targetSlot; effectInfo.helperName = helperName; m_attachedEffects.push_back(effectInfo); return m_effectGeneratorId; } } return 0; }