using Articy.Touhou; using Articy.Touhou.Features; using Articy.Unity; namespace Game { public enum ESkillTriggerTimingType { Hit,//技能命中 Recover,//触发点 收刀 } public static class UtilSkillTrigger { public static void Trigger(int owner, int target, string skillId, ESkillTriggerTimingType timingType) { if (string.IsNullOrEmpty(skillId)) { return; } //TODO 暂时只有player拥有技能触发器 var skillCfg = Util.GetSkillMasterConfigData(skillId); if (skillCfg == null) { return; } var featureSkillCombo = skillCfg.GetFeatureSkillCombo(); var entity = Util.GetEntity(owner); foreach (var item in featureSkillCombo.SkillTrigger) { if (item is IObjectWithFeatureSkillTrigger) { var skillTrigger = (item as IObjectWithFeatureSkillTrigger).GetFeatureSkillTrigger(); if ((ESkillTriggerTimingType)skillTrigger.TriggerTiming != timingType) { continue; } if (skillTrigger.Bless != null) { if (!Util.HasBless(entity, skillTrigger.Bless.TechnicalName)) { continue; } } TriggerSub(owner, target, item); } } } private static void TriggerSub(int owner, int target, ArticyObject obj) { if (obj is IObjectWithFeatureSkillTriggerKnife) { var knifeFeature = (obj as IObjectWithFeatureSkillTriggerKnife).GetFeatureSkillTriggerKnife(); TriggerKnife(owner, target, knifeFeature); } } private static void TriggerKnife(int owner, int target, SkillTriggerKnifeFeature knifeFeature) { //TODO 暂时只有player var masterSoul = Util.GetMasterSoul(); Util.AddMasterSoulShootTarget(masterSoul, target, knifeFeature.Count); } } }