Exemple #1
0
        private void CollisionDetected(RigidBody body1, RigidBody body2, TSVector point1, TSVector point2, TSVector normal, FP penetration)
        {
            bool       flag    = body1.IsColliderOnly || body2.IsColliderOnly;
            Arbiter    arbiter = null;
            bool       flag2   = flag;
            ArbiterMap arbiterMap;

            if (flag2)
            {
                arbiterMap = this.arbiterTriggerMap;
            }
            else
            {
                arbiterMap = this.arbiterMap;
            }
            bool       flag3 = false;
            ArbiterMap obj   = arbiterMap;

            lock (obj)
            {
                arbiterMap.LookUpArbiter(body1, body2, out arbiter);
                bool flag4 = arbiter == null;
                if (flag4)
                {
                    arbiter       = Arbiter.Pool.GetNew();
                    arbiter.body1 = body1;
                    arbiter.body2 = body2;
                    arbiterMap.Add(new ArbiterKey(body1, body2), arbiter);
                    flag3 = true;
                }
            }
            bool    flag5 = arbiter.body1 == body1;
            Contact contact;

            if (flag5)
            {
                TSVector.Negate(ref normal, out normal);
                contact = arbiter.AddContact(point1, point2, normal, penetration, this.contactSettings);
            }
            else
            {
                contact = arbiter.AddContact(point2, point1, normal, penetration, this.contactSettings);
            }
            bool flag6 = flag3;

            if (flag6)
            {
                bool flag7 = flag;
                if (flag7)
                {
                    this.events.RaiseTriggerBeginCollide(contact);
                    body1.arbitersTrigger.Add(arbiter);
                    body2.arbitersTrigger.Add(arbiter);
                    OverlapPairContact overlapPairContact = new OverlapPairContact(body1, body2);
                    overlapPairContact.contact = contact;
                    this.initialTriggers.Add(overlapPairContact);
                }
                else
                {
                    this.events.RaiseBodiesBeginCollide(contact);
                    this.addedArbiterQueue.Enqueue(arbiter);
                    OverlapPairContact overlapPairContact2 = new OverlapPairContact(body1, body2);
                    overlapPairContact2.contact = contact;
                    this.initialCollisions.Add(overlapPairContact2);
                }
            }
            bool flag8 = !flag && contact != null;

            if (flag8)
            {
                this.events.RaiseContactCreated(contact);
            }
        }