private float CheckCameraClipPlane(Vector3 from, Vector3 to) { float num = -1f; RPG_Camera.ClipPlaneVertexes clipPlaneAt = RPG_Camera.GetClipPlaneAt(to); int layerMask = 257; if (RPG_Camera.MainCamera != null) { RaycastHit raycastHit; if (Physics.Linecast(from, to, out raycastHit, layerMask)) { num = raycastHit.distance - RPG_Camera.MainCamera.nearClipPlane; } if (Physics.Linecast(from - base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.UpperLeft, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f)) { num = Vector3.Distance(raycastHit.point + base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, from); } if (Physics.Linecast(from + base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.UpperRight, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f)) { num = Vector3.Distance(raycastHit.point - base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, from); } if (Physics.Linecast(from - base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.LowerLeft, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f)) { num = Vector3.Distance(raycastHit.point + base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, from); } if (Physics.Linecast(from + base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.LowerRight, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f)) { num = Vector3.Distance(raycastHit.point - base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, from); } } return(num); }
public static RPG_Camera.ClipPlaneVertexes GetClipPlaneAt(Vector3 pos) { RPG_Camera.ClipPlaneVertexes result = default(RPG_Camera.ClipPlaneVertexes); if (RPG_Camera.MainCamera == null) { return(result); } Transform transform = RPG_Camera.MainCamera.transform; float nearClipPlane = RPG_Camera.MainCamera.nearClipPlane; result.UpperLeft = pos - transform.right * RPG_Camera.halfPlaneWidth; result.UpperLeft += transform.up * RPG_Camera.halfPlaneHeight; result.UpperLeft += transform.forward * nearClipPlane; result.UpperRight = pos + transform.right * RPG_Camera.halfPlaneWidth; result.UpperRight += transform.up * RPG_Camera.halfPlaneHeight; result.UpperRight += transform.forward * nearClipPlane; result.LowerLeft = pos - transform.right * RPG_Camera.halfPlaneWidth; result.LowerLeft -= transform.up * RPG_Camera.halfPlaneHeight; result.LowerLeft += transform.forward * nearClipPlane; result.LowerRight = pos + transform.right * RPG_Camera.halfPlaneWidth; result.LowerRight -= transform.up * RPG_Camera.halfPlaneHeight; result.LowerRight += transform.forward * nearClipPlane; return(result); }