static void ActualUpdate() { if (s_instances.Count == 0) { return; } foreach (SPWorld w in s_instances) { SPAPI.spEndUpdate(w.GetContext()); } foreach (SPWorld w in s_instances) { s_current = w; SPAPI.spCallHandlers(w.GetContext()); SPAPI.spClearCollidersAndForces(w.GetContext()); w.CallUpdateRoutines(); w.UpdateKernelParams(); s_current = null; } UpdateSPObjects(); foreach (SPWorld w in s_instances) { SPAPI.spBeginUpdate(w.GetContext(), Time.deltaTime); } }
public override void OnEnable() { m_world = GetComponent <SPWorld>(); m_max_instances = m_world.m_max_particle_num; base.OnEnable(); ResetGPUResoures(); }
public unsafe void PropagateHit(ref SPParticle particle) { Vector3 f = SPAPI.spGetIntermediateData(SPWorld.GetCurrentContext())->accel *SPWorld.GetCurrent().m_particle_mass; if (m_rigid3d != null) { m_rigid3d.AddForceAtPosition(f, particle.position); } if (m_rigid2d != null) { m_rigid2d.AddForceAtPosition(f, particle.position); } }
public void PropagateForce(ref SPParticleForce force) { Vector3 pos = force.position_average; Vector3 f = force.force * SPWorld.GetCurrent().m_particle_mass; if (m_rigid3d != null) { m_rigid3d.AddForceAtPosition(f, pos); } if (m_rigid2d != null) { m_rigid2d.AddForceAtPosition(f, pos); } }