//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); }
public void RemoveObject(LiquidParticles obj) { objects.Remove(obj); }
public void AddObject(LiquidParticles obj) { objects.Add(obj); }