MCPcopy Create free account
hub / github.com/carbonengine/trinity / Update

Method Update

trinity/Particle/Tr2GpuParticleSystem.cpp:318–375  ·  view source on GitHub ↗

-------------------------------------------------------------------------------------- Description: Updates particle system. Optionally clears the system, emits new particles, runs physics simulation does sorting. Arguments: time - Current time originShift - world origin shif compared to previous frame --------------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

316// originShift - world origin shif compared to previous frame
317// --------------------------------------------------------------------------------------
318void Tr2GpuParticleSystem::Update( Be::Time time, const Vector3& originShift, Tr2RenderContext& renderContext )
319{
320 if( !CheckEffect( m_emit ) || !CheckEffect( m_update ) || !CheckEffect( m_clear ) || !CheckEffect( m_setDrawParameters ) )
321 {
322 return;
323 }
324
325 float dt = ( m_previousTime == Be::Time( -1 ) || !m_enableUpdate ) ? 0 : TimeAsFloat( time - m_previousTime );
326 dt = std::min( dt, MAXIMUM_FRAME_TIME );
327 m_previousTime = time;
328
329 if( m_clearRequested )
330 {
331 if( !DoClear( renderContext ) )
332 {
333 return;
334 }
335 m_clearRequested = false;
336 m_turbulenceOffset = Vector3( 0.f, 0.f, 0.f );
337 }
338
339 m_turbulenceOffset -= originShift;
340 m_turbulenceOffset /= MAX_TURBULENCE_LENGTH;
341 m_turbulenceOffset.x -= floor( m_turbulenceOffset.x );
342 m_turbulenceOffset.y -= floor( m_turbulenceOffset.y );
343 m_turbulenceOffset.z -= floor( m_turbulenceOffset.z );
344 m_turbulenceOffset *= MAX_TURBULENCE_LENGTH;
345
346 m_turbulenceAnimation.z += dt * TURBULENCE_ANIMATION_SPEED;
347
348 ExpireEmitterParams( dt );
349 if( m_enableEmit )
350 {
351 UpdateEmitterParams( renderContext );
352 EmitParticles( renderContext );
353 }
354 m_emitRequests.Clear();
355
356 if( m_liveTime <= 0.f )
357 {
358 // no particles left alive
359 return;
360 }
361
362 RunSimulation( dt, originShift, renderContext );
363
364 m_liveTime -= dt;
365
366 if( m_enableSort )
367 {
368 Sort( renderContext );
369 }
370
371 // prepare draw arguments for Render
372 Tr2Renderer::RunComputeShader( m_setDrawParameters, 1, 1, 1, renderContext );
373
374 UpdateLiveCount( renderContext );
375}

Callers

nothing calls this directly

Calls 3

CheckEffectFunction · 0.85
Vector3Class · 0.50
ClearMethod · 0.45

Tested by

no test coverage detected