(Feat) Add Harvetable
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "HarvestableDataAsset.h"
|
||||
|
||||
#include "ItemDataAsset.h"
|
||||
|
||||
#if WITH_EDITOR
|
||||
#include "Misc/DataValidation.h"
|
||||
#endif
|
||||
|
||||
#define LOCTEXT_NAMESPACE "HarvestableData"
|
||||
|
||||
int32 FHarvestDrop::Roll() const
|
||||
{
|
||||
if (!Item)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Le jet de chance d'abord : une ligne a 30 % qui echoue ne doit pas consommer
|
||||
// de tirage de quantite, sinon deux tables identiques a la chance pres ne
|
||||
// donneraient pas la meme suite -- sans consequence en jeu, mais deroutant a
|
||||
// deboguer avec une graine fixee.
|
||||
if (Chance < 1.f && FMath::FRand() > Chance)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Max borne par Min plutot que l'inverse : un designer qui saisit 3 puis 1
|
||||
// obtient 3, jamais un intervalle vide qui rendrait la ligne muette sans rien
|
||||
// dire. RandRange est inclusif des deux cotes.
|
||||
return FMath::RandRange(MinQuantity, FMath::Max(MinQuantity, MaxQuantity));
|
||||
}
|
||||
|
||||
#if WITH_EDITOR
|
||||
EDataValidationResult UHarvestableDataAsset::IsDataValid(FDataValidationContext& Context) const
|
||||
{
|
||||
EDataValidationResult Result = Super::IsDataValid(Context);
|
||||
|
||||
// Le symptome d'une ligne vide est fourbe : l'arbre se recolte, s'abat, et
|
||||
// rend simplement moins que prevu. Rien dans le log, rien a l'ecran.
|
||||
auto ValidateTable = [&Context, &Result](const TArray<FHarvestDrop>& Table, const FText& TableName)
|
||||
{
|
||||
for (int32 Index = 0; Index < Table.Num(); ++Index)
|
||||
{
|
||||
if (!Table[Index].Item)
|
||||
{
|
||||
Context.AddError(FText::Format(
|
||||
LOCTEXT("DropNoItem", "{0}[{1}] has no 'Item' assigned: this line would silently yield nothing."),
|
||||
TableName, FText::AsNumber(Index)));
|
||||
Result = EDataValidationResult::Invalid;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ValidateTable(PerHitDrops, LOCTEXT("PerHitTable", "Per Hit Drops"));
|
||||
ValidateTable(DepletionDrops, LOCTEXT("DepletionTable", "Depletion Drops"));
|
||||
|
||||
// Une ressource sans aucun butin est frappable, s'epuise, et ne donne rien.
|
||||
// C'est legitime pour un decor destructible ; ca ne l'est presque jamais ici.
|
||||
if (PerHitDrops.IsEmpty() && DepletionDrops.IsEmpty())
|
||||
{
|
||||
Context.AddWarning(LOCTEXT("NoDropsAtAll", "This harvestable has no drops at all: harvesting it will consume tool durability for nothing."));
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
Reference in New Issue
Block a user