Add MVP resource tool rules

This commit is contained in:
2026-05-17 16:49:52 -07:00
parent a5ec210cd8
commit 843340ebdc
11 changed files with 184 additions and 14 deletions
+39 -6
View File
@@ -47,12 +47,27 @@ void AAgrarianResourceNode::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>
FText AAgrarianResourceNode::GetInteractionText_Implementation(const AAgrarianGameCharacter* Interactor) const
{
return RemainingHarvests > 0 ? FText::FromString(TEXT("Gather")) : FText::FromString(TEXT("Depleted"));
if (RemainingHarvests <= 0)
{
return FText::FromString(TEXT("Depleted"));
}
if (RequiredToolItemId != NAME_None && !HasRequiredTool(Interactor) && bAllowBareHandGathering)
{
return FText::FromString(TEXT("Gather by hand"));
}
return FText::FromString(TEXT("Gather"));
}
bool AAgrarianResourceNode::CanInteract_Implementation(const AAgrarianGameCharacter* Interactor) const
{
return RemainingHarvests > 0 && Interactor != nullptr;
if (RemainingHarvests <= 0 || !Interactor)
{
return false;
}
return RequiredToolItemId == NAME_None || bAllowBareHandGathering || HasRequiredTool(Interactor);
}
void AAgrarianResourceNode::Interact_Implementation(AAgrarianGameCharacter* Interactor)
@@ -64,7 +79,7 @@ void AAgrarianResourceNode::Interact_Implementation(AAgrarianGameCharacter* Inte
if (UAgrarianInventoryComponent* Inventory = Interactor->GetInventoryComponent())
{
const FAgrarianItemStack Granted = MakeYieldStack();
const FAgrarianItemStack Granted = MakeYieldStack(Interactor);
if (Inventory->AddItem(Granted))
{
RemainingHarvests--;
@@ -79,15 +94,33 @@ void AAgrarianResourceNode::OnRep_RemainingHarvests()
UpdateDepletedState();
}
FAgrarianItemStack AAgrarianResourceNode::MakeYieldStack() const
bool AAgrarianResourceNode::HasRequiredTool(const AAgrarianGameCharacter* Interactor) const
{
if (RequiredToolItemId == NAME_None)
{
return true;
}
const UAgrarianInventoryComponent* Inventory = Interactor ? Interactor->GetInventoryComponent() : nullptr;
return Inventory && Inventory->HasItem(RequiredToolItemId, 1);
}
int32 AAgrarianResourceNode::GetHarvestQuantityFor(const AAgrarianGameCharacter* Interactor) const
{
const int32 ToolBonus = HasRequiredTool(Interactor) ? FMath::Max(0, ToolQuantityBonus) : 0;
return FMath::Max(1, QuantityPerHarvest + ToolBonus);
}
FAgrarianItemStack AAgrarianResourceNode::MakeYieldStack(const AAgrarianGameCharacter* Interactor) const
{
const int32 HarvestQuantity = GetHarvestQuantityFor(Interactor);
if (YieldItemDefinition)
{
return YieldItemDefinition->MakeStack(QuantityPerHarvest);
return YieldItemDefinition->MakeStack(HarvestQuantity);
}
FAgrarianItemStack Granted = YieldItem;
Granted.Quantity = QuantityPerHarvest;
Granted.Quantity = HarvestQuantity;
return Granted;
}