diff --git a/My project/Assets/Scripts/Logic/Achievement/AchievementCondition.cs b/My project/Assets/Scripts/Logic/Achievement/AchievementCondition.cs index 1b8c7cf9d..cbb10d573 100644 --- a/My project/Assets/Scripts/Logic/Achievement/AchievementCondition.cs +++ b/My project/Assets/Scripts/Logic/Achievement/AchievementCondition.cs @@ -101,6 +101,11 @@ namespace Logic.Achievement { } + + public virtual string GetConditionDescription() + { + return string.Empty; + } } diff --git a/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs b/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs index a62c01b86..225c2de1d 100644 --- a/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs +++ b/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs @@ -6,6 +6,7 @@ */ +using System.Collections.Generic; using System.IO; using Logic.Achievement; using UnityEngine; @@ -17,6 +18,7 @@ namespace RuntimeData { public static AchievementDataManager Instance; public AchievementAsset Achievement; + public List FinishedCache; public void Init() @@ -28,12 +30,44 @@ namespace RuntimeData Achievement = JsonUtility.FromJson(json); } if (Achievement == null) Achievement = Resources.Load("DataAssets/Achievement"); + FinishedCache ??= new List(); + 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) { @@ -41,5 +75,13 @@ namespace RuntimeData 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(); + } } } \ No newline at end of file diff --git a/My project/Assets/Scripts/Logic/Achievement/AchievementItem.cs b/My project/Assets/Scripts/Logic/Achievement/AchievementItem.cs index 2f99a4916..d760f2e78 100644 --- a/My project/Assets/Scripts/Logic/Achievement/AchievementItem.cs +++ b/My project/Assets/Scripts/Logic/Achievement/AchievementItem.cs @@ -43,27 +43,32 @@ namespace Logic.Achievement public void OnTurnStart(MapData map, PlayerData player) { - + foreach (var condition in Conditions) condition.OnTurnStart(map, player); + CheckConditions(map); } public void OnTrainUnit(MapData map, PlayerData player, CityData city, UnitData newUnit) { - + foreach (var condition in Conditions) condition.OnTrainUnit(map, player, city, newUnit); + CheckConditions(map); } public void OnBuildWonder(MapData map, PlayerData player, CityData city, GridData grid) { - + foreach (var condition in Conditions) condition.OnBuildWonder(map, player, city, grid); + CheckConditions(map); } public void OnKillUnit(MapData map, UnitData origin, UnitData target) { - + foreach (var condition in Conditions) condition.OnKillUnit(map, origin, target); + CheckConditions(map); } public void OnUnitMove(MapData map, UnitData unit, GridData gridData) { - + foreach (var condition in Conditions) condition.OnUnitMove(map, unit, gridData); + CheckConditions(map); } public void CheckConditions(MapData mapData) @@ -78,7 +83,7 @@ namespace Logic.Achievement } IsFinished = true; - // TODO: 触发成就完成事件 + AchievementDataManager.Instance.FinishedCache.Add(ID); } public void BindMapData(MapData mapData) @@ -95,6 +100,18 @@ namespace Logic.Achievement if (mapData.MapID == MapID) return; foreach (var condition in Conditions) condition.ClearCache(); } + + public string GetConditionDescription() + { + foreach (var condition in Conditions) + { + var str = condition.GetConditionDescription(); + if (string.IsNullOrEmpty(str)) continue; + return str; + } + + return ""; + } //-------------- 序列化相关 -------------------// // 辅助序列化字段