using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace CarFire { class GameLogic { Game mGame; public GameLogic(Game game) { mGame = game; } public void Update(TimeSpan timespan, int thisPlayer) { //Handle projectiles - update and check for wall collisions for (int i = 0; i < mGame.State.mProjectiles.Count; i++) { bool removed = false; if (!mGame.State.Map.IsCellOpen(new Point(mGame.State.mProjectiles[i].Coordinates.X, mGame.State.mProjectiles[i].Coordinates.Y))) { mGame.State.mProjectiles.RemoveAt(i); removed = true; i--; } if (!removed) mGame.State.mProjectiles[i].Update(timespan); } //Check for collisons for (int j = 0; j < mGame.State.mCharacters.Length; j++) { if (mGame.State.mCharacters[j] != null) for (int i = 0; i < mGame.State.mProjectiles.Count; i++) { if (mGame.State.mProjectiles[i].Coordinates.X == mGame.State.mCharacters[j].Coordinates.X && mGame.State.mProjectiles[i].Coordinates.Y == mGame.State.mCharacters[j].Coordinates.Y) { mGame.State.mCharacters[j].causeDamageTo(mGame.State.mProjectiles[i].Damage); Console.WriteLine(mGame.State.mCharacters[j].Health); mGame.State.mProjectiles.RemoveAt(i); i--; } } } //Update input for each player for (int i = 0; i < mGame.State.NumberOfPlayers; i++) { //If player has not selected a player yet let them select one. if (mGame.State.mCharacters[i] == null) { if (mGame.State.GetKeysDown(i).Contains(Keys.Enter)) { //mCharacters[i] = new Human(mGame, "", everything, projectile1, this, mGame.State.Map.GetStartingPositionForPlayer(i + 1)); } } //Regular player input updates else { mGame.State.mCharacters[i].UpdateInput(timespan, mGame.State.GetKeysDown(i)); } } if (mGame.State.mCharacters[thisPlayer] != null) { mGame.State.Map.CenterCell = mGame.State.mCharacters[thisPlayer].Position; } //Handle wall collisions of projectiles again... for (int i = 0; i < mGame.State.mProjectiles.Count; i++) { if (!mGame.State.Map.IsCellOpen(new Point(mGame.State.mProjectiles[i].Coordinates.X, mGame.State.mProjectiles[i].Coordinates.Y))) { mGame.State.mProjectiles.RemoveAt(i); i--; } } } } }