// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/SaveGame.h" #include "ProjectEleri/DialogueSystem/OrderManager.h" #include "ProjectEleri/DialogueSystem/QuestDatabase.h" #include "BookOfAlchemyManager.h" #include "InventoryComponent.h" #include "../System/Subsystem/ObjectPersistenceSubsystem.h" #include "Interface/SaveableObjectInterface.h" #include "ProjectEleri/GameEventSystem/GameEventSubsystem.h" #include "Data/GameplayStatEffect.h" #include "Data/StatForgeDefs.h" #include "ProjectEleri/System/TimeOfDayStruct.h" #include "EleriSaveGame.generated.h" USTRUCT() struct FActiveGameplayStatEffect_SerializedData { GENERATED_BODY() public: UPROPERTY() TSubclassOf GameplayEffectClass; UPROPERTY() TMap DataValueMap; UPROPERTY() int32 StackCount = 1; UPROPERTY() float RemainingDuration = -1.f; UPROPERTY() float NextTickDuration = -1.f; }; USTRUCT(BlueprintType) struct FSaveData { GENERATED_BODY() UPROPERTY() FTimeOfDayData TimeOfDay; UPROPERTY() TArray BookProgression; UPROPERTY() TMap InventoryData; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest") TArray QuestList; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Seeds") TArray PlantedSeedsList; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placed Objects") TArray PlacedActors; UPROPERTY() TMap ActorSaveData; UPROPERTY() TMap EventDataMap; UPROPERTY() FTransform PlayerTransform; UPROPERTY() TArray GameEffects; UPROPERTY() TArray StatData; void Initialize(); void SaveQuests(const TArray& Quests); void SetTimeOFDayData(int32 _Day, int32 _Month, int32 _Year, int32 _Minute, int32 _Hour); void SetBookProgressionData(TArray _BookProgression); void SetInventoryDataForActor(AActor* Actor, UInventoryComponent* Inventory); void SetPlantedSeedData(FName ActorId, FSeedSaveData SeedSaveData); void SetPlacedObjectsData(TArray InPlacedActors); void CollectSaveableActorsData(const UWorld* World); void SetGameEventData(const UWorld* World); void SetPlayerData(const UWorld* World); void SetAbilitySystemData(const UWorld* World); }; /** * */ UCLASS() class PROJECTELERI_API UEleriSaveGame : public USaveGame { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite) FSaveData SaveData; };