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); } }
public void Draw() { foreach (Flame f in mFlames.Keys) { FlamePath fp = mFlames[f]; fp.Draw(); } }
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); } }