class MugetsuCameraManager extends Actor placeable;
var() float fInterpolationTime;
var float fTimerInterpolationTime;
var Pawn playerPawn;
var MugetsuCameraModeBase DefaultMode;
var MugetsuCameraModeBase PreviousMode;
var MugetsuCameraModeBase CurrentMode;
var Vector PreviousCameraPosition;
var rotator PreviousCameraRotation;
var bool bInterpolate;
simulated function bool CameraUpdate( float fDeltaTime, out vector out_CamLoc, out rotator out_CamRot, out float out_FOV )
{
local bool bReturnValue;
if(CurrentMode == None)
{
CurrentMode = DefaultMode;
}
bReturnValue = CurrentMode.CameraUpdate(fDeltaTime, out_CamLoc, out_CamRot, out_FOV, playerPawn);
if(bInterpolate)
{
fTimerInterpolationTime = fMin(1.f, fTimerInterpolationTime+(fDeltaTime/fInterpolationTime));
out_CamLoc = VLerp(PreviousCameraPosition, out_CamLoc, fTimerInterpolationTime);
out_CamRot = RLerp(PreviousCameraRotation, out_CamRot, fTimerInterpolationTime);
if(fTimerInterpolationTime >= 1.f)
bInterpolate = false;
}
else
{
PreviousCameraPosition = out_CamLoc;
PreviousCameraRotation = out_CamRot;
}
return bReturnValue;
}
function GotoPreviousCameraMode()
{
ChangeCamera(PreviousMode);
}
simulated function ChangeCamera(optional MugetsuCameraModeBase NewCameraMode)
{
if(NewCameraMode == none)
{
NewCameraMode = DefaultMode;
}
if(NewCameraMode != CurrentMode)
{
PreviousMode = CurrentMode;
CurrentMode = NewCameraMode;
if(PreviousMode.bSmoothTransition || CurrentMode.bSmoothTransition)
{
bInterpolate = true;
fTimerInterpolationTime = 0.f;
}
}
}
DefaultProperties
{
fInterpolationTime = 0.5f;
bInterpolate = false;
}