2025-08-18 23:16:13 +08:00

47 lines
1.4 KiB
C#

/*
* @Author: 白哉
* @Description: 技能工厂类
* @Date: 2025年04月24日 星期四 17:04:55
* @Modify:
*/
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Logic.Skill
{
public class SkillFactory
{
private static Dictionary<SkillType, Type> _skillDict;
public static SkillBase GetSkillBySkillType(SkillType skillType)
{
if (_skillDict == null)
{
_skillDict = new Dictionary<SkillType, Type>();
Assembly assembly = typeof(SkillBase).Assembly; // 获取基类所在程序集
foreach (Type skillClassType in assembly.GetTypes())
{
if (skillClassType.IsSubclassOf(typeof(SkillBase)) && !skillClassType.IsAbstract)
{
var skillObj = Activator.CreateInstance(skillClassType);
var skillBase = skillObj as SkillBase;
if (skillBase == null) continue;
_skillDict[skillBase.GetSkillType()] = skillClassType;
}
}
}
if (_skillDict.TryGetValue(skillType, out var skillClass))
{
return Activator.CreateInstance(skillClass) as SkillBase;
}
return null;
}
}
}