Exemplo n.º 1
0
        /// <summary>
        /// the collision data you enter gets changed through
        /// pass by reference and will hold additional data about the collision
        /// </summary>
        /// <param name="rect1"></param>
        /// <param name="rect2"></param>
        /// <param name="collisonData"></param>
        /// <returns>bool</returns>
        public static bool collisionCheck(Rectangle rect1, Rectangle rect2, ref CollisionType collisonData)
        {
            collisonData.clearData();

            //get the overlap area
            Rectangle.Intersect(ref rect1, ref rect2, out collisonData.m_OverlapArea);

            //if the width and height are bigger than zero it means they collided
            if (collisonData.m_OverlapArea.Width > 0 && collisonData.m_OverlapArea.Height > 0)
            {
                collisonData.m_WasThereACollision = true;

                if (collisonData.m_OverlapArea.Width > collisonData.m_OverlapArea.Height)
                {
                    //either top or bottom collision

                    if (rect1.Bottom > rect2.Top && rect1.Center.Y < rect2.Center.Y)
                    {
                        collisonData.m_FirstObjectSideCollided = SideCollided.BOTTOM;
                        collisonData.m_SecondObjectSideCollided = SideCollided.TOP;
                    }
                    else if (rect1.Top < rect2.Bottom && rect1.Center.Y > rect2.Center.Y)
                    {
                        collisonData.m_FirstObjectSideCollided = SideCollided.TOP;
                        collisonData.m_SecondObjectSideCollided = SideCollided.BOTTOM;
                    }
                }
                else
                {
                    //left or right collision

                    if (rect1.Right > rect2.Left && rect1.Center.X < rect2.Center.X)
                    {
                        collisonData.m_FirstObjectSideCollided = SideCollided.RIGHT;
                        collisonData.m_SecondObjectSideCollided = SideCollided.LEFT;
                    }
                    else if (rect1.Left < rect2.Right && rect1.Center.X > rect2.Center.X)
                    {
                        collisonData.m_FirstObjectSideCollided = SideCollided.LEFT;
                        collisonData.m_SecondObjectSideCollided = SideCollided.RIGHT;
                    }
                }
                return true;
            }
            return false;
        }
Exemplo n.º 2
0
        /// <summary>
        /// the collision data you enter gets changed through
        /// pass by reference and will hold additional data about the collision
        /// </summary>
        /// <param name="rect1"></param>
        /// <param name="rect2"></param>
        /// <param name="collisonData"></param>
        /// <returns>bool</returns>
        public static bool collisionCheck(Rectangle rect1, Rectangle rect2, ref CollisionType collisonData)
        {
            collisonData.clearData();

            //get the overlap area
            Rectangle.Intersect(ref rect1, ref rect2, out collisonData.m_OverlapArea);

            //if the width and height are bigger than zero it means they collided
            if (collisonData.m_OverlapArea.Width > 0 && collisonData.m_OverlapArea.Height > 0)
            {
                collisonData.m_WasThereACollision = true;

                if (collisonData.m_OverlapArea.Width > collisonData.m_OverlapArea.Height)
                {
                    //either top or bottom collision

                    if (rect1.Bottom > rect2.Top && rect1.Center.Y < rect2.Center.Y)
                    {
                        collisonData.m_FirstObjectSideCollided  = SideCollided.BOTTOM;
                        collisonData.m_SecondObjectSideCollided = SideCollided.TOP;
                    }
                    else if (rect1.Top < rect2.Bottom && rect1.Center.Y > rect2.Center.Y)
                    {
                        collisonData.m_FirstObjectSideCollided  = SideCollided.TOP;
                        collisonData.m_SecondObjectSideCollided = SideCollided.BOTTOM;
                    }
                }
                else
                {
                    //left or right collision

                    if (rect1.Right > rect2.Left && rect1.Center.X < rect2.Center.X)
                    {
                        collisonData.m_FirstObjectSideCollided  = SideCollided.RIGHT;
                        collisonData.m_SecondObjectSideCollided = SideCollided.LEFT;
                    }
                    else if (rect1.Left < rect2.Right && rect1.Center.X > rect2.Center.X)
                    {
                        collisonData.m_FirstObjectSideCollided  = SideCollided.LEFT;
                        collisonData.m_SecondObjectSideCollided = SideCollided.RIGHT;
                    }
                }
                return(true);
            }
            return(false);
        }