diff --git a/Content/Blueprints/GM_Main.uasset b/Content/Blueprints/GM_Main.uasset index 6cb1b85f..95b2a25f 100644 --- a/Content/Blueprints/GM_Main.uasset +++ b/Content/Blueprints/GM_Main.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4ac8a4698ff09263764e55006eacda0a70cd08e512d34bfada781dcb07085f1 -size 121492 +oid sha256:62dbef304c692d9bfef277fbebb307a368d0c546166496f291b99a014ce6e2c3 +size 121700 diff --git a/Source/NakedDesire/Clothing/ClothingManager.cpp b/Source/NakedDesire/Clothing/ClothingManager.cpp index 789c7a20..5f76c218 100644 --- a/Source/NakedDesire/Clothing/ClothingManager.cpp +++ b/Source/NakedDesire/Clothing/ClothingManager.cpp @@ -123,6 +123,12 @@ void UClothingManager::SpawnClothingPickup(UClothingItemInstance* ItemInstance) UE_LOG(LogTemp, Warning, TEXT("UClothingManager::SpawnClothingPickup NewItemPickup == nullptr")); return; } + + USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); + FItemSaveRecord ItemSaveRecord; + ItemSaveRecord.Init(ItemInstance); + ItemSaveRecord.WorldTransform = NewItemPickup->GetActorTransform(); + SaveSubsystem->GetCurrentSave()->WorldItems.Push(ItemSaveRecord); NewItemPickup->SetItem(ItemInstance); } @@ -184,10 +190,6 @@ void UClothingManager::TakeClothing(UClothingItemInstance* ClothingItemInstance) ItemSaveRecord.Init(ClothingItemInstance); SaveSubsystem->GetCurrentSave()->EquippedItems.Push(ItemSaveRecord); - SaveSubsystem->GetCurrentSave()->DroppedItems.RemoveAll([ClothingItemInstance](const FItemSaveRecord& Item) - { - return Item.InstanceId == ClothingItemInstance->GetInstanceId(); - }); PutOnClothing(ClothingItemInstance); } @@ -235,11 +237,6 @@ void UClothingManager::DropClothing(const EClothingSlotType ClothingType) if (!ClothingItemInstance) return; - USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); - FItemSaveRecord ItemSaveRecord; - ItemSaveRecord.Init(ClothingItemInstance); - SaveSubsystem->GetCurrentSave()->DroppedItems.Push(ItemSaveRecord); - SpawnClothingPickup(ClothingItemInstance); OnClothingDropped.Broadcast(ClothingItemInstance); diff --git a/Source/NakedDesire/Global/NakedDesireGameMode.cpp b/Source/NakedDesire/Global/NakedDesireGameMode.cpp index 5bb5f4ce..b79609e0 100644 --- a/Source/NakedDesire/Global/NakedDesireGameMode.cpp +++ b/Source/NakedDesire/Global/NakedDesireGameMode.cpp @@ -4,12 +4,14 @@ #include "Kismet/GameplayStatics.h" #include "NakedDesire/Clothing/ClothingItem.h" #include "NakedDesire/Clothing/ClothingItemInstance.h" +#include "NakedDesire/Interactables/ItemPickup.h" #include "UObject/ConstructorHelpers.h" #include "NakedDesire/Interactables/Wardrobe.h" #include "NakedDesire/MissionBuilder/MissionsConfig.h" #include "NakedDesire/MissionBuilder/MissionsManager.h" #include "NakedDesire/Player/NakedDesireCharacter.h" #include "NakedDesire/SaveGame/GlobalSaveGameData.h" +#include "NakedDesire/SaveGame/ItemSaveRecord.h" #include "NakedDesire/SaveGame/SaveSubsystem.h" void ANakedDesireGameMode::RestartGame() @@ -67,6 +69,17 @@ void ANakedDesireGameMode::BeginPlay() Wardrobe = WardrobeActor; } } + + USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); + for (const auto& Item : SaveSubsystem->GetCurrentSave()->WorldItems) + { + UClothingItemInstance* NewItemInstance = NewObject(this); + NewItemInstance->Init(Item.Definition.Get()); + NewItemInstance->Condition = Item.Condition; + NewItemInstance->SetInstanceId(Item.InstanceId); + AItemPickup* NewItemPickup = GetWorld()->SpawnActor(ItemPickupClass, Item.WorldTransform); + NewItemPickup->SetItem(NewItemInstance); + } } void ANakedDesireGameMode::RefreshDailyMissions() diff --git a/Source/NakedDesire/Global/NakedDesireGameMode.h b/Source/NakedDesire/Global/NakedDesireGameMode.h index e4f2db8e..fdcb52fd 100644 --- a/Source/NakedDesire/Global/NakedDesireGameMode.h +++ b/Source/NakedDesire/Global/NakedDesireGameMode.h @@ -6,6 +6,7 @@ #include "GameFramework/GameModeBase.h" #include "NakedDesireGameMode.generated.h" +class AItemPickup; class UClothingItemInstance; class UMissionsConfig; class AWardrobe; @@ -49,6 +50,9 @@ protected: private: void RefreshDailyMissions(); + + UPROPERTY(EditDefaultsOnly, Category = "Items") + TSubclassOf ItemPickupClass; }; diff --git a/Source/NakedDesire/Interactables/ItemPickup.cpp b/Source/NakedDesire/Interactables/ItemPickup.cpp index 0fc83659..1539225c 100644 --- a/Source/NakedDesire/Interactables/ItemPickup.cpp +++ b/Source/NakedDesire/Interactables/ItemPickup.cpp @@ -4,10 +4,14 @@ #include "ItemPickup.h" #include "Components/BoxComponent.h" #include "Components/WidgetComponent.h" +#include "Kismet/GameplayStatics.h" #include "NakedDesire/Clothing/ClothingItem.h" #include "NakedDesire/Clothing/ClothingItemInstance.h" #include "NakedDesire/Clothing/ClothingManager.h" #include "NakedDesire/Player/NakedDesireCharacter.h" +#include "NakedDesire/SaveGame/GlobalSaveGameData.h" +#include "NakedDesire/SaveGame/ItemSaveRecord.h" +#include "NakedDesire/SaveGame/SaveSubsystem.h" AItemPickup::AItemPickup() { @@ -27,7 +31,12 @@ void AItemPickup::Interact_Implementation(ANakedDesireCharacter* Player) { if (ClothingItemInstance) { + USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); Player->ClothingManager->TakeClothing(ClothingItemInstance); + SaveSubsystem->GetCurrentSave()->WorldItems.RemoveAll([this](const FItemSaveRecord& Item) + { + return ClothingItemInstance->GetInstanceId() == Item.InstanceId; + }); Destroy(); } } diff --git a/Source/NakedDesire/Items/ItemInstance.cpp b/Source/NakedDesire/Items/ItemInstance.cpp index 9fe2a8d0..3d16d609 100644 --- a/Source/NakedDesire/Items/ItemInstance.cpp +++ b/Source/NakedDesire/Items/ItemInstance.cpp @@ -15,3 +15,8 @@ void UItemInstance::PostDuplicate(EDuplicateMode::Type DuplicateMode) Super::PostDuplicate(DuplicateMode); InstanceId = FGuid::NewGuid(); } + +void UItemInstance::SetInstanceId(FGuid InId) +{ + InstanceId = InId; +} diff --git a/Source/NakedDesire/Items/ItemInstance.h b/Source/NakedDesire/Items/ItemInstance.h index b3d48ed4..fb335cb3 100644 --- a/Source/NakedDesire/Items/ItemInstance.h +++ b/Source/NakedDesire/Items/ItemInstance.h @@ -13,8 +13,8 @@ public: virtual void PostInitProperties() override; virtual void PostDuplicate(EDuplicateMode::Type DuplicateMode) override; - UFUNCTION(BlueprintPure, Category = "Item") FGuid GetInstanceId() const { return InstanceId; } + void SetInstanceId(FGuid InId); protected: UPROPERTY(VisibleAnywhere, SaveGame, BlueprintReadOnly, Category = "Item", meta = (AllowPrivateAccess = "true")) diff --git a/Source/NakedDesire/SaveGame/GlobalSaveGameData.h b/Source/NakedDesire/SaveGame/GlobalSaveGameData.h index b2caa67f..27d7875f 100644 --- a/Source/NakedDesire/SaveGame/GlobalSaveGameData.h +++ b/Source/NakedDesire/SaveGame/GlobalSaveGameData.h @@ -32,7 +32,7 @@ public: TArray EquippedItems; UPROPERTY(SaveGame) - TArray DroppedItems; + TArray WorldItems; UPROPERTY(SaveGame) int32 DaysPassed = 0;