86 lines
2.5 KiB
C++
86 lines
2.5 KiB
C++
|
// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action.
|
|||
|
|
|||
|
|
|||
|
#include "DataAssets/OLSExperienceDefinitionPrimaryDataAsset.h"
|
|||
|
|
|||
|
#include "GameFeatureAction.h"
|
|||
|
#if WITH_EDITOR
|
|||
|
#include "Misc/DataValidation.h"
|
|||
|
#endif
|
|||
|
|
|||
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(OLSExperienceDefinitionPrimaryDataAsset)
|
|||
|
|
|||
|
#define LOCTEXT_NAMESPACE "OLSSystem"
|
|||
|
|
|||
|
UOLSExperienceDefinitionPrimaryDataAsset::UOLSExperienceDefinitionPrimaryDataAsset()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
#if WITH_EDITOR
|
|||
|
EDataValidationResult UOLSExperienceDefinitionPrimaryDataAsset::IsDataValid(FDataValidationContext& context) const
|
|||
|
{
|
|||
|
EDataValidationResult result = CombineDataValidationResults(Super::IsDataValid(context), EDataValidationResult::Valid);
|
|||
|
|
|||
|
int32 entryIndex = 0;
|
|||
|
for (const UGameFeatureAction* action : Actions)
|
|||
|
{
|
|||
|
if (action)
|
|||
|
{
|
|||
|
EDataValidationResult childResult = action->IsDataValid(context);
|
|||
|
result = CombineDataValidationResults(result, childResult);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
result = EDataValidationResult::Invalid;
|
|||
|
context.AddError(FText::Format(LOCTEXT("ActionEntryIsNull", "Null entry at index {0} in Actions"), FText::AsNumber(entryIndex)));
|
|||
|
}
|
|||
|
|
|||
|
++entryIndex;
|
|||
|
}
|
|||
|
|
|||
|
// Make sure users didn't subclass from a BP of this (it's fine and expected to subclass once in BP, just not twice)
|
|||
|
if (!GetClass()->IsNative())
|
|||
|
{
|
|||
|
const UClass* parentClass = GetClass()->GetSuperClass();
|
|||
|
|
|||
|
// Find the native parent
|
|||
|
const UClass* firstNativeParent = parentClass;
|
|||
|
while ((firstNativeParent != nullptr) && !firstNativeParent->IsNative())
|
|||
|
{
|
|||
|
firstNativeParent = firstNativeParent->GetSuperClass();
|
|||
|
}
|
|||
|
|
|||
|
if (firstNativeParent != parentClass)
|
|||
|
{
|
|||
|
context.AddError(FText::Format(LOCTEXT("ExperienceInheritenceIsUnsupported", "Blueprint subclasses of Blueprint experiences is not currently supported (use composition via ActionSets instead). Parent class was {0} but should be {1}."),
|
|||
|
FText::AsCultureInvariant(GetPathNameSafe(parentClass)),
|
|||
|
FText::AsCultureInvariant(GetPathNameSafe(firstNativeParent))
|
|||
|
));
|
|||
|
result = EDataValidationResult::Invalid;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
FString UOLSExperienceDefinitionPrimaryDataAsset::GetIdentifierString() const
|
|||
|
{
|
|||
|
return GetPrimaryAssetId().ToString();
|
|||
|
}
|
|||
|
|
|||
|
#if WITH_EDITOR
|
|||
|
void UOLSExperienceDefinitionPrimaryDataAsset::UpdateAssetBundleData()
|
|||
|
{
|
|||
|
Super::UpdateAssetBundleData();
|
|||
|
|
|||
|
for (UGameFeatureAction* action : Actions)
|
|||
|
{
|
|||
|
if (action)
|
|||
|
{
|
|||
|
action->AddAdditionalAssetBundleData(AssetBundleData);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|