Example #1
0
        public virtual void Move()
        {
            var bbO = BoundingBox.Union(BoundingBox.Offset(Motion));

            List <AxisAlignedBB> list = Game.Instance.Map.GetCollidingBoxes(bbO);

            var mOrig = Motion;

            for (int i = 0; i < list.Count; i++)
            {
                var blockBb = list[i];
                Motion.Y = blockBb.CalculateYOffset(BoundingBox, Motion.Y);
            }
            BoundingBox = BoundingBox.Offset(Motion * Vector2.UnitY);

            for (int i = 0; i < list.Count; i++)
            {
                var blockBb = list[i];
                Motion.X = blockBb.CalculateXOffset(BoundingBox, Motion.X);
            }
            BoundingBox = BoundingBox.Offset(Motion * Vector2.UnitX);

            SetPositionToBb();

            var stoppedX = Math.Abs(mOrig.X - Motion.X) > 0.00001f;
            var stoppedY = Math.Abs(mOrig.Y - Motion.Y) > 0.00001f;

            if (stoppedX)
            {
                Motion.X = 0;
            }

            if (stoppedY)
            {
                Motion.Y = 0;
            }
        }
Example #2
0
        public List <AxisAlignedBB> GetCollidingBoxes(AxisAlignedBB box)
        {
            var bb = box.Union(box);

            return(_collisionBoxes.Where(cb => cb.IntersectsWith(bb)).ToList());
        }