|  |  |  | 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; | 
					
						
							|  |  |  |             owner.skill.HitInfo.Enqueue(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, | 
					
						
							|  |  |  |                 SkillId = "", | 
					
						
							|  |  |  |                 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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |