/** * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ class CurveEdPreset_LinearDecay extends CurveEdPresetBase native editinlinenew hidecategories(Object); var() float StartDecay; var() float StartValue; var() float EndDecay; var() float EndValue; /** Virtual function to get the user-readable name for the curve */ function string GetDisplayName() { local string RetVal; RetVal = "LinearDecay"; return RetVal; } /** Virtual function to verify the settings are valid */ function bool AreSettingsValid(bool bIsSaving) { if (StartDecay >= EndDecay) { return false; } return true; } /** Virtual function to get the required KeyIn times*/ function bool GetRequiredKeyInTimes(out array RequiredKeyInTimes) { local bool bRetval; local int GenerateCount; local int PointCount; bRetval = true; GenerateCount = 2; if (StartDecay > 0.0) { GenerateCount += 1; } if (EndDecay < 1.0) { GenerateCount += 1; } RequiredKeyInTimes.Insert(0, GenerateCount); RequiredKeyInTimes[PointCount] = 0.0; PointCount++; if (StartDecay != 0.0) { RequiredKeyInTimes[PointCount] = StartDecay; PointCount++; } RequiredKeyInTimes[PointCount] = EndDecay; PointCount++; if (EndDecay < 1.0) { RequiredKeyInTimes[PointCount] = 1.0; PointCount++; } return bRetval; } /** Virtual function to generate curve */ function bool GenerateCurve(out array RequiredKeyInTimes, out array GeneratedPoints) { local bool bRetval; local int GenerateCount; local int PointCount; local float CurrentKeyIn; local float Difference; local float Alpha; bRetval = true; GenerateCount = RequiredKeyInTimes.Length; GeneratedPoints.Insert(0, GenerateCount); Difference = EndDecay - StartDecay; /*** `Log("Generated Data for " $ GetDisplayName()); ***/ for (PointCount = 0; PointCount < RequiredKeyInTimes.Length; PointCount++) { CurrentKeyIn = RequiredKeyInTimes[PointCount]; GeneratedPoints[PointCount].KeyIn = CurrentKeyIn; GeneratedPoints[PointCount].TangentsValid = false; GeneratedPoints[PointCount].IntepMode = CIM_CurveAuto; if (CurrentKeyIn < StartDecay) { GeneratedPoints[PointCount].KeyOut = StartValue; } else if (CurrentKeyIn > EndDecay) { GeneratedPoints[PointCount].KeyOut = EndValue; } else { Alpha = (CurrentKeyIn - StartDecay) / Difference; GeneratedPoints[PointCount].KeyOut = Lerp(StartValue, EndValue, Alpha); } /*** `Log(" Key " $ PointCount $ " - " $ CurrentKeyIn $ " - " $ GeneratedPoints[PointCount].KeyOut); ***/ } return bRetval; } /** */ cpptext { } /** */ defaultproperties { StartDecay=0.0 StartValue=1.0 EndDecay=1.0 EndValue=0.0 }