/// <summary> /// Updates the motor over time. This is called by the controller /// every update cycle so movement can be updated. /// </summary> /// <param name="rDeltaTime">Time since the last frame (or fixed update call)</param> /// <param name="rUpdateIndex">Index of the update to help manage dynamic/fixed updates. [0: Invalid update, >=1: Valid update]</param> /// <param name="rTiltAngle">Amount of tilting the camera needs to do to match the anchor</param> public override CameraTransform RigLateUpdate(float rDeltaTime, int rUpdateIndex, float rTiltAngle = 0f) { UpdateToggle(); if (mStartMotor == null || mEndMotor == null) { return(mRigTransform); } mTransitionElapsedTime += rDeltaTime; float lElapsedPercent = mTransitionElapsedTime / _TransitionTime; CameraTransform lStartResult = mStartMotor.RigLateUpdate(rDeltaTime, rUpdateIndex, rTiltAngle); CameraTransform lEndResult = mEndMotor.RigLateUpdate(rDeltaTime, rUpdateIndex, rTiltAngle); if (_PositionBlend == 1) { mRigTransform.Position = Vector3.Lerp(mStartPosition, lEndResult.Position, lElapsedPercent); } else if (_PositionBlend == 2) { mRigTransform.Position = lStartResult.Position; } else if (_PositionBlend == 3) { mRigTransform.Position = lEndResult.Position; } else { mRigTransform.Position = Vector3.Lerp(lStartResult.Position, lEndResult.Position, lElapsedPercent); } if (_RotationBlend == 1) { mRigTransform.Rotation = Quaternion.Slerp(mStartRotation, lEndResult.Rotation, lElapsedPercent); } else if (_RotationBlend == 2) { mRigTransform.Rotation = lStartResult.Rotation; } else if (_RotationBlend == 3) { mRigTransform.Rotation = lEndResult.Rotation; } else { mRigTransform.Rotation = Quaternion.Slerp(lStartResult.Rotation, lEndResult.Rotation, lElapsedPercent); } return(mRigTransform); }
/// <summary> /// Returns the lerped value from one transform to another /// </summary> /// <param name="rFrom"></param> /// <param name="rTo"></param> /// <param name="rTime"></param> public void Lerp(CameraTransform rFrom, CameraTransform rTo, float rTime) { Position = Vector3.Lerp(rFrom.Position, rTo.Position, rTime); Rotation = Quaternion.Slerp(rFrom.Rotation, rTo.Rotation, rTime); }