64 lines
920 B
C++
64 lines
920 B
C++
// © 2025 Naked People Team. All Rights Reserved.
|
|
|
|
|
|
#include "Mission.h"
|
|
|
|
#include "MissionGoal.h"
|
|
|
|
void UMission::Init(ANakedDesireCharacter* PlayerCharacter)
|
|
{
|
|
Player = PlayerCharacter;
|
|
|
|
for (const auto& Goal : Goals)
|
|
{
|
|
Goal->Init(Player);
|
|
auto Handle = Goal->OnUpdate.AddUObject(this, &UMission::OnGoalUpdated);
|
|
GoalUpdateHandles.Add(Handle);
|
|
}
|
|
}
|
|
|
|
void UMission::OnGoalUpdated(UMissionGoal* MissionGoal)
|
|
{
|
|
if (IsCompleted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (CheckGoals())
|
|
{
|
|
Complete();
|
|
}
|
|
}
|
|
|
|
void UMission::Complete()
|
|
{
|
|
IsCompleted = true;
|
|
|
|
for (const auto& Goal : Goals)
|
|
{
|
|
for (const auto& Handle : GoalUpdateHandles)
|
|
{
|
|
Goal->OnUpdate.Remove(Handle);
|
|
}
|
|
}
|
|
|
|
OnComplete.Broadcast(this);
|
|
}
|
|
|
|
bool UMission::CheckGoals()
|
|
{
|
|
if (IsCompleted)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
for (const auto& Goal : Goals)
|
|
{
|
|
if (!Goal->GetIsCompleted() || !Goal->CheckRestrictions())
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|