Пример #1
0
    public static Collision2DSideTypeMultiplayer OppositeMultiplayer(this Collision2DSideTypeMultiplayer sideType)
    {
        Collision2DSideTypeMultiplayer opposite;

        if (sideType == Collision2DSideTypeMultiplayer.Left)
        {
            opposite = Collision2DSideTypeMultiplayer.Right;
        }
        else if (sideType == Collision2DSideTypeMultiplayer.Right)
        {
            opposite = Collision2DSideTypeMultiplayer.Left;
        }
        else if (sideType == Collision2DSideTypeMultiplayer.Top)
        {
            opposite = Collision2DSideTypeMultiplayer.Bottom;
        }
        else if (sideType == Collision2DSideTypeMultiplayer.Bottom)
        {
            opposite = Collision2DSideTypeMultiplayer.Top;
        }
        else
        {
            opposite = Collision2DSideTypeMultiplayer.None;
        }
        return(opposite);
    }
Пример #2
0
 /// <summary>
 /// Finds which edge collision occured on and moves child object with parent
 /// </summary>
 /// <param name="collision">Collision2D</param>
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.collider.CompareTag("player 2"))
     {
         Collision2DSideTypeMultiplayer collisionSide = collision.GetContactSideMultiplayer();
         if (collisionSide == Collision2DSideTypeMultiplayer.Top)
         {
             collision.collider.transform.SetParent(transform);
         }
     }
 }
Пример #3
0
    public static Collision2DSideTypeMultiplayer GetContactSideMultiplayer(Vector2 max, Vector2 center, Vector2 contact)
    {
        Collision2DSideTypeMultiplayer side = Collision2DSideTypeMultiplayer.None;
        float diagonalAngle = Mathf.Atan2(max.y - center.y, max.x - center.x) * 180 / Mathf.PI;
        float contactAngle  = Mathf.Atan2(contact.y - center.y, contact.x - center.x) * 180 / Mathf.PI;

        if (contactAngle < 0)
        {
            contactAngle = 360 + contactAngle;
        }
        if (diagonalAngle < 0)
        {
            diagonalAngle = 360 + diagonalAngle;
        }
        if (
            ((contactAngle >= 360 - diagonalAngle) && (contactAngle <= 360)) ||
            ((contactAngle <= diagonalAngle) && (contactAngle >= 0))
            )
        {
            side = Collision2DSideTypeMultiplayer.Right;
        }
        else if (
            ((contactAngle >= 180 - diagonalAngle) && (contactAngle <= 180)) ||
            ((contactAngle >= 180) && (contactAngle <= 180 + diagonalAngle))
            )
        {
            side = Collision2DSideTypeMultiplayer.Left;
        }
        else if (
            ((contactAngle >= diagonalAngle) && (contactAngle <= 90)) ||
            ((contactAngle >= 90) && (contactAngle <= 180 - diagonalAngle))
            )
        {
            side = Collision2DSideTypeMultiplayer.Top;
        }
        else if (
            ((contactAngle >= 180 + diagonalAngle) && (contactAngle <= 270)) ||
            ((contactAngle >= 270) && (contactAngle <= 360 - diagonalAngle))
            )
        {
            side = Collision2DSideTypeMultiplayer.Bottom;
        }
        return(side.OppositeMultiplayer());
    }