Beispiel #1
0
        public bool MoveAndCollide(Vector2 direction, out Overlap overlap)
        {
            bool result = false;

            overlap   = new Overlap();
            direction = Vector2.Round(direction);

            if (direction == Vector2.Zero)
            {
                return(result);
            }

            if (Layout.Current.Grid.IsCollidingAtOffset(this, direction.X, 0f, out var overlapX))
            {
                direction.X += overlapX.Depth.X;
                overlap      = overlapX;
                result       = true;
            }
            else if (Layout.Current.Grid.IsCollidingAtOffset(this, 0f, direction.Y, out var overlapY))
            {
                direction.Y += overlapY.Depth.Y;
                overlap      = overlapY;
                result       = true;
            }

            BodyInfo.Position += direction;
            Layout.Current.Grid.Update(this);
            return(result);
        }
Beispiel #2
0
        public bool IsOverlapping(Sprite sprite, out Overlap overlap)
        {
            overlap = new Overlap();
            var overlappedObject = QueryBounds(sprite.BodyInfo.Bounds).FirstOrDefault(other => other != sprite);

            if (overlappedObject != null)
            {
                overlap.Depth = GetIntersectionDepth(sprite.BodyInfo.Bounds, overlappedObject.BodyInfo.Bounds);
                overlap.Other = overlappedObject;
                return(true);
            }
            return(false);
        }
Beispiel #3
0
        public bool IsCollidingAtOffset(Sprite sprite, float xOffset, float yOffset, out Overlap overlap)
        {
            overlap = new Overlap();
            var offsetBounds = sprite.BodyInfo.Bounds;

            offsetBounds.Offset(xOffset, yOffset);
            var overlappedObject = QueryBounds(offsetBounds).FirstOrDefault(other => other != sprite && other.BodyInfo.IsSolid);

            if (overlappedObject != null)
            {
                overlap.Depth = GetIntersectionDepth(offsetBounds, overlappedObject.BodyInfo.Bounds);
                overlap.Other = overlappedObject;
                return(true);
            }
            return(false);
        }