Setup NPC director
This commit is contained in:
@@ -54,7 +54,7 @@ float UStatsManager::ComputeObservedExposureRate()
|
||||
|
||||
for (int32 i = Observers.Num() - 1; i >= 0; --i)
|
||||
{
|
||||
AActor* Observer = Observers[i].Get();
|
||||
AActor* Observer = Observers[i].Actor.Get();
|
||||
if (!Observer)
|
||||
{
|
||||
Observers.RemoveAtSwap(i);
|
||||
@@ -64,7 +64,8 @@ float UStatsManager::ComputeObservedExposureRate()
|
||||
const float Exposure = OwnerCharacter->GetObservedExposureFrom(Observer->GetActorLocation(), Observer);
|
||||
if (Exposure > 0.0f)
|
||||
{
|
||||
SumNormalizedExposure += Exposure / MaxObservedExposure;
|
||||
// Weight by NPC type (§10.2): a Stalker's stare contributes more than a Walker's glance.
|
||||
SumNormalizedExposure += (Exposure / MaxObservedExposure) * Observers[i].Weight;
|
||||
++ActiveObservers;
|
||||
}
|
||||
}
|
||||
@@ -83,23 +84,27 @@ void UStatsManager::Init(UClothingManager* InClothingManager)
|
||||
ClothingManager = InClothingManager;
|
||||
}
|
||||
|
||||
void UStatsManager::SetObserved(const bool bObserved, AActor* Observer)
|
||||
void UStatsManager::SetObserved(const bool bObserved, AActor* Observer, const float Weight)
|
||||
{
|
||||
if (!Observer)
|
||||
return;
|
||||
|
||||
const int32 ExistingIndex = Observers.IndexOfByPredicate(
|
||||
[Observer](const FObserverEntry& Entry) { return Entry.Actor == Observer; });
|
||||
|
||||
bool bChanged = false;
|
||||
if (bObserved)
|
||||
{
|
||||
if (!Observers.Contains(Observer))
|
||||
if (ExistingIndex == INDEX_NONE)
|
||||
{
|
||||
Observers.Add(Observer);
|
||||
Observers.Add({ Observer, Weight });
|
||||
bChanged = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (ExistingIndex != INDEX_NONE)
|
||||
{
|
||||
bChanged = Observers.Remove(Observer) > 0;
|
||||
Observers.RemoveAtSwap(ExistingIndex);
|
||||
bChanged = true;
|
||||
}
|
||||
|
||||
if (bChanged)
|
||||
@@ -109,9 +114,9 @@ void UStatsManager::SetObserved(const bool bObserved, AActor* Observer)
|
||||
int32 UStatsManager::GetObserverCount() const
|
||||
{
|
||||
int32 Count = 0;
|
||||
for (const TWeakObjectPtr<AActor>& Observer : Observers)
|
||||
for (const FObserverEntry& Observer : Observers)
|
||||
{
|
||||
if (Observer.IsValid())
|
||||
if (Observer.Actor.IsValid())
|
||||
++Count;
|
||||
}
|
||||
return Count;
|
||||
|
||||
Reference in New Issue
Block a user