Beispiel #1
0
        /// <summary>
        /// Changes the <c>Screen</c> to the specified one.
        /// </summary>
        public void ChangeScreen(ScreenState state)
        {
            Unload();

            switch (state)
            {
            case ScreenState.GAME:
                CurrentScreen = new GameScreen();
                break;

            case ScreenState.MENU:
                CurrentScreen = new MenuScreen();
                break;

            case ScreenState.READY:
                CurrentScreen = new PlayerReadyScreen();
                break;

            case ScreenState.AFTER:
                CurrentScreen = new AfterScreen();
                break;
            }

            CurrentScreen.LoadContent(Content);
        }
Beispiel #2
0
        /// <summary>
        /// Updates the logic of the stage 0.
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(GameTime gameTime)
        {
            if (!isOver)
            {
                base.Update(gameTime);
            }
            else
            {
                for (int i = 0; i < Players.Length; i++)
                {
                    if (Players[i] != null)
                    {
                        Players[i].Position += new Vector2(0, -5);
                    }
                }
            }
            float dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            spawnTimer       += dt;
            spawnTimer2      += dt;
            StageTimer       += dt;
            vortexSpawnTimer += dt;

            switch (StageNumber)
            {
            case 0:
                if (StageTimer > 5000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 1:
                CurrentDialogue = Dialogues[0];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                    MediaPlayer.Play(snailChan);
                }

                break;

            case 2:
                if (StageTimer > 5000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 3:
                CurrentDialogue = Dialogues[1];

                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }

                break;

            case 4:     // 18 seconds
                if (StageTimer < 14000f)
                {
                    if (spawnTimer > 1500f)
                    {
                        spawnTimer = 0;
                        SpawnSinEnemy(new Vector2(-100, 70), true);
                    }

                    if (spawnTimer2 > 1500f)
                    {
                        spawnTimer2 = 0;
                        SpawnSinEnemy(new Vector2(-100, 500), true);
                    }
                }

                if (StageTimer > 18000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 5:
                CurrentDialogue = Dialogues[2];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }

                break;

            case 6:
                if (spawnTimer > 1500f)
                {
                    spawnTimer = 0;
                    SpawnSinEnemy(new Vector2(-100, 70), true);
                    if (rand.NextDouble() > 0.8f)
                    {
                        SpawnSinEnemy(new Vector2(ScreenManager.GetInstance().Width + 100, 100), false);
                    }
                }

                if (spawnTimer2 > 1500f)
                {
                    spawnTimer2 = 0;
                    SpawnSinEnemy(new Vector2(-100, 500), true);
                }

                if (StageTimer > 18000f)
                {
                    CurrentDialogue = Dialogues[3];
                    if (CurrentDialogue.FinishedPlaying)
                    {
                        SetStage(StageNumber + 1);
                    }
                }
                break;

            case 7:
                if (StageTimer < 25000f)
                {
                    if (spawnTimer > 1500f)
                    {
                        spawnTimer = 0;
                        SpawnSinEnemy(new Vector2(-100, 70), true);
                        if (rand.NextDouble() > 0.8f)
                        {
                            SpawnSinEnemy(new Vector2(ScreenManager.GetInstance().Width + 100, 100), false);
                        }
                    }

                    if (spawnTimer2 > 1500f)
                    {
                        spawnTimer2 = 0;
                        SpawnSinEnemy(new Vector2(-100, 500), true);
                    }

                    if (vortexSpawnTimer > 3000f)
                    {
                        SpawnVortexEnemy(new Vector2(-100, ScreenManager.GetInstance().Height / 2), new Vector2(300, 0), 8000f);
                        vortexSpawnTimer = 0;
                    }
                }

                if (StageTimer > 30000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 8:
                CurrentDialogue = Dialogues[4];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 9:
                if (StageTimer > 7000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 10:
                CurrentDialogue = Dialogues[5];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 11:
                if (StageTimer > 5000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 12:
                // Boss fight
                if (!spawnedBoss)
                {
                    Texture2D bossTexture = Content.Load <Texture2D>("TestBoss");
                    boss = new CorruptedSunBoss(Players, 100 + GetPlayerCount() * 50)
                    {
                        Texture            = bossTexture,
                        Size               = new Point(bossTexture.Width * 5, bossTexture.Height * 5),
                        BulletTexture      = blank,
                        Color              = Color.White,
                        vortexEnemyTexture = Content.Load <Texture2D>("Vortex"),
                        Blank              = blank,
                        sunBullet          = Content.Load <Texture2D>("SunBullet"),
                    };
                    AddEnemy(boss);
                    spawnedBoss = true;
                }
                else
                {
                    if ((float)boss.Health / boss.MAX_HEALTH < 0.5f)
                    {
                        CurrentDialogue = Dialogues[6];
                    }
                }

                if (Enemies.Count == 0)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 13:
                CurrentDialogue = Dialogues[7];

                if (CurrentDialogue.FinishedPlaying)
                {
                    // end level
                    isOver = true;
                    bool isReallyOver = false;
                    for (int i = 0; i < Players.Length; i++)
                    {
                        if (Players[i] != null && Players[i].Position.Y > 0)
                        {
                            isReallyOver = false;
                            break;
                        }
                        else
                        {
                            isReallyOver = true;
                        }
                    }

                    // now end level
                    if (isReallyOver)
                    {
                        ScreenManager.GetInstance().ChangeScreen(ScreenState.AFTER);
                        AfterScreen s = (AfterScreen)ScreenManager.GetInstance().CurrentScreen;
                        s.Players = Players;
                        s.Stage   = 0;
                        MediaPlayer.Stop();
                    }
                }
                break;
            }

            if (CurrentDialogue != null)
            {
                CurrentDialogue.Update(gameTime);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Updates the stage.
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(GameTime gameTime)
        {
            float dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            StageTimer       += dt;
            spawnTimer       += dt;
            vortexSpawnTimer += dt;
            CurrentDialogue?.Update(gameTime);

            if (!isOver)
            {
                base.Update(gameTime);
            }
            else
            {
                for (int i = 0; i < Players.Length; i++)
                {
                    if (Players[i] != null)
                    {
                        Players[i].Position += new Vector2(0, -5);
                    }
                }
            }

            switch (StageNumber)
            {
            case 1:
                if (StageTimer >= 5000f)
                {
                    SetStage(StageNumber + 1);
                    MediaPlayer.Play(cosmoFunk);
                }
                break;

            case 0:
                CurrentDialogue = Dialogues[0];

                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 2:
                CurrentDialogue = Dialogues[1];

                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 3:
                // spawn robots with invis
                if (spawnTimer > 700f)
                {
                    spawnTimer = 0;
                    if (rand.NextDouble() > .50 || StageTimer < 7000f)
                    {
                        SpawnInvisSinEnemy(new Vector2(-100, rand.Next(100, 500)), true);
                    }
                    else if (StageTimer > 7000f)
                    {
                        SpawnInvisSinEnemy(new Vector2(ScreenManager.GetInstance().Width + 100, rand.Next(100, 500)), false);
                    }

                    if (vortexSpawnTimer > 9000 && StageTimer > 18000f)
                    {
                        vortexSpawnTimer = 0;
                        SpawnVortexEnemy(new Vector2(-100, -100), new Vector2(200, 200), 7000f);
                        SpawnVortexEnemy(new Vector2(ScreenManager.GetInstance().Width + 100, -100), new Vector2(-200, 200), 7000f);
                    }

                    if (StageTimer > 36000f)
                    {
                        SetStage(StageNumber + 1);
                    }
                }

                break;

            case 4:
                CurrentDialogue = Dialogues[2];

                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 5:
                if (StageTimer >= 5000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 6:
                // summon asteroid hell upon the players
                if (spawnTimer > 70 && StageTimer < 30000)
                {
                    spawnTimer = 0;
                    Vector2   pos    = new Vector2(rand.Next(-100, ScreenManager.GetInstance().Width + 100), -90);
                    float     scale  = (float)(rand.NextDouble() * (Sprite.SCALE - 3) + 3f);
                    float     speed  = 1000 / (float)Math.Sqrt(scale);
                    Texture2D aster  = asteroidTextures[rand.Next(0, 5)];
                    float     xSpeed = (float)((rand.NextDouble() - 0.5f) * 100f);
                    Asteroid  a      = new Asteroid(Bullet.EntitySide.ENEMY, 7000f, new Vector2(xSpeed, speed))
                    {
                        Texture      = aster,
                        Position     = pos,
                        Size         = new Point((int)(aster.Width * scale), (int)(aster.Height * scale)),
                        Health       = (int)(Math.Ceiling(scale / 2)),
                        Color        = Color.White,
                        InitVelocity = new Vector2(xSpeed, speed),
                    };
                    Bullets.Add(a);
                }

                if (StageTimer > 33000)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 7:
                CurrentDialogue = Dialogues[3];

                if (CurrentDialogue.FinishedPlaying)
                {
                    Texture2D asteroidBoss = Content.Load <Texture2D>("AsteroidBoss");
                    aBoss = new AsteroidBoss(Players, 70 + GetPlayerCount() * 30)
                    {
                        Texture       = asteroidBoss,
                        Position      = new Vector2(ScreenManager.GetInstance().Width / 2, -300),
                        Size          = new Point(asteroidBoss.Width * Sprite.SCALE, asteroidBoss.Height * Sprite.SCALE),
                        BulletTexture = asteroidTextures[3],
                    };

                    AddEnemy(aBoss);
                    SetStage(StageNumber + 1);
                }
                break;

            case 8:
                if (StageTimer >= 5000f)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 9:
                if (aBoss != null && !aBoss.IsActive)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 10:
                CurrentDialogue = Dialogues[4];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 11:
                CurrentDialogue = Dialogues[5];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                CurrentDialogue = Dialogues[5];
                break;

            case 12:
                CurrentDialogue = Dialogues[6];
                if (CurrentDialogue.FinishedPlaying)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 13:
                if (StageTimer >= 5000f)
                {
                    SetStage(StageNumber + 1);
                }

                break;

            case 14:
                sBoss = new SpinnerBoss(Players, 100 + GetPlayerCount() * 50)
                {
                    Position = new Vector2(100, 100),
                };
                AddEnemy(sBoss);
                SetStage(StageNumber + 1);
                break;

            case 15:
                // SPAWN SPINNER BOSS
                if (Enemies.Count == 0)
                {
                    SetStage(StageNumber + 1);
                }
                break;

            case 16:
                CurrentDialogue = Dialogues[7];
                if (CurrentDialogue.FinishedPlaying)
                {
                    isOver = true;
                    bool isReallyOver = false;
                    for (int i = 0; i < Players.Length; i++)
                    {
                        if (Players[i] != null && Players[i].Position.Y > 0)
                        {
                            isReallyOver = false;
                            break;
                        }
                        else
                        {
                            isReallyOver = true;
                        }
                    }

                    // now end level
                    if (isReallyOver)
                    {
                        ScreenManager.GetInstance().ChangeScreen(ScreenState.AFTER);
                        AfterScreen s = (AfterScreen)ScreenManager.GetInstance().CurrentScreen;
                        s.Players = Players;
                        s.Stage   = 1;
                        MediaPlayer.Stop();
                    }
                }
                break;
            }
        }