123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- namespace Robot_Rampage
- {
- static class GoalManager
- {
- #region Declarations
- private static List<ComputerTerminal> computerTerminals =
- new List<ComputerTerminal>();
- private static int activeCount = 0;
- private static int minDistanceFromPlayer = 250;
- private static Random rand = new Random();
- private static Texture2D texture;
- private static Rectangle initialActiveFrame;
- private static Rectangle initialDisabledFrame;
- private static int activeFrameCount;
- private static int disabledFrameCount;
- #endregion
- #region Properties
- public static int ActiveTerminals
- {
- get { return activeCount; }
- }
- #endregion
- #region Initialization
- public static void Initialize(
- Texture2D textureSheet,
- Rectangle initialActiveRectangle,
- Rectangle initialDisabledRectangle,
- int activeFrames,
- int disabledFrames)
- {
- texture = textureSheet;
- initialActiveFrame = initialActiveRectangle;
- initialDisabledFrame = initialDisabledRectangle;
- activeFrameCount = activeFrames;
- disabledFrameCount = disabledFrames;
- }
- #endregion
- #region Terminal Management
- public static ComputerTerminal TerminalInSquare(
- Vector2 mapLocation)
- {
- foreach (ComputerTerminal terminal in computerTerminals)
- {
- if (terminal.MapLocation == mapLocation)
- {
- return terminal;
- }
- }
- return null;
- }
- public static void DetectShutdowns()
- {
- foreach (ComputerTerminal terminal in computerTerminals)
- {
- if (terminal.Active)
- {
- if (terminal.IsCircleColliding(
- Player.BaseSprite.WorldCenter,
- Player.BaseSprite.CollisionRadius))
- {
- terminal.Deactivate();
- activeCount--;
- GameManager.Score += 100;
- }
- }
- }
- }
- public static void AddComputerTerminal()
- {
- int startX = rand.Next(2, TileMap.MapWidth - 2);
- int startY = rand.Next(0, TileMap.MapHeight - 2);
- Vector2 tileLocation = new Vector2(startX, startY);
- if ((TerminalInSquare(tileLocation) != null) ||
- (TileMap.IsWallTile(tileLocation)))
- {
- return;
- }
- if (Vector2.Distance(
- TileMap.GetSquareCenter(startX, startY),
- Player.BaseSprite.WorldCenter) < minDistanceFromPlayer)
- {
- return;
- }
- List<Vector2> path =
- PathFinder.FindPath(
- new Vector2(startX, startY),
- TileMap.GetSquareAtPixel(
- Player.BaseSprite.WorldCenter));
- if (path != null)
- {
- Rectangle squareRect =
- TileMap.SquareWorldRectangle(startX, startY);
- Sprite activeSprite = new Sprite(
- new Vector2(squareRect.X, squareRect.Y),
- texture,
- initialActiveFrame,
- Vector2.Zero);
- for (int x = 1; x < 3; x++)
- {
- activeSprite.AddFrame(
- new Rectangle(
- initialActiveFrame.X + (x *
- initialActiveFrame.Width),
- initialActiveFrame.Y,
- initialActiveFrame.Width,
- initialActiveFrame.Height));
- }
- activeSprite.CollisionRadius = 15;
- Sprite disabledSprite = new Sprite(
- new Vector2(squareRect.X, squareRect.Y),
- texture,
- initialDisabledFrame,
- Vector2.Zero);
- ComputerTerminal terminal = new ComputerTerminal(
- activeSprite,
- disabledSprite,
- new Vector2(startX, startY));
- float timerOffset = (float)rand.Next(1, 100);
- terminal.LastSpawnCounter = timerOffset / 100f;
- computerTerminals.Add(terminal);
- activeCount++;
- }
- }
- #endregion
- #region Public Methods
- public static void GenerateComputers(int computerCount)
- {
- computerTerminals.Clear();
- activeCount = 0;
- while (activeCount < computerCount)
- {
- AddComputerTerminal();
- }
- }
- public static void Update(GameTime gameTime)
- {
- DetectShutdowns();
- foreach (ComputerTerminal terminal in
- computerTerminals)
- {
- terminal.Update(gameTime);
- }
- }
- public static void Draw(SpriteBatch spriteBatch)
- {
- foreach (ComputerTerminal terminal in
- computerTerminals)
- {
- terminal.Draw(spriteBatch);
- }
- }
- #endregion
- }
- }
|