Ejemplo n.º 1
0
    //you may add your own rules instead of "Universal Gravitation"
    public Vector3 CalculateForce(LiquidParticles obj)
    {
        Vector3 f = g;

        foreach (LiquidParticles item in objects)
        {
            if (item != obj)
            {
                Vector3 dir = item.transform.position - obj.transform.position;
                float   r   = Mathf.Max(0.1f, Vector3.Distance(item.transform.position, obj.transform.position));

                if (r > item.radius + obj.radius)
                {
                    float ug = (float)(item.mass * obj.mass * weakForce);
                    //force dir: obj->item
                    f += dir.normalized * ug;
                }
                else if (r < (item.radius + obj.radius) / 3f)
                {
                    float ug = (float)(item.mass * obj.mass * strongForce);
                    //force dir: item->obj
                    f -= dir.normalized * ug;
                }
                else
                {
                    float ug = (float)(item.mass * obj.mass * dragForce);
                    //force dir: obj->item
                    f += dir.normalized * ug;
                }
            }
        }
        return(f);
    }
Ejemplo n.º 2
0
 public void RemoveObject(LiquidParticles obj)
 {
     objects.Remove(obj);
 }
Ejemplo n.º 3
0
 public void AddObject(LiquidParticles obj)
 {
     objects.Add(obj);
 }