47 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |