TH1/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs
2025-05-15 18:00:16 +08:00

87 lines
2.8 KiB
C#

/*
* @Author: 白哉
* @Description: 成就数据管理
* @Date: 2025年05月14日 星期三 21:05:54
* @Modify:
*/
using System.Collections.Generic;
using System.IO;
using Logic.Achievement;
using UnityEngine;
namespace RuntimeData
{
public class AchievementDataManager
{
public static AchievementDataManager Instance = new AchievementDataManager();
public AchievementAsset Achievement;
public List<uint> FinishedCache;
public void Init()
{
string path = Application.persistentDataPath + "/achievement.json";
if (File.Exists(path))
{
string json = File.ReadAllText(path);
Achievement = JsonUtility.FromJson<AchievementAsset>(json);
}
if (Achievement == null) Achievement = Resources.Load<AchievementAsset>("DataAssets/Achievement");
FinishedCache ??= new List<uint>();
FinishedCache.Clear();
}
public void BindMapData(MapData mapData)
{
foreach (var item in Achievement.AchievementList)item.BindMapData(mapData);
}
public void OnTurnStart(MapData map, PlayerData player)
{
foreach (var item in Achievement.AchievementList)
item.OnTurnStart(map, player);
}
public void OnTrainUnit(MapData map, PlayerData player, CityData city, UnitData newUnit)
{
foreach (var item in Achievement.AchievementList)
item.OnTrainUnit(map, player, city, newUnit);
}
public void OnBuildWonder(MapData map, PlayerData player, CityData city, GridData grid)
{
foreach (var item in Achievement.AchievementList)
item.OnBuildWonder(map, player, city, grid);
}
public void OnKillUnit(MapData map, UnitData origin, UnitData target)
{
foreach (var item in Achievement.AchievementList)
item.OnKillUnit(map, origin, target);
}
public void OnUnitMove(MapData map, UnitData unit, GridData gridData)
{
foreach (var item in Achievement.AchievementList)
item.OnUnitMove(map, unit, gridData);
}
public bool IsFinished(uint bigId, uint smallId, uint internalID)
{
var item = Achievement.GetAchievementItem(bigId, smallId, internalID);
if (item == null) return false;
return item.IsFinished;
}
public string GetNoFinishDescription(uint bigId, uint smallId, uint internalID)
{
var item = Achievement.GetAchievementItem(bigId, smallId, internalID);
if (item == null) return "";
if (item.IsFinished) return "";
return item.GetConditionDescription();
}
}
}