I’m creating a Save System, in CPP. which I’m trying to make it also interactable in Blueprints, and widget stuff.
I made Interface:
// Interface Declaration
UINTERFACE(MinimalAPI, Blueprintable)
class UF_CndGameSys_Save : public UInterface
// Interface Implemented Class
class PROJECT_API IF_CndGameSys_Save
{
GENERATED_BODY()
public:
// Add pure virtual functions to this class here. This is the class that will be inherited to implement this interface.
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, meta = (DisplayName = "GameData Get"))
void GD_Get(UCnd_GameData* GameData);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, meta = (DisplayName = "GameData Load"))
void GD_Load(bool ASync);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, meta = (DisplayName = "GameData Save"))
void GD_Save(bool ASync);
};
Heard GameInstance preserves data between levels/worlds. Well, I want it to load the game data, upon it initializes.
class PROJECT_API UCndGameInstance : public UGameInstance, public IF_CndGameSys_Save
{
GENERATED_BODY()
public:
// - INITIALIZER CONSTRUCTOR (Default)
UCndGameInstance();
// Variables
public:
UCndSys_SaveData* SaveData;
FString SlotName;
// Functions
public:
void BPF_Init();
};
I don’t know if I should include Interface in my Save System.
// Event Dispatcher
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FED_OnGameLoaded);
// Data Structure Class
class PROJECT_API UCnd_GameData : public USaveGame
{
GENERATED_BODY()
public:
UPROPERTY(VisibleAnywhere, Category = Basic)
FCndSaveSys_GameData GD;
};
// Save Game Class
class PROJECT_API UCndSys_Save : public USaveGame, public IF_CndGameSys_Save
// Variables
public:
UPROPERTY(EditAnywhere, Category = Basic)
uint32 GD_User_Index;
UPROPERTY(EditAnywhere, Category = Basic)
FString GD_SlotName;
bool GD_ASyncSave;
//semi-public:
UCnd_GameData* Cnd_SavedGD;
UCndSys_Save* Cnd_SaveInstance;
FAsyncSaveGameToSlotDelegate DEL_Cnd_ASyncSave_GD;
FAsyncLoadGameFromSlotDelegate DEL_Cnd_ASyncLoad_GD;
private:
// Event Dispatchers
public:
UPROPERTY(BlueprintAssignable, Category = "Save System|Event Dispatchers")
FED_OnGameLoaded OnGameLoaded;
// Functions
public:
// Player Data
bool DoesSaveExists(FString SlotName, int32 User_Index);
// Gets Player's Game Data
UFUNCTION(BlueprintCallable, Category = "Saving System", meta = (DisplayName = "GameData Get", ToolTip = "Gets Player's Game Data."))
void BPF_GD_Get(UCndSys_Save* GameData);
// Saves Player's Game Data
UFUNCTION(BlueprintCallable, Category = "Saving System", meta = (DisplayName = "Save Player Game Data", ToolTip = "Saves Player's Game Data."))
void BPF_GD_Save(bool ASync);
// Loads Player's Game Data
UFUNCTION(BlueprintCallable, Category = "Saving System", meta = (DisplayName = "Load Player Game Data", ToolTip = "Loads Player's Game Data."))
void BPF_GD_Load(bool ASync);
void BPF_PTR_GD_Load();
// New Save
UFUNCTION(BlueprintCallable, Category = "Saving System", meta = (DisplayName = "Create New Save", ToolTip = "Creates new player Game Data."))
void BPF_GD_CreateNew();
How I should set all of this properly?
Sitting on this for 4 days now.