Example #1
0
        public void Add(Monster aMonster)
        {
            mMonsters.Add(aMonster);
            mMonstersNumber++;

            Flame f = null;

            if (mMonstersNumber == 4)
            {
                f = new Flame(FlameType.SMALL);
            }

            if (mMonstersNumber == 6 || mMonstersNumber == 8 || mMonstersNumber == 10)
            {
                f = new Flame(FlameType.NORMAL);
            }

            if (mMonstersNumber == 12 || mMonstersNumber == 14)
            {
                f = new Flame(FlameType.BIG);
            }

            if (mMonstersNumber > 15 && mMonstersNumber % 2 == 0)
            {
                f = new Flame(FlameType.BIGGEST);
            }

            if (f != null)
            {
                DisplayManager.Instance.DrawableLevelManager.AddSprite(f.Sprite, 100, DisplayManager.Instance.ScreenSplitter.SplitScreens.Count - 1);
                f.Sprite.Visible = true;

                Vector2 MonsterCoord = new Vector2(aMonster.X, aMonster.Y);
                MonsterCoord = DisplayManager.Instance.ScreenSplitter.TranslateCoordToScreen(MonsterCoord, mNumPlayer);
                MonsterCoord = DisplayManager.Instance.ScreenSplitter.TranslateCoordFromScreen(MonsterCoord, DisplayManager.Instance.ScreenSplitter.SplitScreens.Count - 1);

                Player  p           = NTSSPGame.Instance.GetPlayer((mNumPlayer == 0) ? 1 : 0);
                Vector2 PlayerCoord = new Vector2(p.mX, p.mY);
                PlayerCoord = DisplayManager.Instance.ScreenSplitter.TranslateCoordToScreen(PlayerCoord, (mNumPlayer == 0) ? 1 : 0);
                PlayerCoord = DisplayManager.Instance.ScreenSplitter.TranslateCoordFromScreen(PlayerCoord, DisplayManager.Instance.ScreenSplitter.SplitScreens.Count - 1);

                FlamePath fp = null;

                /*switch (mType)
                 * {
                 *  case ChainType.HORIZONTAL:*/
                fp = new HorizontalPath(MonsterCoord, PlayerCoord);

                /* break;
                 * case ChainType.PARABOLIC:
                 * fp = new ParabolicPath(MonsterCoord, PlayerCoord);
                 * break;
                 * case ChainType.REFLECT:
                 * fp = new ReflectPath(MonsterCoord, PlayerCoord);
                 * break;
                 * }*/
                mFlames.Add(f, fp);
            }
        }
Example #2
0
        public void Draw()
        {
            foreach (Flame f in mFlames.Keys)
            {
                FlamePath fp = mFlames[f];

                fp.Draw();
            }
        }
Example #3
0
        public void Update(GameTime aTime)
        {
            List <Flame> toDelete = new List <Flame>();

            foreach (Flame f in mFlames.Keys)
            {
                FlamePath fp = mFlames[f];

                double  angle = Math.PI / 2.0f;
                Vector2 coord = fp.At(fp.t, out angle);

                f.Sprite.Rotation = angle + Math.PI / 2.0f;
                f.X = coord.X;
                f.Y = coord.Y;

                fp.t += 0.001f;

                int numscreen = DisplayManager.Instance.ScreenSplitter.SplitScreens.Count - 1;

                Rectangle r;
                if (f.Sprite.SpriteSheet.Count > 0)
                {
                    r = f.Sprite.SpriteSheet.SourceRectangle(0);
                }
                else
                {
                    continue;
                }


                Vector2 cd = DisplayManager.Instance.ScreenSplitter.TranslateCoordToScreen(new Vector2(f.X, f.Y), numscreen);

                r.X = (int)cd.X;
                r.Y = (int)cd.Y;

                if (!DisplayManager.Instance.ScreenSplitter.SplitScreens[numscreen].Contains(r) && !DisplayManager.Instance.ScreenSplitter.SplitScreens[numscreen].Intersects(r))
                {
                    toDelete.Add(f);
                }
            }

            foreach (Flame f in toDelete)
            {
                mFlames.Remove(f);
            }
        }