-------------------------------------------------------------------------------------- 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 --------------------------------------------------------------------------------------
| 316 | // originShift - world origin shif compared to previous frame |
| 317 | // -------------------------------------------------------------------------------------- |
| 318 | void 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 | } |
nothing calls this directly
no test coverage detected