X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fcarfire;a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FGame.cs;h=45b79d16901a653e8bcd1038075c8766d7fc4086;hp=4aa1cfe83aff7eea3d60f74d2289042d66cd34b7;hb=d167160264cd2c33de81a71039eddbb959c40bb2;hpb=b3adecad08c0bb066d6efe041835a9636a96b066 diff --git a/CarFire/CarFire/CarFire/Game.cs b/CarFire/CarFire/CarFire/Game.cs index 4aa1cfe..45b79d1 100644 --- a/CarFire/CarFire/CarFire/Game.cs +++ b/CarFire/CarFire/CarFire/Game.cs @@ -24,7 +24,8 @@ namespace CarFire public Map Map; public List Entities = new List(); - public IPlayer[] mCharacters = new IPlayer[4]; + public List mProjectiles = new List(); + public Player[] mCharacters; public Display mDisplay; #endregion @@ -41,6 +42,8 @@ namespace CarFire mNumberOfPlayers = numPlayers; mFrameNumber = 0; + mCharacters = new Player[numPlayers]; + mIsGameOver = new bool[numPlayers]; mIsTerminated = new bool[numPlayers]; @@ -222,7 +225,7 @@ namespace CarFire foreach (IEntity entity in State.Entities) { Point coordinates = entity.Coordinates; - grid[coordinates.X, coordinates.Y] = true; + if (State.Map.IsCellOpen(coordinates)) grid[coordinates.X, coordinates.Y] = false; } return grid; } @@ -232,19 +235,50 @@ namespace CarFire #region Public Methods - public bool IsCellOpen(Point point) + + public IEntity GetEntityAtCoordinates(Point point) { - if (!State.Map.IsCellOpen(point)) return false; foreach (IEntity entity in State.Entities) { - if (entity.Coordinates == point) return false; + if (entity.Coordinates == point) return entity; + } + return null; + } + + public Player GetPlayerAtCoordinates(Point point) + { + foreach (Player player in State.mCharacters) + { + if (player != null && player.Coordinates == point) return player; } + return null; + } + + public bool IsCellOpen(Point point) + { + if (!State.Map.IsCellOpen(point)) return false; + if (GetEntityAtCoordinates(point) != null) return false; return true; } public Game() { + } + /// + /// This method should be called whenever the players want to move to a new map. + /// Not implemented yet. Need some way to get next map. + /// + public void startNewMap() + { + //TODO somehow get next map + State.Entities.Clear(); + //State.Map = State.Map.getNextMap(); + for (int i = 0; i < State.mCharacters.Length; i++) + { + State.mCharacters[i].Coordinates = State.Map.GetStartingPositionForPlayer(i + 1); + } + State.Entities = State.Map.GetAllEntities(this); } public void LoadContent(ContentManager contentManager) { @@ -295,9 +329,8 @@ namespace CarFire State.mDisplay = new Display(this); State.mDisplay.LoadContent(mContentManager); - State.Map = mContentManager.Load("Maps/stable"); - State.Map.Game = this; - State.Entities = State.Map.GetAllEntities(); + State.Map = mContentManager.Load("Maps/level1"); + State.Entities = State.Map.GetAllEntities(this); Map.DefaultTile = mContentManager.Load("default"); /* @@ -365,7 +398,7 @@ namespace CarFire public long Update(TimeSpan elapsedTime) { State.AdvanceFrame(mInputs, elapsedTime.Milliseconds); // Apply the inputs, advance game state. - State.mDisplay.Update(elapsedTime, State, mThisPlayerID); + State.mDisplay.Update(elapsedTime, mThisPlayerID); State.Entities.ForEach(delegate(IEntity e) { e.Update(elapsedTime); }); mInputs = new NextInputs(State.NumberOfPlayers); // Start with inputs cleared on the next frame. //mDisplay.Update(elapsedTime); @@ -382,9 +415,14 @@ namespace CarFire if (State.mCharacters[i] == null) { allCharactersSelected = false; - if (State.GetKeysDown(i).Contains(Keys.Enter)) + if (State.GetKeysDown(i).Contains(Keys.M)) + { + State.mCharacters[i] = new Melee(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i); + State.mCharacters[i].LoadContent(mContentManager); + } + else if (State.GetKeysDown(i).Contains(Keys.R)) { - State.mCharacters[i] = new Human(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i); + State.mCharacters[i] = new Ranged(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i); State.mCharacters[i].LoadContent(mContentManager); } } @@ -397,7 +435,7 @@ namespace CarFire else { spriteBatch.GraphicsDevice.Clear(Color.Black); - spriteBatch.DrawString(menu, "Press Enter To Select A Character", new Vector2(30, 30), Color.RosyBrown); + spriteBatch.DrawString(menu, "Press R to select a Ranged Character and M to select a Melee Character", new Vector2(30, 30), Color.RosyBrown); } return CurrentFrameNumber; }