/// <summary> /// /// </summary> /// <param name="nonstaticCapsule"></param> /// <param name="staticCircle"></param> /// <param name="collidedVertically"></param> /// <returns></returns> public static Vector2 IntersectionPointNonstaticCapsuleStaticCircle(CustomCapsuleCollider2D nonstaticCapsule, CustomCircleCollider2D staticCircle, bool collidedVertically = true) { Vector2 cCenter = staticCircle.GetCenter(); Vector2 capCenter = nonstaticCapsule.GetCenter(); Vector2 collisionPoint; if (collidedVertically) { if (cCenter.y < capCenter.y) { collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.bottomCircleBounds, staticCircle.bounds); } else { collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.topCircleBounds, staticCircle.bounds); } return(IntersectionPointColliderVerticalAtXPoint(nonstaticCapsule, staticCircle, collisionPoint.x)); } else { if (cCenter.y > nonstaticCapsule.bounds.rectBounds.topLeft.y) { collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.topCircleBounds, staticCircle.bounds); } else if (cCenter.y < nonstaticCapsule.bounds.rectBounds.bottomLeft.y) { collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.bottomCircleBounds, staticCircle.bounds); } else { collisionPoint = cCenter; } return(IntersectionPointColliderHorizontalAtYPoint(nonstaticCapsule, staticCircle, collisionPoint.y)); } }
public static Vector2 IntersectionPointStaticCapsuleNonStaticRect(CustomCapsuleCollider2D staticCapsule, CustomBoxCollider2D nonstaticRect, bool collidedVertically = true) { Vector2 rCenter = nonstaticRect.GetCenter(); Vector2 capCenter = staticCapsule.GetCenter(); if (collidedVertically) { float xPoint = rCenter.x; if (nonstaticRect.bounds.topRight.x < rCenter.x) { xPoint = nonstaticRect.bounds.topRight.x; } else if (nonstaticRect.bounds.topLeft.x > rCenter.x) { xPoint = nonstaticRect.bounds.topLeft.x; } return(IntersectionPointColliderVerticalAtXPoint(nonstaticRect, staticCapsule, xPoint)); } else { float yPoint = rCenter.y; if (nonstaticRect.bounds.topLeft.y < staticCapsule.bounds.rectBounds.bottomLeft.y) { yPoint = nonstaticRect.bounds.topLeft.y; } else if (nonstaticRect.bounds.bottomLeft.y > staticCapsule.bounds.rectBounds.topLeft.y) { yPoint = nonstaticRect.bounds.bottomLeft.y; } return(IntersectionPointColliderHorizontalAtYPoint(nonstaticRect, staticCapsule, yPoint)); } }
/// <summary> /// /// </summary> /// <param name="colliderToCheck"></param> /// <returns></returns> public override bool ColliderIntersectHorizontally(CustomCollider2D colliderToCheck) { if (rigid.Velocity.x == 0) { return(false); } if (CircleColliderCollisionsAtBounds(horizontalBoundsFromVelocity, colliderToCheck)) { if (colliderToCheck is CustomBoxCollider2D) { Vector2 pointOfCollision = IntersectionPointNonstaticRectOnStaticCircle(((CustomBoxCollider2D)colliderToCheck), this, false); this.transform.position = new Vector3(pointOfCollision.x, this.transform.position.y, this.transform.position.z); return(true); } else if (colliderToCheck is CustomCircleCollider2D) { CustomCircleCollider2D customcircleToCheck = (CustomCircleCollider2D)colliderToCheck; Vector2 collisionPoint = IntersectionPointCircleOnCircle(this, customcircleToCheck, false); this.transform.position = new Vector3(collisionPoint.x, this.transform.position.y, this.transform.position.z); } else if (colliderToCheck is CustomCapsuleCollider2D) { CustomCapsuleCollider2D capCollider = (CustomCapsuleCollider2D)colliderToCheck; Vector2 collisionPoint = IntersectionPointStaticCapsuleNonstaticCircle(capCollider, this, false); this.transform.position = new Vector3(collisionPoint.x, this.transform.position.y, this.transform.position.z); } return(true); } return(false); }
void OnEnable() { capCol = (CustomCapsuleCollider2D)target; polyCollider = capCol.GetComponent <PolygonCollider2D>(); if (polyCollider == null) { polyCollider = capCol.gameObject.AddComponent <PolygonCollider2D>(); } polyCollider.points = capCol.getPoints(); }