This commit is contained in:
daixiawu 2025-05-15 17:15:40 +08:00
commit 0d76db275a
3 changed files with 70 additions and 6 deletions

View File

@ -101,6 +101,11 @@ namespace Logic.Achievement
{
}
public virtual string GetConditionDescription()
{
return string.Empty;
}
}

View File

@ -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<uint> FinishedCache;
public void Init()
@ -28,12 +30,44 @@ namespace RuntimeData
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)
{
@ -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();
}
}
}

View File

@ -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 "";
}
//-------------- 序列化相关 -------------------//
// 辅助序列化字段