Esempio n. 1
0
 private void FixedUpdate()
 {
     for (int part_idx = 0; part_idx < m_LJRigidbodies.Count; part_idx++)
     {
         Rigidbody ljrigid      = m_LJRigidbodies[part_idx];
         Vector3   accelerate   = -m_ScaledGammas[part_idx] * ljrigid.velocity;
         Vector3   random_force = new Vector3(m_NormalizedRandom.Generate(),
                                              m_NormalizedRandom.Generate(),
                                              m_NormalizedRandom.Generate());
         accelerate += m_NoiseCoefs[part_idx] * random_force;
         ljrigid.AddForce(accelerate, ForceMode.Acceleration);
     }
 }
Esempio n. 2
0
        // This method generate BaseParticle in system by side effect.
        internal List <GameObject> GenerateBaseParticles(GameObject original_base_particle, float kb_scaled)
        {
            var return_list = new List <GameObject>();

            var temperature = SystemTable.Get <TomlTable>("attributes").Get <float>("temperature");

            List <TomlTable> particles = SystemTable.Get <List <TomlTable> >("particles");

            foreach (TomlTable particle_info in particles)
            {
                var        position     = particle_info.Get <List <float> >("pos");
                GameObject new_particle =
                    GameObject.Instantiate(original_base_particle,
                                           new Vector3(position[0], position[1], position[2]),
                                           original_base_particle.transform.rotation);

                // initialize particle velocity
                Rigidbody new_rigid = new_particle.GetComponent <Rigidbody>();
                new_rigid.mass = particle_info.Get <float>("m");
                if (particle_info.ContainsKey("vel"))
                {
                    var velocity = particle_info.Get <List <float> >("vel");
                    new_rigid.velocity = new Vector3(velocity[0], velocity[1], velocity[2]);
                }
                else
                {
                    float sigma = Mathf.Sqrt(kb_scaled * temperature / new_rigid.mass);
                    new_rigid.velocity = new Vector3(Rng.Generate() * sigma,
                                                     Rng.Generate() * sigma,
                                                     Rng.Generate() * sigma);
                }
                return_list.Add(new_particle);
            }

            return(return_list);
        }