Compare commits
	
		
			3 Commits
		
	
	
		
			b4faa6ce0c
			...
			c941024ecf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c941024ecf | |||
| a3120e27f3 | |||
| e475a6a365 | 
| @ -3,6 +3,9 @@ | ||||
| 
 | ||||
| #include "NakatomiGameInstance.h" | ||||
| 
 | ||||
| #include "PlayerCharacter.h" | ||||
| #include "Kismet/GameplayStatics.h" | ||||
| 
 | ||||
| UNakatomiAIAttackTokenManager* UNakatomiGameInstance::GetAIAttackTokenManager() | ||||
| { | ||||
| 	return IsValid(AIAttackTokenManager) ? AIAttackTokenManager : (AIAttackTokenManager = NewObject<UNakatomiAIAttackTokenManager>(this, TEXT("AI Attack Token Manager"))); | ||||
| @ -19,3 +22,89 @@ void UNakatomiGameInstance::SetCurrentLevelManager(UNakatomiLevelManager* NewLev | ||||
| { | ||||
| 	currentLevelManager = NewLevelManager; | ||||
| } | ||||
| 
 | ||||
| UNakatomiSaveGame* UNakatomiGameInstance::LoadGameFromSlot(FString SaveSlotName) | ||||
| { | ||||
| 	if (UNakatomiSaveGame* Save = Cast<UNakatomiSaveGame>(UGameplayStatics::LoadGameFromSlot(SaveSlotName, 0))) | ||||
| 	{ | ||||
| 		SaveGameObject = Save; | ||||
| 		return SaveGameObject; | ||||
| 	} | ||||
| 
 | ||||
| 	return nullptr; | ||||
| } | ||||
| 
 | ||||
| bool UNakatomiGameInstance::SaveGame(bool ResetDefaults) | ||||
| { | ||||
| 	if (SaveGameObject == nullptr) | ||||
| 	{ | ||||
| 		UE_LOG(LogTemp, Warning, TEXT("SaveGame called without a loaded save game object.")); | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	if (ResetDefaults) | ||||
| 	{ | ||||
| 		SaveGameObject->ResetPlayerValuesToDefault(); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		APlayerCharacter* Player = Cast<APlayerCharacter>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); | ||||
| 		SaveGameObject->PlayerHealth = Player->GetCurrentHealthCount(); | ||||
| 		SaveGameObject->WeaponInventory = Player->WeaponInventory; | ||||
| 		SaveGameObject->CurrentInventorySlot = Player->GetCurrentInventorySlot(); | ||||
| 	} | ||||
| 
 | ||||
| 	SaveGameObject->LevelName = GetWorld()->GetMapName(); | ||||
| 	SaveGameObject->LevelName.RemoveFromStart(GetWorld()->StreamingLevelsPrefix); | ||||
| 
 | ||||
| 	return UGameplayStatics::SaveGameToSlot(SaveGameObject, SaveGameObject->PlayerName, 0); | ||||
| } | ||||
| 
 | ||||
| UNakatomiSaveGame* UNakatomiGameInstance::GetSaveGameObject() | ||||
| { | ||||
| 	return SaveGameObject; | ||||
| } | ||||
| 
 | ||||
| // TODO: This should either fail or append number if a save already exists with the same name
 | ||||
| UNakatomiSaveGame* UNakatomiGameInstance::CreateNewSaveGame(FString PlayerName) | ||||
| { | ||||
| 	if (UNakatomiSaveGame* Save = Cast<UNakatomiSaveGame>( | ||||
| 		UGameplayStatics::CreateSaveGameObject(UNakatomiSaveGame::StaticClass()))) | ||||
| 	{ | ||||
| 		SaveGameObject->PlayerName = PlayerName; | ||||
| 
 | ||||
| 		if (UGameplayStatics::SaveGameToSlot(Save, PlayerName, 0)) | ||||
| 		{ | ||||
| 			SaveGameObject = Save; | ||||
| 			return SaveGameObject; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	return nullptr; | ||||
| } | ||||
| 
 | ||||
| TArray<FNakatomiSaveFileInfo> UNakatomiGameInstance::GetAllSaveFilesFromDisk() | ||||
| { | ||||
| 	TArray<FNakatomiSaveFileInfo> Files; | ||||
| 
 | ||||
| 	IFileManager& FileManager = IFileManager::Get(); | ||||
| 	FString SavedGamesFolder = FString{FPaths::ProjectSavedDir()} + "SaveGames/"; | ||||
| 
 | ||||
| 	TArray<FString> FileNames; | ||||
| 	FileManager.FindFiles(FileNames, *SavedGamesFolder, TEXT("*.sav")); | ||||
| 
 | ||||
| 	for (FString FileName : FileNames) | ||||
| 	{ | ||||
| 		FileName.RemoveFromEnd(".sav"); | ||||
| 
 | ||||
| 		if (UNakatomiSaveGame* saveGameObject = Cast<UNakatomiSaveGame>(UGameplayStatics::LoadGameFromSlot(FileName, 0))) | ||||
| 		{ | ||||
| 			Files.Add({FileName, | ||||
| 							 saveGameObject->PlayerName, | ||||
| 							 saveGameObject->LevelName, | ||||
| 				FileManager.GetTimeStamp(*(SavedGamesFolder + FileName + ".sav")).ToString()}); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	return Files; | ||||
| } | ||||
|  | ||||
| @ -6,6 +6,8 @@ | ||||
| #include "Engine/GameInstance.h" | ||||
| #include "NakatomiAIAttackTokenManager.h" | ||||
| #include "NakatomiLevelManager.h" | ||||
| #include "NakatomiSaveFileInfo.h" | ||||
| #include "NakatomiSaveGame.h" | ||||
| #include "NakatomiGameInstance.generated.h" | ||||
| 
 | ||||
| /**
 | ||||
| @ -25,6 +27,9 @@ private: | ||||
| 	UPROPERTY() | ||||
| 	UNakatomiAIAttackTokenManager* AIAttackTokenManager; | ||||
| 
 | ||||
| 	UPROPERTY() | ||||
| 	UNakatomiSaveGame* SaveGameObject = nullptr; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| @ -35,4 +40,19 @@ public: | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	void SetCurrentLevelManager(UNakatomiLevelManager* NewLevelManager); | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	UNakatomiSaveGame* LoadGameFromSlot(FString SaveSlotName); | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	bool SaveGame(bool ResetDefaults); | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	UNakatomiSaveGame* GetSaveGameObject(); | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	UNakatomiSaveGame* CreateNewSaveGame(FString PlayerName); | ||||
| 
 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	TArray<FNakatomiSaveFileInfo> GetAllSaveFilesFromDisk(); | ||||
| }; | ||||
|  | ||||
| @ -3,13 +3,25 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include "CoreMinimal.h" | ||||
| #include "NakatomiSaveFileInfo.generated.h" | ||||
| 
 | ||||
| /**
 | ||||
|  *  | ||||
|  */ | ||||
| class NAKATOMI_API NakatomiSaveFileInfo | ||||
| USTRUCT(BlueprintType) | ||||
| struct FNakatomiSaveFileInfo | ||||
| { | ||||
| public: | ||||
| 	NakatomiSaveFileInfo(); | ||||
| 	~NakatomiSaveFileInfo(); | ||||
|     GENERATED_BODY() | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info") | ||||
| 	FString SaveSlotName; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info") | ||||
| 	FString PlayerName; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info") | ||||
| 	FString CurrentLevel; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info") | ||||
| 	FString DateTimeSaved; | ||||
| }; | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include "CoreMinimal.h" | ||||
| #include "Weapon.h" | ||||
| #include "GameFramework/SaveGame.h" | ||||
| #include "NakatomiSaveGame.generated.h" | ||||
| 
 | ||||
| @ -14,4 +15,25 @@ class NAKATOMI_API UNakatomiSaveGame : public USaveGame | ||||
| { | ||||
| 	GENERATED_BODY() | ||||
| 
 | ||||
| public: | ||||
| 	UPROPERTY(VisibleAnywhere, Category = Basic) | ||||
| 	FString PlayerName = "Player Name"; | ||||
| 
 | ||||
| 	UPROPERTY(VisibleAnywhere, Category = Level) | ||||
| 	FString LevelName = "Level1"; | ||||
| 
 | ||||
| 	UPROPERTY(VisibleAnywhere, Category = Player) | ||||
| 	float PlayerHealth = 100.0f; | ||||
| 
 | ||||
| 	UPROPERTY(VisibleAnywhere, Category = Player) | ||||
| 	TArray<AWeapon*> WeaponInventory; | ||||
| 
 | ||||
| 	UPROPERTY(VisibleAnywhere, Category = Player) | ||||
| 	int CurrentInventorySlot = 0; | ||||
| 	 | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	void ResetPlayerValuesToDefault() | ||||
| 	{ | ||||
| 		PlayerHealth = 100.0f; | ||||
| 	} | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user