void OnCollisionStay(Collision col)
 {
     CollDir = CollisionDir.None;
     foreach (ContactPoint point in col.contacts)
     {
         if (point.normal.y == -1) continue;
         if (point.normal.z == -1) CollDir = CollisionDir.Forward;
         if (point.normal.z == 1) CollDir = CollisionDir.Backward;
         if (point.normal.x == -1) CollDir = CollisionDir.Right;
         if (point.normal.x == 1) CollDir = CollisionDir.Left;
     }
 }
 void Start()
 {
     cameraController = transform.Find("CameraController").transform;
     playerBody = GetComponent<Rigidbody>();
     CollDir = CollisionDir.None;
 }
Пример #3
0
        public CollisionDir PlatformDirection(int platformIndex, Rectangle playerPos)
        {
            int          distDown  = -1;
            int          distUp    = -1;
            int          distRight = -1;
            int          distLeft  = -1;
            int          leastDist = 0;
            CollisionDir dir       = CollisionDir.None;

            if (platformIndex == 0)
            {
                distDown  = floor.platPosition.Top - playerPos.Bottom;
                distUp    = playerPos.Top - floor.platPosition.Bottom;
                distRight = floor.platPosition.Left - playerPos.Right;
                distLeft  = playerPos.Left - floor.platPosition.Right;
            }
            else if (platformIndex == 1)
            {
                distDown  = rightWall.platPosition.Top - playerPos.Bottom;
                distUp    = playerPos.Top - rightWall.platPosition.Bottom;
                distRight = rightWall.platPosition.Left - playerPos.Right;
                distLeft  = playerPos.Left - rightWall.platPosition.Right;
            }
            else if (platformIndex == 2)
            {
                distDown  = leftWall.platPosition.Top - playerPos.Bottom;
                distUp    = playerPos.Top - leftWall.platPosition.Bottom;
                distRight = leftWall.platPosition.Left - playerPos.Right;
                distLeft  = playerPos.Left - leftWall.platPosition.Right;
            }
            else if (platformIndex == 3)
            {
                distDown  = ceiling.platPosition.Top - playerPos.Bottom;
                distUp    = playerPos.Top - ceiling.platPosition.Bottom;
                distRight = ceiling.platPosition.Left - playerPos.Right;
                distLeft  = playerPos.Left - ceiling.platPosition.Right;
            }
            else
            {
                distDown  = lPlatforms[platformIndex - 4].platPosition.Top - playerPos.Bottom;
                distUp    = playerPos.Top - lPlatforms[platformIndex - 4].platPosition.Bottom;
                distRight = lPlatforms[platformIndex - 4].platPosition.Left - playerPos.Right;
                distLeft  = playerPos.Left - lPlatforms[platformIndex - 4].platPosition.Right;
            }

            if (distDown >= 0)
            {
                leastDist = distDown;
                dir       = CollisionDir.Bottom;

                if (distRight >= 0)
                {
                    if (distRight <= leastDist)
                    {
                        dir = CollisionDir.Right;
                    }
                }
                else if (distLeft >= 0)
                {
                    if (distLeft <= leastDist)
                    {
                        dir = CollisionDir.Left;
                    }
                }
            }
            else if (distUp >= 0)
            {
                leastDist = distUp;
                dir       = CollisionDir.Top;

                if (distRight >= 0)
                {
                    if (distRight <= leastDist)
                    {
                        dir = CollisionDir.Right;
                    }
                }
                else if (distLeft >= 0)
                {
                    if (distLeft <= leastDist)
                    {
                        dir = CollisionDir.Left;
                    }
                }
            }
            else if (distRight >= 0)
            {
                dir = CollisionDir.Right;
            }
            else if (distLeft >= 0)
            {
                dir = CollisionDir.Left;
            }

            return(dir);
        }
Пример #4
0
        public Vector2 NewVelocity(int platformIndex, CollisionDir dir, Rectangle playerPos, Vector2 velocity)
        {
            Vector2 newVelocity = velocity;

            if (dir == CollisionDir.Bottom)
            {
                if (platformIndex == 0)
                {
                    newVelocity.Y = floor.platPosition.Top - playerPos.Bottom - 1;
                }
                else if (platformIndex == 1)
                {
                    newVelocity.Y = rightWall.platPosition.Top - playerPos.Bottom - 1;
                }
                else if (platformIndex == 2)
                {
                    newVelocity.Y = leftWall.platPosition.Top - playerPos.Bottom - 1;
                }
                else if (platformIndex == 3)
                {
                    newVelocity.Y = ceiling.platPosition.Top - playerPos.Bottom - 1;
                }
                else
                {
                    newVelocity.Y = lPlatforms[platformIndex - 4].platPosition.Top - playerPos.Bottom - 1;
                }
            }
            else if (dir == CollisionDir.Top)
            {
                if (platformIndex == 0)
                {
                    newVelocity.Y = floor.platPosition.Bottom - playerPos.Top + 1;
                }
                else if (platformIndex == 1)
                {
                    newVelocity.Y = rightWall.platPosition.Bottom - playerPos.Top + 1;
                }
                else if (platformIndex == 2)
                {
                    newVelocity.Y = leftWall.platPosition.Bottom - playerPos.Top + 1;
                }
                else if (platformIndex == 3)
                {
                    newVelocity.Y = ceiling.platPosition.Bottom - playerPos.Top + 1;
                }
                else
                {
                    newVelocity.Y = lPlatforms[platformIndex - 4].platPosition.Bottom - playerPos.Top + 1;
                }
            }
            else if (dir == CollisionDir.Right)
            {
                if (platformIndex == 0)
                {
                    newVelocity.X = floor.platPosition.Left - playerPos.Right - 1;
                }
                else if (platformIndex == 1)
                {
                    newVelocity.X = rightWall.platPosition.Left - playerPos.Right - 1;
                }
                else if (platformIndex == 2)
                {
                    newVelocity.X = leftWall.platPosition.Left - playerPos.Right - 1;
                }
                else if (platformIndex == 3)
                {
                    newVelocity.X = ceiling.platPosition.Left - playerPos.Right - 1;
                }
                else
                {
                    newVelocity.X = lPlatforms[platformIndex - 4].platPosition.Left - playerPos.Right - 1;
                }
            }
            else if (dir == CollisionDir.Left)
            {
                if (platformIndex == 0)
                {
                    newVelocity.X = floor.platPosition.Right - playerPos.Left + 1;
                }
                else if (platformIndex == 1)
                {
                    newVelocity.X = rightWall.platPosition.Right - playerPos.Left + 1;
                }
                else if (platformIndex == 2)
                {
                    newVelocity.X = leftWall.platPosition.Right - playerPos.Left + 1;
                }
                else if (platformIndex == 3)
                {
                    newVelocity.X = ceiling.platPosition.Right - playerPos.Left + 1;
                }
                else
                {
                    newVelocity.X = lPlatforms[platformIndex - 4].platPosition.Right - playerPos.Left + 1;
                }
            }
            return(newVelocity);
        }