新存储系统可用

This commit is contained in:
2025-03-27 21:49:34 +08:00
parent 79ed1149ca
commit 82e22d8b38
5 changed files with 101 additions and 129 deletions
+49 -35
View File
@@ -15,7 +15,7 @@ namespace AibisDream
private const string VariablePrefix = "$";
private const string GlobalPrefix = "$global.";
private const string DataPrefix = "$data.";
private static readonly string SaveFilePath = Application.streamingAssetsPath + "/SaveFiles";
#region
@@ -27,7 +27,7 @@ namespace AibisDream
#region
public void RegisterData(IData data)
public void RegisterData<T>(T data) where T : IData
{
_dataContainer.Register(data);
}
@@ -37,6 +37,14 @@ namespace AibisDream
_dataContainer.Unregister<T>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.K))
{
Debug.Log(_dataContainer.Count);
}
}
#endregion
#region
@@ -111,8 +119,10 @@ namespace AibisDream
{
return false;
}
return variableType == VariableType.DataField ?
_dataContainer.TryGetFieldValue<string>(variableName, out _) : _variableDict.ContainsKey(variableName);
return variableType == VariableType.DataField
? _dataContainer.TryGetFieldValue<string>(variableName, out _)
: _variableDict.ContainsKey(variableName);
}
public override bool TryGetValue<T>(string variableName, out T result)
@@ -124,11 +134,13 @@ namespace AibisDream
result = default;
return false;
}
// 在系统数据中查找
if (variableType == VariableType.DataField)
{
return _dataContainer.TryGetFieldValue(variableName, out result);
}
// 直接查找数据
if (_variableDict.TryGetValue(variableName, out var value))
{
@@ -152,17 +164,19 @@ namespace AibisDream
{
if (clear)
{
_dataContainer.Clear();
Clear();
}
foreach (var value in floats)
{
SetValue(value.Key, value.Value);
}
foreach (var value in strings)
{
SetValue(value.Key, value.Value);
}
foreach (var value in bools)
{
SetValue(value.Key, value.Value);
@@ -181,23 +195,23 @@ namespace AibisDream
switch (variablePair.Value)
{
case float:
{
var value = System.Convert.ToSingle(variablePair.Value);
floatDict.Add(variablePair.Key, value);
break;
}
{
var value = System.Convert.ToSingle(variablePair.Value);
floatDict.Add(variablePair.Key, value);
break;
}
case string:
{
var value = System.Convert.ToString(variablePair.Value);
stringDict.Add(variablePair.Key, value);
break;
}
{
var value = System.Convert.ToString(variablePair.Value);
stringDict.Add(variablePair.Key, value);
break;
}
case bool:
{
var value = System.Convert.ToBoolean(variablePair.Value);
boolDict.Add(variablePair.Key, value);
break;
}
{
var value = System.Convert.ToBoolean(variablePair.Value);
boolDict.Add(variablePair.Key, value);
break;
}
default:
Debug.Log($"{variablePair.Key} is not a valid type");
break;
@@ -218,16 +232,16 @@ namespace AibisDream
// 保存系统数据
saveFile["systemData"] = _dataContainer.SaveAsJson();
// 保存对话变量
var (floatDict, stringDict, boolDict) = GetAllVariables();
saveFile["floatDict"] = JObject.FromObject(floatDict);
saveFile["stringDict"] = JObject.FromObject(stringDict);
saveFile["boolDict"] = JObject.FromObject(boolDict);
// 存为Json
JsonUtil.SaveJObject(saveFile, GetSavePath());
#if !UNITY_EDITOR
#if !UNITY_EDITOR
DeleteOldSave();
#endif
}
@@ -241,34 +255,34 @@ namespace AibisDream
var stringDict = saveData["stringDict"]?.ToObject<Dictionary<string, string>>();
var boolDict = saveData["boolDict"]?.ToObject<Dictionary<string, bool>>();
SetAllVariables(floatDict, stringDict, boolDict);
// 加载系统数据
if (saveData["systemData"] is not JObject systemDataJson)
{
Debug.Log("维修数据读取问题");
return;
}
StartCoroutine(_dataContainer.LoadByJson(systemDataJson));
}
private string GetSavePath()
{
string gameStageStr;
try
string gameStage;
if (TryGetValue("$gameStage", out float gameStageFloat))
{
TryGetValue("$gameStage", out float gameStage);
gameStageStr = gameStage.ToString(CultureInfo.InvariantCulture);
gameStage = gameStageFloat.ToString(CultureInfo.InvariantCulture);
}
catch (Exception)
else
{
TryGetValue("$gameStage", out string gameStage);
gameStageStr = gameStage;
TryGetValue("$gameStage", out string gameStageStr);
gameStage = gameStageStr;
}
return $"{SaveFilePath}/{DateTime.Now:yyyyMMdd_HHmmss}_SOName_{gameStageStr}";
return
$"{SaveFilePath}/{DateTime.Now:yyyyMMdd_HHmmss}_{GameLoopManager.Instance.GetSceneSoName()}_{gameStage}";
}
#endregion
private static VariableType ValidateVariableName(string variableName)
@@ -301,7 +315,7 @@ namespace AibisDream
{
Destroy(gameObject);
}
Instance = this;
}