Files
Naked-Desire/Source/NakedDesire/MissionBuilder/Goals/FlashGoal.cpp
T
2026-06-03 15:16:21 +03:00

82 lines
1.7 KiB
C++

// © 2025 Naked People Team. All Rights Reserved.
#include "FlashGoal.h"
#include "NakedDesire/NPC/NPCAIController.h"
#include "NakedDesire/Player/NakedDesireCharacter.h"
#define LOCTEXT_NAMESPACE "Missions.Goals.Flash"
const FText GoalsFlashSingle = LOCTEXT("Description.Single", "Flash someone {BodyPart} once");
const FText GoalsFlashMultiple = LOCTEXT("Description.Multiple", "Flash {BodyPart} to {PeopleCount} people");
#undef LOCTEXT_NAMESPACE
void UFlashGoal::Init(ANakedDesireCharacter* PlayerCharacter)
{
Super::Init(PlayerCharacter);
PlayerNoticedHandle = PlayerCharacter->OnNoticed.AddUObject(this, &UFlashGoal::OnPlayerNoticed);
}
void UFlashGoal::Complete()
{
Super::Complete();
Player->OnNoticed.Remove(PlayerNoticedHandle);
}
FText UFlashGoal::GetDescription() const
{
FText BodyTypeString;
switch (BodyType)
{
case EBodyPart::Ass:
BodyTypeString = FText::FromString("Ass");
break;
case EBodyPart::Boobs:
BodyTypeString = FText::FromString("Boobs");
break;
case EBodyPart::Genitals:
BodyTypeString = FText::FromString("Genitals");
break;
default:
BodyTypeString = FText::FromString("None");
break;
}
if (RequiredFlashCount == 1)
{
return FText::Format(GoalsFlashSingle,
FFormatNamedArguments
{
{TEXT("BodyPart"), BodyTypeString}
});
}
return FText::Format(GoalsFlashMultiple,
FFormatNamedArguments
{
{TEXT("BodyPart"), BodyTypeString},
{TEXT("PeopleCount"), RequiredFlashCount}
});
}
void UFlashGoal::OnPlayerNoticed(ANPCAIController* NPC)
{
if (IsCompleted || !CheckRestrictions())
{
return;
}
if (!NoticedActors.Contains(NPC))
{
NoticedActors.Add(NPC);
}
if (NoticedActors.Num() >= RequiredFlashCount)
{
Complete();
}
}