init
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
// © 2025 Naked People Team. All Rights Reserved.
|
||||
|
||||
|
||||
#include "EquipClothingRestriction.h"
|
||||
|
||||
#include "NakedDesire/Clothing/ClothingItem.h"
|
||||
#include "NakedDesire/Clothing/ClothingItemData.h"
|
||||
#include "NakedDesire/Clothing/ClothingManager.h"
|
||||
#include "NakedDesire/Player/NakedDesireCharacter.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Missions.Restriction.EquipClothing"
|
||||
const FText RestrictionEquipClothingDescriptionSingle = LOCTEXT("Description.Single", "Equip {ItemName}");
|
||||
const FText RestrictionEquipClothingDescriptionMultiple = LOCTEXT("Description.Multiple", "Equip one of: {ItemNames}");
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
void UEquipClothingRestriction::Init(ANakedDesireCharacter* PlayerCharacter)
|
||||
{
|
||||
Super::Init(PlayerCharacter);
|
||||
|
||||
if (!ClothingEquippedDelegateHandle.IsValid())
|
||||
{
|
||||
Player->ClothingManager->OnClothingEquip.AddUniqueDynamic(this, &UEquipClothingRestriction::OnClothingEquipped);
|
||||
}
|
||||
|
||||
if (!ClothingUnequippedDelegateHandle.IsValid())
|
||||
{
|
||||
Player->ClothingManager->OnClothingUnequip.AddUniqueDynamic(this, &UEquipClothingRestriction::OnClothingUnequipped);
|
||||
}
|
||||
|
||||
CheckClothing();
|
||||
}
|
||||
|
||||
void UEquipClothingRestriction::Stop()
|
||||
{
|
||||
Super::Stop();
|
||||
|
||||
Player->ClothingManager->OnClothingEquip.Remove(this, TEXT("OnClothingEquipped"));
|
||||
Player->ClothingManager->OnClothingUnequip.Remove(this, TEXT("OnClothingUnequipped"));
|
||||
}
|
||||
|
||||
FText UEquipClothingRestriction::GetDescription() const
|
||||
{
|
||||
if (ClothingItems.Num() == 1 && ClothingItems[0])
|
||||
{
|
||||
return FText::Format(RestrictionEquipClothingDescriptionSingle,
|
||||
FFormatNamedArguments
|
||||
{
|
||||
{TEXT("ItemName"), ClothingItems[0]->Name}
|
||||
});
|
||||
}
|
||||
|
||||
FString Items = TEXT("");
|
||||
for (const auto& Item : ClothingItems)
|
||||
{
|
||||
if (Item)
|
||||
{
|
||||
Items += Item->Name.ToString() + ", ";
|
||||
}
|
||||
}
|
||||
return FText::Format(RestrictionEquipClothingDescriptionMultiple,
|
||||
FFormatNamedArguments
|
||||
{
|
||||
{TEXT("ItemNames"), FText::FromString(Items)}
|
||||
});
|
||||
}
|
||||
|
||||
void UEquipClothingRestriction::OnClothingEquipped(const UClothingItemData* ClothingData)
|
||||
{
|
||||
const bool IsTargetClothing = ClothingItems.FindByPredicate([&ClothingData](const UClothingItem* Item)
|
||||
{
|
||||
return Item && Item->Name.EqualTo(ClothingData->Info->Name);
|
||||
}) != nullptr;
|
||||
if (IsTargetClothing)
|
||||
{
|
||||
Complete();
|
||||
}
|
||||
}
|
||||
|
||||
void UEquipClothingRestriction::OnClothingUnequipped(const UClothingItemData* ClothingData)
|
||||
{
|
||||
const bool IsTargetClothing = ClothingItems.FindByPredicate([&ClothingData](const UClothingItem* Item)
|
||||
{
|
||||
return Item && Item->Name.EqualTo(ClothingData->Info->Name);
|
||||
}) != nullptr;
|
||||
if (IsTargetClothing)
|
||||
{
|
||||
Init(Player);
|
||||
}
|
||||
}
|
||||
|
||||
void UEquipClothingRestriction::CheckClothing()
|
||||
{
|
||||
for (const FClothingSlotData& ClothingSlot : Player->ClothingManager->ClothingSlots)
|
||||
{
|
||||
if (!ClothingSlot.ClothingData)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const bool IsTargetClothing = ClothingItems.FindByPredicate([&ClothingSlot](const UClothingItem* Item)
|
||||
{
|
||||
return Item && Item->Name.EqualTo(ClothingSlot.ClothingData->Info->Name);
|
||||
}) != nullptr;
|
||||
if (IsTargetClothing)
|
||||
{
|
||||
Complete();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user