using UnityEngine; using Articy.Touhou; namespace Game { public static partial class UtilBuff { private static void BuffEffect(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; switch (obj) { case IObjectWithFeatureBuffEffectAttack _: BuffEffectAttack(data, buffData); break; case IObjectWithFeatureBuffEffectProperty _: BuffEffectProperty(data, buffData); break; case IObjectWithFeatureBuffEffectAddBuff _: BuffEffectAddBuff(data, buffData); break; case IObjectWithFeatureBuffEffectClearLevel _: BuffEffectClearLevel(data, buffData); break; case IObjectWithFeatureBuffEffectSetSpeed _: BuffEffectSetSpeed(data, buffData); break; } } private static void BuffEffectAttack(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; var buffAttack = ((IObjectWithFeatureBuffEffectAttack)obj).GetFeatureBuffEffectAttack(); var owner = buffData.Entity; var target = buffData.Target; target.skill.HitInfo.Add(new SkillHitInfo() { SkillParam = new AttackBehaviour() { isFlow = buffAttack.IsFlow, damageRate = buffAttack.NumberValue * (1 + buffAttack.NumberValueLevel * data.Level.Value), hitId = 0, }, OwnerEntity = owner.ID(), HitEntity = target.ID(), HitDir = Vector3.up, IsDealed = false, SkillId = "", Performance = (uint)0, IsBreak = buffAttack.IsStun, }); } private static void BuffEffectProperty(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; var buffProperty = ((IObjectWithFeatureBuffEffectProperty)obj).GetFeatureBuffEffectProperty(); var target = buffData.Target; var property = target.property.Property[(EProperty)buffProperty.Property]; if ((EPropertyChangeType)buffProperty.PropertyChangeType == EPropertyChangeType.Value) { property.Value += (int)buffProperty.NumberValue; } else { property.Percent += (int)buffProperty.NumberValue; } } private static void BuffEffectAddBuff(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; var buffAddBuff = ((IObjectWithFeatureBuffEffectAddBuff)obj).GetFeatureBuffEffectAddBuff(); var owner = buffData.Entity; var target = buffData.Target; Util.AddBuff(owner.ID(), target.ID(), buffAddBuff.Buff.TechnicalName, 0, buffAddBuff.BuffLevel * (1 + data.Level.Value)); } private static void BuffEffectClearLevel(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; var buffClearLevel = ((IObjectWithFeatureBuffEffectClearLevel)obj).GetFeatureBuffEffectClearLevel(); var owner = buffData.Entity; var target = buffData.Target; Util.RemoveBuff(target.ID(), data.BuffId); } private static void BuffEffectSetSpeed(BuffData data, BuffEffectData buffData) { var obj = buffData.BuffObj; var buffSetSpeed = ((IObjectWithFeatureBuffEffectSetSpeed)obj).GetFeatureBuffEffectSetSpeed(); var owner = buffData.Entity; var target = buffData.Target; target.move.Velocity = target.hp.LastDamageDir; } } }