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); }
/// <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); } } }
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()); }