void Dispatch(bool emit) { Profiler.BeginSample("Dispatch loop"); PartEmitter.UpdateParticleBursts(); BindParticles(); if (emit) { PartEmitter.UpdatePlayEvent(); } if (!NoSimulation) { //Dispatch the update kernel. SetPariclesToKernel(ComputeShader, UpdateAllKernel); Profiler.BeginSample("Main update"); ComputeShader.Dispatch(UpdateAllKernel, DispatchCount, 1, 1); Profiler.EndSample(); ColliderManager.Dispatch(); ForceManager.Dispatch(); } Profiler.EndSample(); }
void UpdateParticles(float deltTime) { Profiler.BeginSample("Update particles"); ParticleTimeDelta = deltTime; SystemTime += ParticleTimeDelta; RealTime += ParticleTimeDelta; if (SystemTime >= Duration) { if (looping) { SystemTime %= Duration; PartEmitter.PlayEvent(); m_isPlaying = true; } else { m_isPlaying = false; } } Dispatch(true); Profiler.EndSample(); }
public void Emit(int count) { if (UseShuriken) { shurikenFallback.Emit(count); return; } PartEmitter.Emit(count); }
public void Clear(bool withChildren = true) { if (UseShuriken) { shurikenFallback.Clear(withChildren); return; } PartEmitter.ClearAllEmittedParticles(); if (withChildren) { Children.ForEach(s => s.Clear()); } }
IEnumerator PlayRoutine() { if (delay != 0.0f) { yield return(new WaitForSeconds(delay)); } if (SystemTime >= Duration && !looping) { ResetPlayTime(); } PartEmitter.PlayEvent(); if (prewarm) { Simulate(Duration, false); } m_isPlaying = true; }