1
0
KF2-Dev-Scripts/KFGame/Classes/KFSeqEvent_ObjectiveProgress.uc
2020-12-13 18:01:13 +03:00

123 lines
3.6 KiB
Ucode

//=============================================================================
// KFSeqEvent_ObjectiveProgress
//=============================================================================
// Event telling Kismet that objective progress has been made
//=============================================================================
// Killing Floor 2
// Copyright (C) 2018 Tripwire Interactive LLC
//=============================================================================
class KFSeqEvent_ObjectiveProgress extends SequenceEvent
native(Sequence)
abstract;
/** Thresholds associated with output links (a link will be added for each threshold) */
var() bool bUseReverseProgress;
var() array<float> ProgressThresholds;
var editoronly const string OutputLinkText;
var const int ProgressOutputStartIndex;
cpptext
{
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
const FName PropertyName = PropertyChangedEvent.Property ?
PropertyChangedEvent.Property->GetFName() : NAME_None;
if ((PropertyName == FName(TEXT("bUseReverseProgress"))) ||
(PropertyName == FName(TEXT("ProgressThresholds")) && PropertyChangedEvent.ChangeType == EPropertyChangeType::ArrayAdd))
{
INT NumThresholds = ProgressThresholds.Num();
for (INT i = 1; i <= NumThresholds; ++i)
{
if (bUseReverseProgress)
{
ProgressThresholds[i-1] = float(NumThresholds - i) / float(NumThresholds);
}
else
{
ProgressThresholds[i-1] = float(i) / float(NumThresholds);
}
}
}
for (INT i = 0; i < ProgressThresholds.Num(); ++i)
{
ProgressThresholds[i] = Clamp(ProgressThresholds[i], 0.f, 1.f);
}
INT NumProgressOutputs = OutputLinks.Num() - ProgressOutputStartIndex;
if (NumProgressOutputs < ProgressThresholds.Num())
{
while (NumProgressOutputs < ProgressThresholds.Num())
{
OutputLinks.AddZeroed();
NumProgressOutputs++;
}
}
else if (NumProgressOutputs > ProgressThresholds.Num())
{
while (NumProgressOutputs > ProgressThresholds.Num())
{
OutputLinks.Remove(OutputLinks.Num()-1);
NumProgressOutputs--;
}
}
#if WITH_EDITORONLY_DATA
for (INT i = ProgressOutputStartIndex; i < OutputLinks.Num(); ++i)
{
OutputLinks[i].LinkDesc = FString::Printf(TEXT("%s: %1.2f"), *OutputLinkText, ProgressThresholds[i-ProgressOutputStartIndex]);
}
#endif
Super::PostEditChangeProperty(PropertyChangedEvent);
}
virtual void OnCreated()
{
Super::OnCreated();
const INT NumDefaultThresholds = 4;
for (INT i = 1; i <= NumDefaultThresholds; ++i)
{
if (bUseReverseProgress)
{
ProgressThresholds.AddItem(float(NumDefaultThresholds - i) / float(NumDefaultThresholds));
OutputLinks.AddZeroed();
#if WITH_EDITORONLY_DATA
for (INT i = ProgressOutputStartIndex; i < OutputLinks.Num(); ++i)
{
OutputLinks[i].LinkDesc = FString::Printf(TEXT("%s: %1.2f"), *OutputLinkText, ProgressThresholds[i-ProgressOutputStartIndex]);
}
#endif
}
else
{
ProgressThresholds.AddItem(float(i) / float(NumDefaultThresholds));
OutputLinks.AddZeroed();
#if WITH_EDITORONLY_DATA
for (INT i = ProgressOutputStartIndex; i < OutputLinks.Num(); ++i)
{
OutputLinks[i].LinkDesc = FString::Printf(TEXT("%s: %1.2f"), *OutputLinkText, ProgressThresholds[i-ProgressOutputStartIndex]);
}
#endif
}
}
};
}
defaultproperties
{
ObjCategory="KF"
ObjName="Objective Progress"
VariableLinks.Empty
bPlayerOnly=false
MaxTriggerCount=0
OutputLinks.Empty
VariableLinks.Empty
OutputLinkText="Progress Percent"
ProgressOutputStartIndex=0
}