public DoLoop(Vector3 currentPosition, Quaternion currentRotation, float omega = GlobalManager.defaultLoopOmega, float r = GlobalManager.defaultLoopRadius) { Vector3 currentForward = currentRotation * Vector3.forward; r *= MapMovement.Instance.AbsoluteZoomRatio; centerX = currentPosition.x; centerY = currentPosition.y + r; centerZ = currentPosition.z; this.omega = omega; this.r = r; startTime = Time.time; //The minus sign is because our hercules model's forward vector is towards its tail zComponentOfHorizontal = Vector3.Dot(-currentForward, Vector3.forward); xComponentOfHorizontal = Vector3.Dot(-currentForward, Vector3.right); correctPoseManeuver = new CorrectPoseManeuver(currentRotation, Quaternion.LookRotation(-new Vector3((float)(-xComponentOfHorizontal * Math.Sin(omega * GlobalManager.timeToCorrectPose + phase)), (float)Math.Cos(omega * GlobalManager.timeToCorrectPose + phase), (float)(-zComponentOfHorizontal * Math.Sin(omega * GlobalManager.timeToCorrectPose + phase))), -new Vector3(xComponentOfHorizontal * r * (float)Math.Cos(omega * GlobalManager.timeToCorrectPose + phase) + centerX, r * (float)Math.Sin(omega * GlobalManager.timeToCorrectPose + phase) + centerY, zComponentOfHorizontal * r * (float)Math.Cos(omega * GlobalManager.timeToCorrectPose + phase) + centerZ) + new Vector3(centerX, centerY, centerZ))); }