示例#1
0
    //Methods
    //-API
    public void setCamera(
        CameraTypes.CameraSettings inCameraSettings)
    {
        XUtils.check(inCameraSettings);

        internalStopTransition();
        internalSetCameraSettings(inCameraSettings);
    }
示例#2
0
 //--Transition
 private void internalStartTransition(
     CameraTypes.CameraSettings inTargetCameraSettings, float inSpeed)
 {
     _transitionState = new Optional <TransitionState>(
         new TransitionState(inTargetCameraSettings, inSpeed)
         );
     _cameraSettings = null;
 }
示例#3
0
    //NB: Speed is used for ortho size change
    //TODO: Find some better approach for transition time setup
    public void setCamera(
        CameraTypes.CameraSettings inCameraSettings, float inSpeed = 0.0f)
    {
        XUtils.check(inCameraSettings);
        XUtils.check(inSpeed >= 0);

        internalStopTransition();

        if (0.0f == inSpeed)
        {
            internalSetCameraSettings(inCameraSettings);
        }
        else
        {
            internalStartTransition(inCameraSettings, inSpeed);
        }
    }
示例#4
0
    private void internalUpdateTransition()
    {
        //Compute progress based on main param value & speed
        float theTransitionSpeed = _transitionState.getValue().speed;

        CameraTypes.CameraSettings theTargetCameraSettings =
            _transitionState.getValue().targetCameraSettings;

        float theTransitionSpeedPerUpdate = theTransitionSpeed * Time.fixedUnscaledDeltaTime;

        float theProgressForSpeedPerUpdate = theTransitionSpeedPerUpdate /
                                             Mathf.Abs(theTargetCameraSettings.orthographicSize - _camera.orthographicSize);

        theProgressForSpeedPerUpdate = Mathf.Clamp(theProgressForSpeedPerUpdate, 0.0f, 1.0f);

        //Stop transition if params will be achieved on this update or...
        if (1.0f == theProgressForSpeedPerUpdate)
        {
            internalStopTransition();
            internalSetCameraSettings(theTargetCameraSettings);
        }
        else
        {
            //...evaluate params otherwise
            _camera.transform.position = Vector3.Lerp(
                _camera.transform.position, theTargetCameraSettings.position,
                theProgressForSpeedPerUpdate
                );

            _camera.transform.rotation = Quaternion.Lerp(
                _camera.transform.rotation, theTargetCameraSettings.rotation,
                theProgressForSpeedPerUpdate
                );

            _camera.orthographicSize = Mathf.Lerp(
                _camera.orthographicSize, theTargetCameraSettings.orthographicSize,
                theProgressForSpeedPerUpdate
                );
        }
    }
示例#5
0
 //--Camera settings
 private void internalSetCameraSettings(
     CameraTypes.CameraSettings inCameraSettings)
 {
     _cameraSettings = inCameraSettings;
 }
示例#6
0
 public TransitionState(
     CameraTypes.CameraSettings inTargetCameraSettings, float inSpeed)
 {
     targetCameraSettings = inTargetCameraSettings;
     speed = inSpeed;
 }