예제 #1
0
        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);
            }
        }
예제 #2
0
        public override void OnEnable()
        {
            m_world         = GetComponent <SPWorld>();
            m_max_instances = m_world.m_max_particle_num;

            base.OnEnable();
            ResetGPUResoures();
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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);
            }
        }