Files
UnrealEngine/Engine/Plugins/Runtime/MassGameplay/Source/MassMovement/Private/MassMovementFragments.cpp
2025-05-18 13:04:45 +08:00

43 lines
1.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "MassMovementFragments.h"
void FMassMovementParameters::Update()
{
for (FMassMovementStyleParameters& Style : MovementStyles)
{
if (Style.DesiredSpeeds.IsEmpty())
{
continue;
}
// Calculate probability threshold for the speeds, so that a speed can be looked up based in a float in range [0...1].
float Total = 0.0f;
for (const FMassMovementStyleSpeedParameters& Speed : Style.DesiredSpeeds)
{
Total += Speed.Probability;
}
if (Total > KINDA_SMALL_NUMBER)
{
const float Scale = 1.0f / Total;
float Sum = 0.0f;
for (FMassMovementStyleSpeedParameters& Speed : Style.DesiredSpeeds)
{
Sum += Speed.Probability;
Speed.ProbabilityThreshold = FMath::Min(Sum * Scale, 1.0f);
}
}
else
{
const float Scale = 1.0f / static_cast<float>(Style.DesiredSpeeds.Num());
float Sum = 0.0f;
for (FMassMovementStyleSpeedParameters& Speed : Style.DesiredSpeeds)
{
Sum += 1.0f;
Speed.ProbabilityThreshold = FMath::Min(Sum * Scale, 1.0f);
}
}
}
}