55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Valheim;
|
|
|
|
public class SkillManager : MonoBehaviour
|
|
{
|
|
// 技能ID -> 技能逻辑
|
|
private Dictionary<int, SkillLogicBase> skillLogicDict = new Dictionary<int, SkillLogicBase>();
|
|
|
|
public void Init()
|
|
{
|
|
|
|
foreach (var data in GameManager.Ins.SkillDataList.Values)
|
|
{
|
|
SkillLogicBase logic = CreateSkillLogicByType(data);
|
|
if (logic != null)
|
|
{
|
|
logic.skillData = data;
|
|
skillLogicDict[data.SkillId] = logic;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 根据 SkillType 不同,创建不同子类
|
|
private SkillLogicBase CreateSkillLogicByType(SkillData data)
|
|
{
|
|
switch (data.SkillType)
|
|
{
|
|
case ESkillType.SingleAttack:
|
|
return ScriptableObject.CreateInstance<SingleAttackSkill>();
|
|
case ESkillType.RangeAttack:
|
|
// 这里可写一个 RangeAttackSkill 类
|
|
return ScriptableObject.CreateInstance<RangeAttackSkill>();
|
|
case ESkillType.DotAttack:
|
|
// 同理
|
|
return ScriptableObject.CreateInstance<DotAttackSkill>();
|
|
case ESkillType.Buff:
|
|
// 同理
|
|
return ScriptableObject.CreateInstance<BuffSkill>();
|
|
default:
|
|
Debug.LogWarning($"未知技能类型: {data.SkillType}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// 对外提供获取技能逻辑的方法
|
|
public SkillLogicBase GetSkillLogic(int skillId)
|
|
{
|
|
if (skillLogicDict.ContainsKey(skillId))
|
|
{
|
|
return skillLogicDict[skillId];
|
|
}
|
|
return null;
|
|
}
|
|
} |