public override void Run(RoleBase caster, Space space, MagicArgs args) { int positionX = (int)args.Position.X, positionY = (int)args.Position.Y; int destinationX = (int)args.Destination.X, destinationY = (int)args.Destination.Y; int radius = (int)(100 * caster.Scale); for (int i = 0; i < args.Number; i++) { CircleMagic magic = new CircleMagic(); args.Position = new Point(ObjectBase.RandomSeed.Next(positionX - radius, positionX + radius), ObjectBase.RandomSeed.Next(positionY - radius, positionY + radius)); args.Destination = new Point(ObjectBase.RandomSeed.Next(destinationX - radius, destinationX + radius), ObjectBase.RandomSeed.Next(destinationY - radius, destinationY + radius)); magic.Run(caster, space, args); } }
public override void Run(RoleBase caster, Space space, MagicArgs args) { int count = 0; int positionX = (int)args.Position.X, positionY = (int)args.Position.Y; int destinationX = (int)args.Destination.X, destinationY = (int)args.Destination.Y; int radius = (int)(130 * caster.Scale); EventHandler handler = null; DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(150) }; timer.Tick += handler = delegate { if (count == args.Number) { timer.Tick -= handler; timer.Stop(); } else { CircleMagic magic = new CircleMagic(); args.Position = new Point(ObjectBase.RandomSeed.Next(positionX - radius, positionX + radius), ObjectBase.RandomSeed.Next(positionY - radius, positionY + radius)); args.Destination = new Point(ObjectBase.RandomSeed.Next(destinationX - radius, destinationX + radius), ObjectBase.RandomSeed.Next(destinationY - radius, destinationY + radius)); magic.Run(caster, space, args); if (args.SpecialEffect == SpecialEffects.Shake) { space.Shake(Convert.ToInt32(args.Tag)); } count++; } }; timer.Start(); }