コード例 #1
0
 public static void PassiveObjectsCollidingHandling(iPassiveObjectCollidingAbility _object, List <PassiveObject> passiveObjects)
 {
     foreach (PassiveObject passiveObject in passiveObjects)
     {
         PassiveObjectCollision(_object, passiveObject);
     }
 }
コード例 #2
0
        private static void PassiveObjectCollision(iPassiveObjectCollidingAbility _object, PassiveObject passiveObject)
        {
            if (_object.GetCollisionRectangle().IsCollidingWithRectangle(passiveObject.GetCollisionRectangle()))
            {
                CollisionRectangle rectangle = _object.GetCollisionRectangle();
                if (rectangle.position.X + rectangle.width >= passiveObject.position.X &&
                    rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X)
                {
                    _object.OnCollideWithObjectFromRight(passiveObject.position.X);
                }

                if (rectangle.position.X <= passiveObject.position.X + passiveObject.width &&
                    rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)
                {
                    _object.OnCollideWithObjectFromLeft(passiveObject.position.X + passiveObject.width);
                }

                if (rectangle.position.Y + rectangle.height >= passiveObject.position.Y &&
                    rectangle.position.Y + rectangle.height - 5 <= passiveObject.position.Y &&
                    !(rectangle.position.X + rectangle.width >= passiveObject.position.X &&         // to prevent from
                      rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X) &&    // stopping on edges
                    !(rectangle.position.X <= passiveObject.position.X + passiveObject.width &&     //
                      rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)   //
                    )
                {
                    _object.OnCollideWithObjectFromBottom(passiveObject.position.Y);
                }

                if (rectangle.position.Y <= passiveObject.position.Y + passiveObject.height &&
                    rectangle.position.Y + 5 >= passiveObject.position.Y + passiveObject.height &&
                    !(rectangle.position.X + rectangle.width >= passiveObject.position.X &&         // same situation
                      rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X) &&
                    !(rectangle.position.X <= passiveObject.position.X + passiveObject.width &&
                      rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)
                    )
                {
                    _object.OnCollideWithObjectFromTop(passiveObject.position.Y + passiveObject.height);
                }
            }
        }