Add resource node persistence
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "AgrarianGameCharacter.h"
|
||||
#include "AgrarianInventoryComponent.h"
|
||||
#include "AgrarianItemDefinitionAsset.h"
|
||||
#include "AgrarianSaveGame.h"
|
||||
#include "Components/StaticMeshComponent.h"
|
||||
#include "TimerManager.h"
|
||||
#include "Net/UnrealNetwork.h"
|
||||
@@ -94,6 +95,40 @@ void AAgrarianResourceNode::OnRep_RemainingHarvests()
|
||||
UpdateDepletedState();
|
||||
}
|
||||
|
||||
FName AAgrarianResourceNode::GetResourcePersistenceId() const
|
||||
{
|
||||
return PersistenceNodeId != NAME_None ? PersistenceNodeId : GetFName();
|
||||
}
|
||||
|
||||
FAgrarianSavedResourceNode AAgrarianResourceNode::CaptureResourceSaveState() const
|
||||
{
|
||||
FAgrarianSavedResourceNode SavedNode;
|
||||
SavedNode.ResourceNodeId = GetResourcePersistenceId();
|
||||
SavedNode.RemainingHarvests = RemainingHarvests;
|
||||
SavedNode.bRespawnsForMvp = bRespawnsForMvp;
|
||||
return SavedNode;
|
||||
}
|
||||
|
||||
void AAgrarianResourceNode::ApplyResourceSaveState(const FAgrarianSavedResourceNode& SavedNode)
|
||||
{
|
||||
if (!HasAuthority() || SavedNode.ResourceNodeId == NAME_None || SavedNode.ResourceNodeId != GetResourcePersistenceId())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RemainingHarvests = FMath::Clamp(SavedNode.RemainingHarvests, 0, FMath::Max(1, MaxHarvests));
|
||||
if (RemainingHarvests > 0)
|
||||
{
|
||||
if (UWorld* World = GetWorld())
|
||||
{
|
||||
World->GetTimerManager().ClearTimer(RespawnTimerHandle);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateDepletedState();
|
||||
ScheduleRespawnIfNeeded();
|
||||
}
|
||||
|
||||
bool AAgrarianResourceNode::HasRequiredTool(const AAgrarianGameCharacter* Interactor) const
|
||||
{
|
||||
if (RequiredToolItemId == NAME_None)
|
||||
|
||||
Reference in New Issue
Block a user