2026-03-17 22:05:38 +08:00

52 lines
1.6 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))
{
var skillObj = Activator.CreateInstance(skillClass) as SkillBase;
if (skillObj != null && Table.Instance.SkillDataAssets.GetSkillInfo(skillType, out var skillInfo))
{
skillObj.SetSkillPriority(skillInfo.skillPriority);
}
return skillObj;
}
return null;
}
}
}