示例#1
0
    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;
    }
示例#2
0
    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)));
    }
示例#3
0
    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;
    }
示例#4
0
 public void Update(ICameraProperties camera, float theta, float y)
 {
 }