LTVector CWeaponFX::CalcFirePos(LTVector vFirePos) { if (!m_hFiredFrom) return vFirePos; // See if this is our local client who fired, and if so // only calculate fire position if we are in 3rd person... if (m_nLocalId == m_nShooterId) { if (g_pGameClientShell->IsFirstPerson()) return vFirePos; } LTVector vPos; LTRotation rRot; if (!GetAttachmentSocketTransform(m_hFiredFrom, "Flash", vPos, rRot)) { vPos = vFirePos; } return vPos; }
LTBOOL CMuzzleFlashFX::Update() { if (!m_pClientDE || m_bHidden) return LTFALSE; // If we we're not a player-view muzzle fx, If our // server object has been removed, we should go away... if (!m_cs.bPlayerView && !m_hServerObject) return LTFALSE; // Set/Clear the FLAG_REALLYCLOSE if (m_bUsingParticles && m_Particle.GetObject()) { uint32 dwFlags = m_pClientDE->GetObjectFlags(m_Particle.GetObject()); if (m_cs.bPlayerView) { if (g_vtReallyClose.GetFloat()) { m_pClientDE->SetObjectFlags(m_Particle.GetObject(), dwFlags | FLAG_REALLYCLOSE); } else { m_pClientDE->SetObjectFlags(m_Particle.GetObject(), dwFlags & ~FLAG_REALLYCLOSE); } } else { m_pClientDE->SetObjectFlags(m_Particle.GetObject(), dwFlags & ~FLAG_REALLYCLOSE); } } if (m_bUsingScale && m_Scale.GetObject()) { uint32 dwFlags = m_pClientDE->GetObjectFlags(m_Scale.GetObject()); if (m_cs.bPlayerView) { m_pClientDE->SetObjectFlags(m_Scale.GetObject(), dwFlags | FLAG_REALLYCLOSE); } else { m_pClientDE->SetObjectFlags(m_Scale.GetObject(), dwFlags & ~FLAG_REALLYCLOSE); } } // Update all the fx, and see if we're done... LTBOOL bParticleDone = m_bUsingParticles ? !m_Particle.Update() : LTTRUE; LTBOOL bLightDone = m_bUsingLight ? !m_Light.Update() : LTTRUE; LTBOOL bScaleDone = m_bUsingScale ? !m_Scale.Update() : LTTRUE; // Keep the objects in the correct place... if (!m_cs.bPlayerView && m_cs.hParent) { HOBJECT hObj; LTRotation rRot; LTVector vPos; GetAttachmentSocketTransform(m_cs.hParent, "Flash", vPos, rRot); if (m_bUsingScale) { hObj = m_Scale.GetObject(); if (hObj) { m_pClientDE->SetObjectPos(hObj, &vPos); m_pClientDE->SetObjectRotation(hObj, &rRot); } } if (m_bUsingParticles) { hObj = m_Particle.GetObject(); if (hObj) { m_pClientDE->SetObjectPos(hObj, &vPos); m_pClientDE->SetObjectRotation(hObj, &rRot); } } if (m_bUsingLight) { hObj = m_Light.GetObject(); if (hObj) { m_pClientDE->SetObjectPos(hObj, &vPos); } } } return !(bParticleDone && bLightDone && bScaleDone); }