Пример #1
0
    public static void CreateContacts(List <Body> bodies, out List <Contact> contacts)
    {
        contacts = new List <Contact>();

        for (int i = 0; i < bodies.Count - 1; i++)
        {
            for (int j = i + 1; j < bodies.Count; j++)
            {
                Body bodyA = bodies[i];
                Body bodyB = bodies[j];

                if (bodyA.type == Body.eType.Static && bodyB.type == Body.eType.Static)
                {
                    continue;
                }

                CircleCollider circleA = new CircleCollider(bodyA.position, ((Circle)bodyA.shape).radius);
                CircleCollider circleB = new CircleCollider(bodyB.position, ((Circle)bodyB.shape).radius);

                if (circleA.Contains(circleB))
                {
                    Contact contact = new Contact()
                    {
                        bodyA = bodyA, bodyB = bodyB
                    };
                    float distance = (circleA.center - circleB.center).magnitude;
                    contact.depth  = (circleA.radius + circleB.radius) - distance;
                    contact.normal = (circleA.center - circleB.center).normalized;
                    contacts.Add(contact);
                }
            }
        }
    }