public override AbstractFiringPattern Exec() { double i = 1; var invis1 = MainContent.ModelFactory.BuildGenericModel(TextureNames.Invisible, start, stop, fromModel.GetLocation(), fromModel); invis1.SetSourceModel(fromModel); invis1.SetOrbitRadius(5); MainContent.Events.AddSingleTaggedEvent(start, fromModel, () => invis1.SetLocationFromSourcetModel()); //var invis = MainContent.ModelFactory.BuildGenericModel(TextureNames.Invisible, start, stop, fromModel.GetLocation(), fromModel); //invis.SetOrbitAngle(0); //invis.SetSourceModel(fromModel); //invis.SetOrbitSpeed(10); //MainContent.Events.AddScheduledTaggedEvent(start, stop, fromModel, () => invis.SetLocationFromSourcetModel()); while (i < 360) { BulletModel bullet = MainContent.ModelFactory.BuildEnemyBulletModel(texture, fromModel.StartLife, fromModel.EndLife, invis1.GetLocation(), fromModel); bullet.SetOrbitAngle(i); bullet.SetOrbitRadius(0); bullet.SetSourceModel(invis1); bullet.SetOrbitSpeed(speed); bullet.SetRate(speed); double tag = fromModel.GetHashCode() + "static".GetHashCode(); double middle = (start + stop) / 2; MainContent.Events.AddScheduledTaggedEvent(start, stop, tag, () => bullet.MoveOrbit()); MainContent.Events.AddScheduledTaggedEvent(start, stop, tag, () => bullet.IncrementOrbitRadius()); MainContent.Events.AddSingleTaggedEvent(start + 2, tag, () => bullet.ToggleOrbitSpeed()); MainContent.Events.AddSingleTaggedEvent(start + 3, tag, () => bullet.ToggleOrbitSpeed()); MainContent.Events.AddSingleTaggedEvent(start + 3.5, tag, () => bullet.ToggleOrbitSpeed()); MainContent.Events.AddSingleTaggedEvent(start, fromModel, () => invis1.SetLocationFromSourcetModel()); i += density; scheduledEvents.Add(new GameEvents.Event(start, stop, bullet)); } return(this); }