public static void ClearBullets(BHGame mGame, BHStage mStage)
 {
     for (int i = mGame.Manager.EntityDictionary["deadlytoplayer"].Count - 1; i > 0; i--)
     {
         Entity entity = mGame.Manager.EntityDictionary["deadlytoplayer"][i];
         entity.Destroy();
     }
 }
        public static void CutIn(BHGame mGame, BHStage mStage, Texture mTexture, bool mText = false, string mBackgroundText = "spell attack",
                                 Vector2i mVelocity = default(Vector2i), Vector2i mOffset = default(Vector2i), int mLength = 100)
        {
            var cutInTimeline = new Timeline();

            var texts = new List<Text>();
            var drawEvents = new List<Action>();

            if (mText)
            {
                for (int iX = -2; iX < 3; iX++)
                {
                    for (int i = 0; i < 35; i++)
                    {
                        var temp = new Text(mBackgroundText, Font.DefaultFont)
                                   {
                                       Position = new Vector2f(300 + (iX*84), (i*35) - 200),
                                       Color = Color.White,
                                       CharacterSize = 15,
                                       Rotation = 25
                                   };

                        texts.Add(temp);

                        Action drawEvent = () => mGame.GameWindow.RenderWindow.Draw(temp);
                        drawEvents.Add(drawEvent);
                        mGame.AddDrawAction(drawEvent);
                    }
                }
            }

            var cutInSprite = new Sprite(mTexture)
                              {
                                  Color = new Color(255, 255, 255, 0)
                              };

            var cutInEntity = new BHEntity(mGame)
                              {
                                  DrawOrder = 100000,
                                  Sprite = cutInSprite,
                                  Position = mGame.Center + mOffset
                              };

            BHPresetTimelines.Fade(cutInEntity, 0, true, 16);
            BHPresetTimelines.Fade(cutInEntity, mLength, false, 16);

            cutInTimeline.Action(() => { foreach (var text in texts) text.Position -= new Vector2f(3, 1); });
            cutInTimeline.Action(() => cutInEntity.Position += mVelocity);
            cutInTimeline.Wait();
            cutInTimeline.Goto(mTimes: 200);
            cutInTimeline.Action(() =>
                                 {
                                     foreach (var drawEvent in drawEvents) mGame.RemoveDrawAction(drawEvent);
                                     cutInEntity.Destroy();
                                 });

            mStage.TimelinesUpdate.Add(cutInTimeline);
        }
        public static void SpellCard(BHGame mGame, BHStage mStage, BHEntity mBoss, string mSpellCardName, int mHealth, int mTime, int mScore, Timeline mOnEnd, params Timeline[] mTimelines)
        {
            var spellCardTimeline = new Timeline();

            mBoss.Parameters["health"] = mHealth;

            var drawEvents = new List<Action>();

            var spellCardText = new Text(mSpellCardName, Font.DefaultFont)
                                {
                                    Position = new Vector2f(32, 16),
                                    Color = Color.White,
                                    CharacterSize = 15,
                                };
            var mTimeText = new Text(mTime.ToString(), Font.DefaultFont)
                            {
                                Position = new Vector2f(384, 16),
                                Color = Color.White,
                                CharacterSize = 15
                            };

            Action spellCardTextDrawEvent = () => mGame.GameWindow.RenderWindow.Draw(spellCardText);
            drawEvents.Add(spellCardTextDrawEvent);
            mGame.AddDrawAction(spellCardTextDrawEvent);

            Action timeTextDrawEvent = () => mGame.GameWindow.RenderWindow.Draw(mTimeText);
            drawEvents.Add(timeTextDrawEvent);
            mGame.AddDrawAction(timeTextDrawEvent);

            mStage.TimelinesUpdate.AddRange(mTimelines);

            Assets.GetSound("cat00").Play();

            spellCardTimeline.Action(() =>
                                     {
                                         mTime--;
                                         mTimeText.DisplayedString = mTime.ToString();
                                     });
            spellCardTimeline.Wait();
            spellCardTimeline.AddCommand(new GotoConditional(() => mTime < 1 || (int) mBoss.Parameters["health"] < 1, 0, -1));
            spellCardTimeline.Action(() =>
                                     {
                                         foreach (var drawEvent in drawEvents) mGame.RemoveDrawAction(drawEvent);
                                         foreach (var timeline in mTimelines) timeline.Finished = true;
                                         ClearBullets(mGame, mStage);
                                         if (mOnEnd != null) mStage.TimelinesUpdate.Add(mOnEnd);
                                     });

            mStage.TimelinesUpdate.Add(spellCardTimeline);
        }
        public static BHStage TestScriptStage2(BHGame mGame)
        {
            var result = new BHStage();
            var stageTimeline = new Timeline();

            // FIRST FAIRY WAVE
            for (int i = 0; i < 200; i++)
            {
                int i1 = i;
                var position = new Vector2i();
                if (i%2 == 0) position = new Vector2i(mGame.Bounds.Right, 0);

                stageTimeline.Wait(5);
                stageTimeline.Action(() => EnemyFairy1(mGame, position, i1%2 != 0, "enemyfairy"));
            }
            // -------------------

            // DISPLAY STAGE IMAGE
            stageTimeline.Wait(150);
            stageTimeline.Action(() => BHPresetStageControl.CutIn(mGame, result, Assets.GetTexture("st01logo"), mOffset: new Vector2i(0, -50000), mLength: 200));
            // -------------------

            // FIRST BIG FAIRY
            stageTimeline.Wait(50);
            stageTimeline.Action(() => EnemyFairyBig1(mGame, new Vector2i(mGame.Center.X, 0), "enemyfairybig"));
            // -------------------

            // SECOND FAIRY WAVE
            stageTimeline.Wait(200);
            for (int i = 0; i < 50; i++)
            {
                int i1 = i;
                var position = new Vector2i();
                if (i%2 == 0) position = new Vector2i(mGame.Bounds.Right, 0);

                stageTimeline.Wait(8);
                stageTimeline.Action(() => EnemyFairy1(mGame, position, i1%2 != 0, "enemyfairy", 2));
            }
            // -------------------

            // SECOND AND THIRD BIG FAIRIES
            stageTimeline.Wait(180);
            stageTimeline.Action(() => EnemyFairyBig1(mGame, new Vector2i(mGame.Center.X - 100.ToUnits(), 0), "enemyfairybig"));
            stageTimeline.Action(() => EnemyFairyBig1(mGame, new Vector2i(mGame.Center.X + 100.ToUnits(), 0), "enemyfairybig"));
            stageTimeline.Wait(500);
            // -------------------

            // MIDBOSS WITH 1 SPELLCARD
            stageTimeline.Action(() => EnemyMidboss1(mGame, new Vector2i(mGame.Center.X, 0)));
            // -------------------

            result.TimelinesUpdate.Add(stageTimeline);

            return result;
        }