public void Initialize(LSBody b1, LSBody b2)
        {
            PartitionVersion = 0;
            Body1 = b1;
            Body2 = b2;

            IsColliding = false;
            DistX = 0;
            DistY = 0;
            PenetrationX = 0;
            PenetrationY = 0;

            CacheSqrDistance = b1.Radius + b2.Radius;
            CacheSqrDistance *= CacheSqrDistance;

            LeCollisionType = CollisionType.None;
            if (Body1.Shape == ColliderType.None || Body2.Shape == ColliderType.None) {
            } else if (Body1.Shape == ColliderType.Circle) {
                if (Body2.Shape == ColliderType.Circle) {
                    LeCollisionType = CollisionType.Circle_Circle;
                } else if (Body2.Shape == ColliderType.AABox) {
                    LeCollisionType = CollisionType.Circle_AABox;

                } else if (Body2.Shape == ColliderType.Polygon) {
                    LeCollisionType = CollisionType.Circle_Polygon;
                }
            } else if (Body1.Shape == ColliderType.AABox) {
                if (Body2.Shape == ColliderType.Circle) {
                    LeCollisionType = CollisionType.Circle_AABox;
                } else if (Body2.Shape == ColliderType.AABox) {
                    LeCollisionType = CollisionType.AABox_AABox;
                } else if (Body2.Shape == ColliderType.Polygon) {
                    LeCollisionType = CollisionType.AABox_Polygon;
                }
            } else if (Body1.Shape == ColliderType.Polygon) {
                if (Body2.Shape == ColliderType.Circle) {
                    LeCollisionType = CollisionType.Circle_Polygon;
                } else if (Body2.Shape == ColliderType.AABox) {
                    LeCollisionType = CollisionType.AABox_Polygon;
                } else if (Body2.Shape == ColliderType.Polygon) {
                    LeCollisionType = CollisionType.Polygon_Polygon;
                }
            }

            if (DoPhysics) {
                if (Body1.Immovable) {
                    physicsFavor = PhysicsFavor.Favor1;
                } else if (Body2.Immovable) {
                    physicsFavor = PhysicsFavor.Favor2;
                } else if (Body1.Priority > Body2.Priority) {
                    physicsFavor = PhysicsFavor.Favor1;
                } else if (Body2.Priority > Body1.Priority) {
                    physicsFavor = PhysicsFavor.Favor2;
                } else {
                    physicsFavor = PhysicsFavor.Same;
                }
            }
            Active = true;
        }
示例#2
0
        public void Initialize(LSBody b1, LSBody b2)
        {
            PartitionVersion = 0;
            Body1            = b1;
            Body2            = b2;

            IsColliding  = false;
            DistX        = 0;
            DistY        = 0;
            PenetrationX = 0;
            PenetrationY = 0;

            CacheSqrDistance  = b1.Radius + b2.Radius;
            CacheSqrDistance *= CacheSqrDistance;

            LeCollisionType = CollisionType.None;
            if (Body1.Shape == ColliderType.None || Body2.Shape == ColliderType.None)
            {
            }
            else if (Body1.Shape == ColliderType.Circle)
            {
                if (Body2.Shape == ColliderType.Circle)
                {
                    LeCollisionType = CollisionType.Circle_Circle;
                }
                else if (Body2.Shape == ColliderType.AABox)
                {
                    LeCollisionType = CollisionType.Circle_AABox;
                }
                else if (Body2.Shape == ColliderType.Polygon)
                {
                    LeCollisionType = CollisionType.Circle_Polygon;
                }
            }
            else if (Body1.Shape == ColliderType.AABox)
            {
                if (Body2.Shape == ColliderType.Circle)
                {
                    LeCollisionType = CollisionType.Circle_AABox;
                }
                else if (Body2.Shape == ColliderType.AABox)
                {
                    LeCollisionType = CollisionType.AABox_AABox;
                }
                else if (Body2.Shape == ColliderType.Polygon)
                {
                    LeCollisionType = CollisionType.AABox_Polygon;
                }
            }
            else if (Body1.Shape == ColliderType.Polygon)
            {
                if (Body2.Shape == ColliderType.Circle)
                {
                    LeCollisionType = CollisionType.Circle_Polygon;
                }
                else if (Body2.Shape == ColliderType.AABox)
                {
                    LeCollisionType = CollisionType.AABox_Polygon;
                }
                else if (Body2.Shape == ColliderType.Polygon)
                {
                    LeCollisionType = CollisionType.Polygon_Polygon;
                }
            }

            if (DoPhysics)
            {
                if (Body1.Immovable)
                {
                    physicsFavor = PhysicsFavor.Favor1;
                }
                else if (Body2.Immovable)
                {
                    physicsFavor = PhysicsFavor.Favor2;
                }
                else if (Body1.Priority > Body2.Priority)
                {
                    physicsFavor = PhysicsFavor.Favor1;
                }
                else if (Body2.Priority > Body1.Priority)
                {
                    physicsFavor = PhysicsFavor.Favor2;
                }
                else
                {
                    physicsFavor = PhysicsFavor.Same;
                }
            }
            Active = true;
        }