86 lines
2.4 KiB
C#
86 lines
2.4 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2025年04月03日 星期四 11:04:31
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using System.Collections.Generic;
|
|
using Logic.Skill;
|
|
using MemoryPack;
|
|
|
|
|
|
namespace RuntimeData
|
|
{
|
|
[MemoryPackable]
|
|
[MemoryPackUnion(1, typeof(PlayerData))]
|
|
[MemoryPackUnion(2, typeof(UnitData))]
|
|
[MemoryPackUnion(3, typeof(CityData))]
|
|
[MemoryPackUnion(4, typeof(GridData))]
|
|
public abstract partial class IdentifierBase
|
|
{
|
|
// 唯一 ID
|
|
public uint Id;
|
|
|
|
// 技能信息
|
|
public List<SkillBase> Skills = new List<SkillBase>();
|
|
private Dictionary<SkillType, SkillBase> _skillDict;
|
|
|
|
// Mark 信息
|
|
[MemoryPackInclude]
|
|
protected bool _renderMark;
|
|
|
|
public bool RenderMark
|
|
{
|
|
get => _renderMark;
|
|
set => _renderMark = value;
|
|
}
|
|
|
|
public bool GetSkill(SkillType skillType, out SkillBase skill)
|
|
{
|
|
RefreshSkillDict();
|
|
return _skillDict.TryGetValue(skillType, out skill);
|
|
}
|
|
|
|
public void AddSkill(SkillType skillType)
|
|
{
|
|
RefreshSkillDict();
|
|
if (_skillDict.ContainsKey(skillType)) return;
|
|
var skill = SkillFactory.GetSkillBySkillType(skillType);
|
|
if (skill != null)
|
|
{
|
|
Skills.Add(skill);
|
|
_skillDict[skillType] = skill;
|
|
}
|
|
}
|
|
|
|
public void RemoveSkill(SkillType skillType)
|
|
{
|
|
RefreshSkillDict();
|
|
if (!_skillDict.TryGetValue(skillType, out var value)) return;
|
|
Skills.Remove(value);
|
|
_skillDict.Remove(skillType);
|
|
|
|
}
|
|
|
|
private void RefreshSkillDict()
|
|
{
|
|
if (_skillDict == null) _skillDict = new Dictionary<SkillType, SkillBase>();
|
|
if (_skillDict.Count != Skills.Count)
|
|
{
|
|
_skillDict.Clear();
|
|
foreach (var skill in Skills) _skillDict[skill.GetSkillType()] = skill;
|
|
}
|
|
}
|
|
|
|
// MemoryPack 反序列化之后的后处理
|
|
[MemoryPackOnDeserialized]
|
|
public void OnAfterMemoryPackDeserialize()
|
|
{
|
|
_skillDict ??= new Dictionary<SkillType, SkillBase>();
|
|
_skillDict.Clear();
|
|
foreach (var skill in Skills) _skillDict[skill.GetSkillType()] = skill;
|
|
}
|
|
}
|
|
} |