(Feat) Add Craft Systeme
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "CraftingRecipeDataAsset.h"
|
||||
|
||||
#include "ItemDataAsset.h"
|
||||
|
||||
#if WITH_EDITOR
|
||||
#include "Misc/DataValidation.h"
|
||||
#endif
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Crafting"
|
||||
|
||||
FText UCraftingRecipeDataAsset::GetDisplayName() const
|
||||
{
|
||||
if (!DisplayNameOverride.IsEmpty())
|
||||
{
|
||||
return DisplayNameOverride;
|
||||
}
|
||||
|
||||
return ResultItem ? ResultItem->DisplayName : FText::GetEmpty();
|
||||
}
|
||||
|
||||
UTexture2D* UCraftingRecipeDataAsset::GetIcon() const
|
||||
{
|
||||
if (IconOverride)
|
||||
{
|
||||
return IconOverride;
|
||||
}
|
||||
|
||||
return ResultItem ? ResultItem->Icon : nullptr;
|
||||
}
|
||||
|
||||
#if WITH_EDITOR
|
||||
EDataValidationResult UCraftingRecipeDataAsset::IsDataValid(FDataValidationContext& Context) const
|
||||
{
|
||||
EDataValidationResult Result = Super::IsDataValid(Context);
|
||||
|
||||
if (!ResultItem)
|
||||
{
|
||||
Context.AddError(LOCTEXT("RecipeNoResult", "This recipe has no result item: it would consume the ingredients and give nothing back."));
|
||||
Result = EDataValidationResult::Invalid;
|
||||
}
|
||||
|
||||
if (RecipeId.IsNone())
|
||||
{
|
||||
Context.AddWarning(LOCTEXT("RecipeNoId", "RecipeId is empty. Saved recipe unlocks will not be able to identify this recipe."));
|
||||
}
|
||||
|
||||
// Deux lignes portant le meme objet donneraient un cout affiche en double
|
||||
// dans le panneau de detail, alors que la verification, elle, les cumule.
|
||||
// L'ecart entre les deux est indetectable a la lecture de l'asset.
|
||||
TSet<const UItemDataAsset*> SeenItems;
|
||||
SeenItems.Reserve(Ingredients.Num());
|
||||
|
||||
for (int32 Index = 0; Index < Ingredients.Num(); ++Index)
|
||||
{
|
||||
const FCraftIngredient& Ingredient = Ingredients[Index];
|
||||
|
||||
if (!Ingredient.Item)
|
||||
{
|
||||
Context.AddError(FText::Format(
|
||||
LOCTEXT("RecipeNullIngredient", "Ingredient {0} has no item assigned."), Index));
|
||||
Result = EDataValidationResult::Invalid;
|
||||
continue;
|
||||
}
|
||||
|
||||
bool bAlreadySeen = false;
|
||||
SeenItems.Add(Ingredient.Item, &bAlreadySeen);
|
||||
if (bAlreadySeen)
|
||||
{
|
||||
Context.AddError(FText::Format(
|
||||
LOCTEXT("RecipeDuplicateIngredient", "Item {0} appears twice in the ingredients. Merge them into a single line."),
|
||||
FText::FromString(Ingredient.Item->GetName())));
|
||||
Result = EDataValidationResult::Invalid;
|
||||
}
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
Reference in New Issue
Block a user