//Methods //-API public void setCamera( CameraTypes.CameraSettings inCameraSettings) { XUtils.check(inCameraSettings); internalStopTransition(); internalSetCameraSettings(inCameraSettings); }
//--Transition private void internalStartTransition( CameraTypes.CameraSettings inTargetCameraSettings, float inSpeed) { _transitionState = new Optional <TransitionState>( new TransitionState(inTargetCameraSettings, inSpeed) ); _cameraSettings = null; }
//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); } }
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 ); } }
//--Camera settings private void internalSetCameraSettings( CameraTypes.CameraSettings inCameraSettings) { _cameraSettings = inCameraSettings; }
public TransitionState( CameraTypes.CameraSettings inTargetCameraSettings, float inSpeed) { targetCameraSettings = inTargetCameraSettings; speed = inSpeed; }