Implemented the save system base
This commit is contained in:
parent
52d83193c4
commit
46247b0da4
@ -4,6 +4,7 @@
|
|||||||
GameDefaultMap=/Game/Legumix/MainMenu/LVL_MainMenu.LVL_MainMenu
|
GameDefaultMap=/Game/Legumix/MainMenu/LVL_MainMenu.LVL_MainMenu
|
||||||
GlobalDefaultGameMode=/Game/Legumix/BP_GameMode.BP_GameMode_C
|
GlobalDefaultGameMode=/Game/Legumix/BP_GameMode.BP_GameMode_C
|
||||||
EditorStartupMap=/Game/Legumix/Levels/LVL_GYM_00.LVL_GYM_00
|
EditorStartupMap=/Game/Legumix/Levels/LVL_GYM_00.LVL_GYM_00
|
||||||
|
GameInstanceClass=/Game/Legumix/BP_GameInstance.BP_GameInstance_C
|
||||||
|
|
||||||
[/Script/Engine.RendererSettings]
|
[/Script/Engine.RendererSettings]
|
||||||
r.AllowStaticLighting=False
|
r.AllowStaticLighting=False
|
||||||
|
BIN
Content/Legumix/BP_GameInstance.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Legumix/BP_GameInstance.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Legumix/BP_SaveGame.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Legumix/BP_SaveGame.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
66
Source/LegumeMix/Private/LMGameInstance.cpp
Normal file
66
Source/LegumeMix/Private/LMGameInstance.cpp
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "LMGameInstance.h"
|
||||||
|
|
||||||
|
#include "LMSaveGame.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
|
||||||
|
void ULMGameInstance::SaveSettings()
|
||||||
|
{
|
||||||
|
const bool bSuccess = UGameplayStatics::SaveGameToSlot(SaveGame, SaveGameSlot, UserIndex);
|
||||||
|
if (!bSuccess)
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Error, TEXT("Failed to save game settings."));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Display, TEXT("Saved game settings"));
|
||||||
|
}
|
||||||
|
SettingsSaved(SaveGameSlot, UserIndex, bSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULMGameInstance::AsyncSaveSettings()
|
||||||
|
{
|
||||||
|
FAsyncSaveGameToSlotDelegate SavedDelegate;
|
||||||
|
SavedDelegate.BindUObject(this, &ULMGameInstance::SettingsSaved);
|
||||||
|
|
||||||
|
UGameplayStatics::AsyncSaveGameToSlot(SaveGame, SaveGameSlot, UserIndex, SavedDelegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULMGameInstance::SettingsSaved_Implementation(const FString& SlotName, const int32 UserIndex, bool bSuccess)
|
||||||
|
{
|
||||||
|
if (!bSuccess)
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Error, TEXT("Failed to save game settings %s with user %i."), *SlotName, UserIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Display, TEXT("Successfully saved game settings %s for user %i"), *SlotName, UserIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULMGameInstance::LoadSettings()
|
||||||
|
{
|
||||||
|
if (ULMSaveGame* UnrealSaveGame = Cast<ULMSaveGame>(UGameplayStatics::LoadGameFromSlot(SaveGameSlot, UserIndex)))
|
||||||
|
{
|
||||||
|
SaveGame = UnrealSaveGame;
|
||||||
|
UE_LOG(LogTemp, Display, TEXT("Loaded game settings !"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!SaveGame)
|
||||||
|
{
|
||||||
|
SaveGame = CastChecked<ULMSaveGame>(UGameplayStatics::CreateSaveGameObject(ULMSaveGame::StaticClass()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UGameplayStatics::SaveGameToSlot(SaveGame, SaveGameSlot, UserIndex))
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Error, TEXT("Failed to create settings save."))
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Display, TEXT("Created game settings."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
Source/LegumeMix/Private/LMSaveGame.cpp
Normal file
4
Source/LegumeMix/Private/LMSaveGame.cpp
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "LMSaveGame.h"
|
59
Source/LegumeMix/Public/LMGameInstance.h
Normal file
59
Source/LegumeMix/Public/LMGameInstance.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Engine/GameInstance.h"
|
||||||
|
#include "LMGameInstance.generated.h"
|
||||||
|
|
||||||
|
class ULMSaveGame;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class LEGUMEMIX_API ULMGameInstance : public UGameInstance
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Saves the current settings.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category=Legumix)
|
||||||
|
void SaveSettings();
|
||||||
|
/**
|
||||||
|
* Saves the current settings asynchronously.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category=Legumix)
|
||||||
|
void AsyncSaveSettings();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback called when a save is finalized.
|
||||||
|
* @param SlotName The slot that was saved.
|
||||||
|
* @param UserIndex The user index assigned to the slot.
|
||||||
|
* @param bSuccess Whether the save succeeded or not.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintNativeEvent, Category=Legumix)
|
||||||
|
void SettingsSaved(const FString& SlotName, int32 UserIndex, bool bSuccess);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the save settings.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category=Legumix)
|
||||||
|
void LoadSettings();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* The save game to use.
|
||||||
|
*/
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Legumix, meta=(AllowPrivateAccess=true))
|
||||||
|
TObjectPtr<ULMSaveGame> SaveGame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The save game slot to use for the save.
|
||||||
|
*/
|
||||||
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Legumix, meta=(AllowPrivateAccess=true))
|
||||||
|
FString SaveGameSlot;
|
||||||
|
|
||||||
|
int UserIndex = 0;
|
||||||
|
};
|
16
Source/LegumeMix/Public/LMSaveGame.h
Normal file
16
Source/LegumeMix/Public/LMSaveGame.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/SaveGame.h"
|
||||||
|
#include "LMSaveGame.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class LEGUMEMIX_API ULMSaveGame : public USaveGame
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
};
|
Reference in New Issue
Block a user