Vector3 targetOffset = target.position + currentCamera.distance;
Quaternion rotation = Quaternion.Euler(verticalPan + currentCamera.distance.y, horizontalPan, 0);
Vector3 vectorMask = Vector3.one;
Vector3 rotateVector = rotation * vectorMask;
Vector3 orbitVector = Vector3.zero;
float radius = Vector3.Distance(targetOffset, target.transform.position);
horizontalPan += HorizontalAxis * camRotateSpeed * Time.deltaTime;
verticalPan += (VerticalAxis * camRotateSpeed * Time.deltaTime);
verticalPan = Mathf.Clamp(verticalPan, minPanUp, maxPanUp);
#region wrap the cam orbit rotation
else if (horizontalPan < 0f)
orbitVector = rotateVector * radius;
camPosition = target.position + orbitVector;
Vector3 mask = camPosition;
occludeRay(targetOffset, ref mask);
cameraMask.transform.position = mask;
cameraMask.transform.LookAt(target);
Vector3 midPoint = Utility.Midpoint(target.transform.position, PlayerInstance.GetInstance().combatScript.currentTarget.transform.position);
Vector3 diff = PlayerInstance.GetInstance().combatScript.currentTarget.transform.position - target.transform.position;
Vector3 mask = (Vector3.up * currentCamera.distance.y) + target.position - (diff.normalized * currentCamera.distance.z);
occludeRay(target.position, ref mask);
cameraMask.transform.position = mask;
cameraMask.transform.LookAt(midPoint);