public void Update(ICameraProperties camera, float theta, float y) { // if input, accelerate camera rotation if (theta != 0f) { camera.TurnSpeed += theta * TurnAcceleration * Time.deltaTime; } // otherwise deaccelerate else { // calculate change in rotational velocity var sign = 0f; if (Mathf.Abs(camera.TurnSpeed) > 0f) { sign = camera.TurnSpeed / Mathf.Abs(camera.TurnSpeed); } var dv = sign * TurnAcceleration * Time.deltaTime; // set current speed to 0 if deaccelerating would flip velocity if ((camera.TurnSpeed - dv) * camera.TurnSpeed <= 0f) { camera.TurnSpeed = 0f; } // otherwise deaccelerate else { camera.TurnSpeed -= dv; } } camera.TurnSpeed = Mathf.Clamp(camera.TurnSpeed, -MaxTurnSpeed, MaxTurnSpeed); camera.Theta -= camera.TurnSpeed * Time.deltaTime; }
public static Vector3 DifferenceFromTarget(this ICameraProperties camera) { float radius = camera.Radius(camera.Height); return(new Vector3(radius * Mathf.Sin(camera.Theta), camera.Height, -radius * Mathf.Cos(camera.Theta))); }
public void Update(ICameraProperties camera, float theta, float y) { camera.TurnSpeed += theta * Time.deltaTime; camera.TurnSpeed = Mathf.Clamp(camera.TurnSpeed, -MaxTurnSpeed, MaxTurnSpeed); camera.Theta += camera.TurnSpeed * Time.deltaTime; }
public void Update(ICameraProperties camera, float theta, float y) { }