Added world items to save game
This commit is contained in:
Binary file not shown.
@@ -123,6 +123,12 @@ void UClothingManager::SpawnClothingPickup(UClothingItemInstance* ItemInstance)
|
|||||||
UE_LOG(LogTemp, Warning, TEXT("UClothingManager::SpawnClothingPickup NewItemPickup == nullptr"));
|
UE_LOG(LogTemp, Warning, TEXT("UClothingManager::SpawnClothingPickup NewItemPickup == nullptr"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem<USaveSubsystem>();
|
||||||
|
FItemSaveRecord ItemSaveRecord;
|
||||||
|
ItemSaveRecord.Init(ItemInstance);
|
||||||
|
ItemSaveRecord.WorldTransform = NewItemPickup->GetActorTransform();
|
||||||
|
SaveSubsystem->GetCurrentSave()->WorldItems.Push(ItemSaveRecord);
|
||||||
|
|
||||||
NewItemPickup->SetItem(ItemInstance);
|
NewItemPickup->SetItem(ItemInstance);
|
||||||
}
|
}
|
||||||
@@ -184,10 +190,6 @@ void UClothingManager::TakeClothing(UClothingItemInstance* ClothingItemInstance)
|
|||||||
ItemSaveRecord.Init(ClothingItemInstance);
|
ItemSaveRecord.Init(ClothingItemInstance);
|
||||||
|
|
||||||
SaveSubsystem->GetCurrentSave()->EquippedItems.Push(ItemSaveRecord);
|
SaveSubsystem->GetCurrentSave()->EquippedItems.Push(ItemSaveRecord);
|
||||||
SaveSubsystem->GetCurrentSave()->DroppedItems.RemoveAll([ClothingItemInstance](const FItemSaveRecord& Item)
|
|
||||||
{
|
|
||||||
return Item.InstanceId == ClothingItemInstance->GetInstanceId();
|
|
||||||
});
|
|
||||||
|
|
||||||
PutOnClothing(ClothingItemInstance);
|
PutOnClothing(ClothingItemInstance);
|
||||||
}
|
}
|
||||||
@@ -235,11 +237,6 @@ void UClothingManager::DropClothing(const EClothingSlotType ClothingType)
|
|||||||
if (!ClothingItemInstance)
|
if (!ClothingItemInstance)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem<USaveSubsystem>();
|
|
||||||
FItemSaveRecord ItemSaveRecord;
|
|
||||||
ItemSaveRecord.Init(ClothingItemInstance);
|
|
||||||
SaveSubsystem->GetCurrentSave()->DroppedItems.Push(ItemSaveRecord);
|
|
||||||
|
|
||||||
SpawnClothingPickup(ClothingItemInstance);
|
SpawnClothingPickup(ClothingItemInstance);
|
||||||
|
|
||||||
OnClothingDropped.Broadcast(ClothingItemInstance);
|
OnClothingDropped.Broadcast(ClothingItemInstance);
|
||||||
|
|||||||
@@ -4,12 +4,14 @@
|
|||||||
#include "Kismet/GameplayStatics.h"
|
#include "Kismet/GameplayStatics.h"
|
||||||
#include "NakedDesire/Clothing/ClothingItem.h"
|
#include "NakedDesire/Clothing/ClothingItem.h"
|
||||||
#include "NakedDesire/Clothing/ClothingItemInstance.h"
|
#include "NakedDesire/Clothing/ClothingItemInstance.h"
|
||||||
|
#include "NakedDesire/Interactables/ItemPickup.h"
|
||||||
#include "UObject/ConstructorHelpers.h"
|
#include "UObject/ConstructorHelpers.h"
|
||||||
#include "NakedDesire/Interactables/Wardrobe.h"
|
#include "NakedDesire/Interactables/Wardrobe.h"
|
||||||
#include "NakedDesire/MissionBuilder/MissionsConfig.h"
|
#include "NakedDesire/MissionBuilder/MissionsConfig.h"
|
||||||
#include "NakedDesire/MissionBuilder/MissionsManager.h"
|
#include "NakedDesire/MissionBuilder/MissionsManager.h"
|
||||||
#include "NakedDesire/Player/NakedDesireCharacter.h"
|
#include "NakedDesire/Player/NakedDesireCharacter.h"
|
||||||
#include "NakedDesire/SaveGame/GlobalSaveGameData.h"
|
#include "NakedDesire/SaveGame/GlobalSaveGameData.h"
|
||||||
|
#include "NakedDesire/SaveGame/ItemSaveRecord.h"
|
||||||
#include "NakedDesire/SaveGame/SaveSubsystem.h"
|
#include "NakedDesire/SaveGame/SaveSubsystem.h"
|
||||||
|
|
||||||
void ANakedDesireGameMode::RestartGame()
|
void ANakedDesireGameMode::RestartGame()
|
||||||
@@ -67,6 +69,17 @@ void ANakedDesireGameMode::BeginPlay()
|
|||||||
Wardrobe = WardrobeActor;
|
Wardrobe = WardrobeActor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem<USaveSubsystem>();
|
||||||
|
for (const auto& Item : SaveSubsystem->GetCurrentSave()->WorldItems)
|
||||||
|
{
|
||||||
|
UClothingItemInstance* NewItemInstance = NewObject<UClothingItemInstance>(this);
|
||||||
|
NewItemInstance->Init(Item.Definition.Get());
|
||||||
|
NewItemInstance->Condition = Item.Condition;
|
||||||
|
NewItemInstance->SetInstanceId(Item.InstanceId);
|
||||||
|
AItemPickup* NewItemPickup = GetWorld()->SpawnActor<AItemPickup>(ItemPickupClass, Item.WorldTransform);
|
||||||
|
NewItemPickup->SetItem(NewItemInstance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ANakedDesireGameMode::RefreshDailyMissions()
|
void ANakedDesireGameMode::RefreshDailyMissions()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "GameFramework/GameModeBase.h"
|
#include "GameFramework/GameModeBase.h"
|
||||||
#include "NakedDesireGameMode.generated.h"
|
#include "NakedDesireGameMode.generated.h"
|
||||||
|
|
||||||
|
class AItemPickup;
|
||||||
class UClothingItemInstance;
|
class UClothingItemInstance;
|
||||||
class UMissionsConfig;
|
class UMissionsConfig;
|
||||||
class AWardrobe;
|
class AWardrobe;
|
||||||
@@ -49,6 +50,9 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void RefreshDailyMissions();
|
void RefreshDailyMissions();
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "Items")
|
||||||
|
TSubclassOf<AItemPickup> ItemPickupClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,14 @@
|
|||||||
#include "ItemPickup.h"
|
#include "ItemPickup.h"
|
||||||
#include "Components/BoxComponent.h"
|
#include "Components/BoxComponent.h"
|
||||||
#include "Components/WidgetComponent.h"
|
#include "Components/WidgetComponent.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
#include "NakedDesire/Clothing/ClothingItem.h"
|
#include "NakedDesire/Clothing/ClothingItem.h"
|
||||||
#include "NakedDesire/Clothing/ClothingItemInstance.h"
|
#include "NakedDesire/Clothing/ClothingItemInstance.h"
|
||||||
#include "NakedDesire/Clothing/ClothingManager.h"
|
#include "NakedDesire/Clothing/ClothingManager.h"
|
||||||
#include "NakedDesire/Player/NakedDesireCharacter.h"
|
#include "NakedDesire/Player/NakedDesireCharacter.h"
|
||||||
|
#include "NakedDesire/SaveGame/GlobalSaveGameData.h"
|
||||||
|
#include "NakedDesire/SaveGame/ItemSaveRecord.h"
|
||||||
|
#include "NakedDesire/SaveGame/SaveSubsystem.h"
|
||||||
|
|
||||||
AItemPickup::AItemPickup()
|
AItemPickup::AItemPickup()
|
||||||
{
|
{
|
||||||
@@ -27,7 +31,12 @@ void AItemPickup::Interact_Implementation(ANakedDesireCharacter* Player)
|
|||||||
{
|
{
|
||||||
if (ClothingItemInstance)
|
if (ClothingItemInstance)
|
||||||
{
|
{
|
||||||
|
USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem<USaveSubsystem>();
|
||||||
Player->ClothingManager->TakeClothing(ClothingItemInstance);
|
Player->ClothingManager->TakeClothing(ClothingItemInstance);
|
||||||
|
SaveSubsystem->GetCurrentSave()->WorldItems.RemoveAll([this](const FItemSaveRecord& Item)
|
||||||
|
{
|
||||||
|
return ClothingItemInstance->GetInstanceId() == Item.InstanceId;
|
||||||
|
});
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,3 +15,8 @@ void UItemInstance::PostDuplicate(EDuplicateMode::Type DuplicateMode)
|
|||||||
Super::PostDuplicate(DuplicateMode);
|
Super::PostDuplicate(DuplicateMode);
|
||||||
InstanceId = FGuid::NewGuid();
|
InstanceId = FGuid::NewGuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UItemInstance::SetInstanceId(FGuid InId)
|
||||||
|
{
|
||||||
|
InstanceId = InId;
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ public:
|
|||||||
virtual void PostInitProperties() override;
|
virtual void PostInitProperties() override;
|
||||||
virtual void PostDuplicate(EDuplicateMode::Type DuplicateMode) override;
|
virtual void PostDuplicate(EDuplicateMode::Type DuplicateMode) override;
|
||||||
|
|
||||||
UFUNCTION(BlueprintPure, Category = "Item")
|
|
||||||
FGuid GetInstanceId() const { return InstanceId; }
|
FGuid GetInstanceId() const { return InstanceId; }
|
||||||
|
void SetInstanceId(FGuid InId);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
UPROPERTY(VisibleAnywhere, SaveGame, BlueprintReadOnly, Category = "Item", meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(VisibleAnywhere, SaveGame, BlueprintReadOnly, Category = "Item", meta = (AllowPrivateAccess = "true"))
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public:
|
|||||||
TArray<FItemSaveRecord> EquippedItems;
|
TArray<FItemSaveRecord> EquippedItems;
|
||||||
|
|
||||||
UPROPERTY(SaveGame)
|
UPROPERTY(SaveGame)
|
||||||
TArray<FItemSaveRecord> DroppedItems;
|
TArray<FItemSaveRecord> WorldItems;
|
||||||
|
|
||||||
UPROPERTY(SaveGame)
|
UPROPERTY(SaveGame)
|
||||||
int32 DaysPassed = 0;
|
int32 DaysPassed = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user