rabidus-test/Assets/Scripts/SaveLoadController.cs

109 lines
3.1 KiB
C#
Raw Normal View History

2023-08-22 17:02:25 +03:00
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
public class SaveLoadController : MonoBehaviour
{
public static SaveLoadController Instance;
private const string DIR_PATH = "/game_save/players/";
private void Awake()
{
2023-10-10 17:25:59 +03:00
//transform.parent = null;
2023-10-09 15:12:08 +03:00
if (Instance == null)
2023-08-22 17:02:25 +03:00
{
Instance = this;
2023-10-10 17:25:59 +03:00
//DontDestroyOnLoad(gameObject);
2023-08-22 17:02:25 +03:00
}
else if (Instance != this)
2023-08-22 17:02:25 +03:00
{
2023-10-09 15:12:08 +03:00
Destroy(gameObject);
2023-08-22 17:02:25 +03:00
}
}
2023-10-13 12:12:58 +03:00
public bool Save<T>(T so, string filename) where T : ScriptableObject
2023-08-22 17:02:25 +03:00
{
string fullDirPath = Application.persistentDataPath + DIR_PATH;
string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt";
2023-08-22 17:02:25 +03:00
2023-10-11 17:33:14 +03:00
Debug.Log($"SAVE:{fullFilePath}");
2023-08-22 17:02:25 +03:00
if (!Directory.Exists(fullDirPath))
{
Directory.CreateDirectory(fullDirPath);
}
2023-10-13 12:12:58 +03:00
using (FileStream fs = File.Create(fullFilePath))
{
var json = JsonUtility.ToJson(so);
byte[] info = new System.Text.UTF8Encoding(true).GetBytes(json);
fs.Write(info, 0, info.Length);
2023-10-13 12:12:58 +03:00
fs.Close();
}
2023-10-11 17:33:14 +03:00
Debug.Log($"SAVE:SUCCESS");
return true;
2023-08-22 17:02:25 +03:00
}
public T Load<T>(ref T so, string filename) where T : ScriptableObject
{
string fullDirPath = Application.persistentDataPath + DIR_PATH;
string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt";
Debug.Log($"LOAD:{fullFilePath}");
if (!Directory.Exists(fullDirPath))
{
Directory.CreateDirectory(fullDirPath);
}
if (File.Exists(fullFilePath))
{
using (FileStream fs = File.Open(fullFilePath, FileMode.Open))
{
using (StreamReader reader = new StreamReader(fs))
{
var file = reader.ReadToEnd();
so = ScriptableObject.CreateInstance<T>();
JsonUtility.FromJsonOverwrite(file, so);
fs.Close();
}
}
}
Debug.Log($"LOAD:SUCCESS");
return default;
}
public bool LoadOld<T>(ref T so, string filename) where T : ScriptableObject
2023-08-22 17:02:25 +03:00
{
string fullDirPath = Application.persistentDataPath + DIR_PATH;
2023-10-13 12:12:58 +03:00
string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt";
2023-10-11 17:33:14 +03:00
Debug.Log($"LOAD:{fullFilePath}");
2023-08-22 17:02:25 +03:00
if (!Directory.Exists(fullDirPath))
{
Directory.CreateDirectory(fullDirPath);
}
BinaryFormatter bf = new BinaryFormatter();
if (File.Exists(fullFilePath))
{
2023-10-13 12:12:58 +03:00
using (FileStream fs = File.Open(fullFilePath, FileMode.Open))
{
so = ScriptableObject.CreateInstance<T>();
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(fs), so);
fs.Close();
}
2023-08-22 17:02:25 +03:00
}
2023-10-11 17:33:14 +03:00
Debug.Log($"LOAD:SUCCESS");
return true;
2023-08-22 17:02:25 +03:00
}
}