成就系统
This commit is contained in:
parent
281d624f1f
commit
e0da364341
@ -101,6 +101,11 @@ namespace Logic.Achievement
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual string GetConditionDescription()
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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 "";
|
||||
}
|
||||
|
||||
//-------------- 序列化相关 -------------------//
|
||||
// 辅助序列化字段
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user