示例#1
0
    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;
        }
    }
示例#2
0
    // Use this for initialization
    void Start()
    {
        owr = GetComponent <ObjectWithRadius>();

        if (damage <= 0.0f)
        {
            damage = 0.1f;
        }
        if (ttl <= 0.0f)
        {
            ttl = 10.0f;
        }
    }
示例#3
0
文件: Planet.cs 项目: cremmy/spacewar
    // 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);
        }
    }