Degulleo3D/Assets/KJM/KJM_Test/SaveManager.cs

95 lines
2.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.IO;
using CI.QuickSave;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SaveManager : Singleton<SaveManager>
{
private const string SaveFolder = "QuickSave";
private const string SaveFileName = "Save_Main.json";
private string SaveFilePath => Path.Combine(Application.persistentDataPath, SaveFolder, SaveFileName);
private Save mainSave;
private Save backupSave;
void Start()
{
mainSave = new Save();
backupSave = new Save();
if (!QuickSaveRaw.Exists(SaveFilePath)) // Save_Main 파일이 없을때
{
UpdateSaveInfo();
SaveMain(); //Save_Main 파일 생성
backupSave = LoadMain();
SaveBackup(); //Save_Backup 파일 생성
Debug.Log("세이브가 존재하지 않아 새로운 세이브 생성.");
}
Load(); //저장된 메인,백업 세이브를 로드
}
public void Save()
{
if(JsonUtility.ToJson(mainSave) == JsonUtility.ToJson(StatManager.instance.ToSaveData())) //같은 상태는 저장되지 않음. 백업 덮어쓰기 방지.
return;
backupSave = LoadMain(); //메인 세이브를 백업 세이브에 로드
SaveBackup(); //백업 세이브 저장
UpdateSaveInfo(); //세이브를 현재 정보로 업데이트
SaveMain(); //메인 세이브 저장
Debug.Log("세이브");
}
public void Load()
{
mainSave = LoadMain();
backupSave = LoadBackup();
Debug.Log("메인 로드" + mainSave.homeSave.reputation);
Debug.Log("백업 로드" + backupSave.homeSave.reputation);
}
private void UpdateSaveInfo()
{
mainSave = StatManager.instance.ToSaveData(); //스탯을 관리하는 클래스에 선언된 스탯 업데이트 함수를 호출
}
private void SaveMain()
{
QuickSaveWriter.Create("Save_Main")
.Write("Main", mainSave)
.Commit();
}
private void SaveBackup()
{
QuickSaveWriter.Create("Save_Backup")
.Write("Backup", backupSave)
.Commit();
}
private Save LoadMain()
{
return QuickSaveReader.Create("Save_Main")
.Read<Save>("Main");
}
private Save LoadBackup()
{
return QuickSaveReader.Create("Save_Backup")
.Read<Save>("Backup");
}
protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
Save();
Debug.Log("자동저장");
}
}