void AppGUI::Tick(RenderEngine& engine) { UpdateShader(engine); switch (m_cache->PageSelected.Get()) { case PAGE_SCENE: UpdateScene(engine); break; case PAGE_AREA: UpdateTerrain(engine); UpdateTexture(engine); break; case PAGE_MESH: UpdateMesh(); UpdateWater(); UpdateEmitter(); break; case PAGE_POST: UpdateLight(); UpdatePost(engine); break; } }
LTBOOL CGibFX::Update() { if (!m_pClientDE) return LTFALSE; LTFLOAT fTime = m_pClientDE->GetTime(); if (m_bFirstUpdate) { m_bFirstUpdate = LTFALSE; m_fStartTime = fTime; m_fLastTime = fTime; } // Check to see if we should start fading the Gib... if (fTime > m_fStartTime + m_fFadeTime) { int i; for (i=0; i < m_nNumGibs; i++) { LTFLOAT fEndTime = m_fStartTime + m_fGibLife[i]; if (fTime > fEndTime) { if (OkToRemoveGib(m_hGib[i])) { if (m_hGib[i]) { m_pClientDE->DeleteObject(m_hGib[i]); m_hGib[i] = LTNULL; } } } } // See if all the gibs have been removed or not... for (i=0; i < m_nNumGibs; i++) { if (m_hGib[i]) break; } // All gibs have been removed so remove us... if (i == m_nNumGibs) { RemoveAllFX(); return LTFALSE; } // #define FADING_GIBS #ifdef FADING_GIBS LTFLOAT fScale = (fEndTime - fTime) / (m_fLifeTime - m_fFadeTime); LTFLOAT r, g, b, a; for (int i=0; i < m_nNumGibs; i++) { if (m_hGib[i]) { m_pClientDE->GetObjectColor(m_hGib[i], &r, &g, &b, &a); m_pClientDE->SetObjectColor(m_hGib[i], r, g, b, fScale); } } #endif } // Loop over our list of emitters, updating the position of each for (int i=0; i < m_nNumGibs; i++) { if (m_ActiveEmitters[i]) { LTBOOL bBounced = LTFALSE; if (bBounced = UpdateEmitter(&m_Emitters[i])) { HandleBounce(i); } UpdateGib(i, bBounced); } } return LTTRUE; }
LTBOOL CParticleExplosionFX::Update() { if (!m_hObject || !m_pClientDE) return LTFALSE; if (!CBaseParticleSystemFX::Update()) return LTFALSE; LTFLOAT fTime = m_pClientDE->GetTime(); if (m_bFirstUpdate) { m_bFirstUpdate = LTFALSE; m_fStartTime = fTime; m_fLastTime = fTime; } // Check to see if we should start fading the system... if (fTime > m_fStartTime + m_fFadeTime) { LTFLOAT fEndTime = m_fStartTime + m_fLifeTime; if (fTime > fEndTime) { return LTFALSE; } LTFLOAT fScale = (fEndTime - fTime) / (m_fLifeTime - m_fFadeTime); LTFLOAT r, g, b, a; m_pClientDE->GetObjectColor(m_hObject, &r, &g, &b, &a); m_pClientDE->SetObjectColor(m_hObject, r, g, b, fScale); } // See if it is time to create a new Particle puff... if (fTime >= m_fLastTime + m_fOffsetTime) { // Loop over our list of Emitters, creating new particles... for (int i=0; i < m_nNumEmitters; i++) { if (m_ActiveEmitters[i]) { AddParticles(&m_Emitters[i]); } } m_fLastTime = fTime; } // Loop over our list of Emitters, updating the position of each for (int i=0; i < m_nNumEmitters; i++) { if (m_ActiveEmitters[i]) { LTBOOL bBounced = LTFALSE; if (bBounced = UpdateEmitter(&m_Emitters[i])) { if (!(m_Emitters[i].m_dwPhysicsFlags & MO_LIQUID) && (m_hDebris[i])) { /* char* pSound = GetDebrisBounceSound(DBT_STONE_BIG); // Play appropriate sound... g_pClientSoundMgr->PlaySoundFromPos(m_Emitters[i].m_Pos, pSound, 300.0f, SOUNDPRIORITY_MISC_LOW); */ } m_BounceCount[i]--; if (m_BounceCount[i] <= 0) { m_Emitters[i].m_dwPhysicsFlags |= MO_RESTING; } } if (m_Emitters[i].m_dwPhysicsFlags & MO_RESTING) { m_ActiveEmitters[i] = LTFALSE; if (m_hDebris[i]) { m_pClientDE->DeleteObject(m_hDebris[i]); m_hDebris[i] = LTNULL; } } else if (m_hDebris[i]) { m_pClientDE->SetObjectPos(m_hDebris[i], &(m_Emitters[i].m_vPos)); if (m_bRotateDebris) { if (bBounced) { // Adjust due to the bounce... m_fPitchVel = GetRandom(-MATH_CIRCLE, MATH_CIRCLE); m_fYawVel = GetRandom(-MATH_CIRCLE, MATH_CIRCLE); } if (m_fPitchVel != 0 || m_fYawVel != 0) { LTFLOAT fDeltaTime = g_pGameClientShell->GetFrameTime(); m_fPitch += m_fPitchVel * fDeltaTime; m_fYaw += m_fYawVel * fDeltaTime; LTRotation rRot; m_pClientDE->SetupEuler(&rRot, m_fPitch, m_fYaw, 0.0f); m_pClientDE->SetObjectRotation(m_hDebris[i], &rRot); } } } } } return LTTRUE; }
void ParticleEmitterInstance::Update(float aDeltaTime, const CU::Matrix44f& aWorldMatrix) { UpdateEmitter(aDeltaTime,aWorldMatrix); }