89 lines
2.6 KiB
C#
89 lines
2.6 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description: 游戏的成就系统数据
|
|
* @Date: 2025年05月14日 星期三 19:05:32
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace Logic.Achievement
|
|
{
|
|
public class AchievementAsset : ScriptableObject
|
|
{
|
|
public AchievementData Data;
|
|
|
|
public AchievementAsset()
|
|
{
|
|
Data = new AchievementData();
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class AchievementData
|
|
{
|
|
public List<AchievementItem> AchievementList;
|
|
private Dictionary<uint, AchievementItem> _achievementItems;
|
|
|
|
|
|
public AchievementData()
|
|
{
|
|
AchievementList = new List<AchievementItem>();
|
|
}
|
|
|
|
public void AddNewAchievementItem(uint big, uint small)
|
|
{
|
|
RefreshAchievementDict();
|
|
var item = new AchievementItem();
|
|
item.BigID = big;
|
|
item.SmallID = small;
|
|
for (int i = 1; i < 20; i++)
|
|
{
|
|
if (_achievementItems.ContainsKey((uint)(big * 10000 + small * 100 + i))) continue;
|
|
item.InternalID = (uint)i;
|
|
break;
|
|
}
|
|
AchievementList.Add(item);
|
|
AchievementList.Sort((a, b) => a.ID.CompareTo(b.ID));
|
|
}
|
|
|
|
public List<AchievementItem> GetAchievementItemList(uint big, uint small, uint internalId)
|
|
{
|
|
RefreshAchievementDict();
|
|
var result = new List<AchievementItem>();
|
|
foreach (var achievement in AchievementList)
|
|
{
|
|
if (big != 0 && achievement.BigID != big) continue;
|
|
if (small != 0 && achievement.SmallID != small) continue;
|
|
if (internalId != 0 && achievement.InternalID != internalId) continue;
|
|
result.Add(achievement);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public AchievementItem GetAchievementItem(uint big, uint small, uint internalId)
|
|
{
|
|
RefreshAchievementDict();
|
|
var id = big * 10000 + small * 100 + internalId;
|
|
return _achievementItems.GetValueOrDefault(id);
|
|
}
|
|
|
|
public void RefreshAchievementDict()
|
|
{
|
|
_achievementItems ??= new Dictionary<uint, AchievementItem>();
|
|
if (_achievementItems.Count == AchievementList.Count) return;
|
|
_achievementItems.Clear();
|
|
foreach (var item in AchievementList) _achievementItems[item.ID] = item;
|
|
}
|
|
|
|
public void ClearAchievementFinishedInfo()
|
|
{
|
|
foreach (var item in AchievementList) item.IsFinished = false;
|
|
}
|
|
}
|
|
} |