public RandomProjectile GenerateProjectile(int x, int y, int size, Color co) { Color c = (co.Equals(Color.Transparent)) ? new Color(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)) : co; RandomProjectile rp = new RandomProjectile(blank, new Rectangle(x, y, size, size), 10000) { Speed = 3.5f, Rotation = (float)(rand.NextDouble() * Math.PI), Color = c, }; return(rp); }
public void SpawnRandom(int safeDistance) { int size = 5 + rand.Next(5, 12); int x = rand.Next(-size, game.Width + size); int y = rand.Next(-size, game.Height + size); while (Vector2.Distance(player.Position, new Vector2(x, y)) <= safeDistance) { x = rand.Next(-size, game.Width + size); y = rand.Next(-size, game.Height + size); } RandomProjectile rp = new RandomProjectile(blank, new Rectangle(x, y, size, size), 10000) { Speed = 2.5f, Rotation = (float)(rand.NextDouble() * Math.PI * 2), Color = new Color(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)) }; projectiles.Add(rp); }
public override void Update(GameTime gameTime) { timer += gameTime.ElapsedGameTime.TotalMilliseconds; rSpawnTimer += gameTime.ElapsedGameTime.TotalMilliseconds; spawnTimer += gameTime.ElapsedGameTime.TotalMilliseconds; float dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds; float dv = 0.0004f; water.Update(gameTime); Tile.Update(gameTime); player.Update(gameTime); float bossFightTimer = (float)(timer - (124000 + 4 / dv + 64)); if (player.Health <= 0) { GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } int t = (int)(2 / dv + 16); int rSpawnTimerThresh = (state.Equals(MinigameState.BOSS)) ? 300 : 200; if (timer > 8000 && rSpawnTimer > rSpawnTimerThresh && boss.Health > 0) { rSpawnTimer = 0; if (!state.Equals(MinigameState.BOSS)) { SpawnRandom(350); } Color c = (state.Equals(MinigameState.BOSS)) ? Color.Red : Color.Transparent; RandomProjectile p = GenerateProjectile(game.Width / 5, 0, 10, c); RandomProjectile p2 = GenerateProjectile(game.Width / 5 * 2, 0, 10, c); RandomProjectile p3 = GenerateProjectile(game.Width / 5 * 3, 0, 10, c); RandomProjectile p4 = GenerateProjectile(game.Width / 5 * 4, 0, 10, c); projectiles.Add(p); projectiles.Add(p2); projectiles.Add(p3); projectiles.Add(p4); } int initialCount = projectiles.Count; for (int i = 0; i < projectiles.Count; i++) { projectiles[i].Update(gameTime); i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0); if (projectiles[Math.Min(i, projectiles.Count - 1)].TTL <= 0) { projectiles.RemoveAt(i--); } i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0); } if (timer < 8000) { state = MinigameState.BEGIN; } else if (timer > 8000 && timer < 14000) { state = MinigameState.KEYNESIAN_CROSS; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new FortyFiveProjectile(blank, new Rectangle( 0, game.Height, 10, 10), 9000)); projectiles.Add(new KeynesianCross(blank, new Rectangle( 0, game.Height / 3 * 2, 10, 10), 9000)); } } else if (timer > 15000 && timer < 28500) { state = MinigameState.AGGREGATE_DEMAND_SUPPLY; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 32000 && timer < 46500) { state = MinigameState.BUSINESS_CYCLE; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new BusinessCycleProjectile(blank, new Rectangle( 0, game.Height / 4 * 3, 10, 10), 10000)); } } else if (timer > 50000 && timer < 62000) { state = MinigameState.PHILLIPS; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new PhillipsProjectile(blank, new Rectangle(50, 0, 10, 10), 18000)); } } else if (timer > 64000 && timer < 78000) { state = MinigameState.SUPPLY_DEMAND; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 82000 && timer < 88500) { state = MinigameState.RECESSION_DEPRESSION; if (spawnTimer > 200) { spawnTimer = 0; // recession/depression projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width - 300, game.Height * 3 / 4 + 300, 10, 10), 10000)); } } else if (timer >= 88500 && timer < 96000) { state = MinigameState.INFLATION; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width + 200, game.Height * 3 / 4 - 100, 10, 10), 10000)); } } else if (timer >= 96000 && timer < 103000) { state = MinigameState.STAGFLATION; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ASProjectile(blank, new Rectangle( -200, game.Height * 3 / 4 - 200, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 103000 && timer < 112000) { state = MinigameState.ECONOMIC_BOOM; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 200, game.Height * 3 / 4 + 200, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 114000 && timer < 124000) { if (spawnTimer > 70) { spawnTimer = 0; projectiles.Add(new LafferProjectile(blank, new Rectangle(0, game.Height, 10, 10), 10000)); } state = MinigameState.LAFFERS_CURVE; } else if (timer > 124000 && timer < 124000 + t) { state = MinigameState.NONE; MediaPlayer.Volume = Math.Max(MediaPlayer.Volume - dv * dt, 0); //GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } else if (timer > 124000 + t && timer < 124000 + 2 * t) { if (!isPlayFlag) { isPlayFlag = true; MediaPlayer.Play(background2); } MediaPlayer.Volume = Math.Min(MediaPlayer.Volume + dv * dt, 1); } else if (timer > 124000 + 4 / dv + 64 && boss.Health > 0) { state = MinigameState.BOSS; boss.Update(gameTime); songName = "Spear of Justice! - Undertale"; } else { state = MinigameState.NONE; } if (boss.Health <= 0) { endTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds; state = MinigameState.END; if (endTimer > 10000) { GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } } }