private void Collide(Planet p1, Planet p2) { if (p1.GetHashCode() == p2.GetHashCode()) { return; } if (p1.mass < p2.mass) { Planet tmp = p1; p1 = p2; p2 = tmp; } else if (p1.mass == p2.mass) { p2.mass -= p2.mass * 0.001f; } ObjectWithRadius p1r = p1.GetComponent <ObjectWithRadius>(); ObjectWithRadius p2r = p2.GetComponent <ObjectWithRadius>(); SpaceObject p1so = p1.GetComponent <SpaceObject>(); SpaceObject p2so = p2.GetComponent <SpaceObject>(); float dist = (p1.transform.position - p2.transform.position).magnitude; float pct = (1.0f - dist / (p1r.radius + p2r.radius)) * Time.deltaTime; float msum = p1.mass + p2.mass; if (dist > p1r.radius * 0.1f) { p1.mass += p2.mass * pct; p2.mass -= p2.mass * pct; float p2vol = 4.0f / 3.0f * Mathf.PI * Mathf.Pow(p2r.radius, 3.0f) * pct; float p1vol = 4.0f / 3.0f * Mathf.PI * Mathf.Pow(p1r.radius, 3.0f); float p1rad = Mathf.Pow((p1vol + p2vol) * 3.0f / 4.0f / Mathf.PI, 1.0f / 3.0f); p1r.radius += p1rad - p1r.radius; p2r.radius -= p2r.radius * pct; p1so.spd += p2so.spd * pct * p2.mass / msum; //p2so.spd-=p2so.spd*pct*p2.mass/msum-p1so.spd*pct*p1.mass/msum; } else { //p1.mass+=p2.mass; //p1r.radius+=p2r.radius; //p1so.spd+=p2so.spd*p2.mass/msum; Destroy(p2.gameObject); return; } }
// Use this for initialization void Start() { owr = GetComponent <ObjectWithRadius>(); if (damage <= 0.0f) { damage = 0.1f; } if (ttl <= 0.0f) { ttl = 10.0f; } }
// Use this for initialization void Start() { float radius = (transform.localScale.x + transform.localScale.y + transform.localScale.z) / 3.0f; owr = GetComponent <ObjectWithRadius>(); scaletoradius = radius / owr.radius; print("Planet aspect: " + scaletoradius); if (parent) { parent.children.Add(this); } }