X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fcarfire;a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FGameLogic.cs;h=aa37290b853ebdc60406bfe458a3ce119cdd09d8;hp=6f859d0b72b9349c29cc9796ad69ebc75c87aabc;hb=e9d9fd4070f8b3e30c9c4510f922609d7d84ceac;hpb=594f1f722dc8e405dff12baad8c2ef5481fa3fa7 diff --git a/CarFire/CarFire/CarFire/GameLogic.cs b/CarFire/CarFire/CarFire/GameLogic.cs index 6f859d0..aa37290 100644 --- a/CarFire/CarFire/CarFire/GameLogic.cs +++ b/CarFire/CarFire/CarFire/GameLogic.cs @@ -11,77 +11,102 @@ namespace CarFire { class GameLogic { + Game mGame; public GameLogic(Game game) { mGame = game; } + /// + /// Update the game logic. + /// + /// timeslice + /// index of the player to center the screen around 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++) + //TODO make a seperate one for battle + if (mGame.State.Map.Type == Map.Mode.Campaign || mGame.State.Map.Type == Map.Mode.Battle) { - bool removed = false; - if (!mGame.State.Map.IsCellOpen(new Point(mGame.State.mProjectiles[i].Coordinates.X, mGame.State.mProjectiles[i].Coordinates.Y))) + //Handle projectiles - update and check for wall collisions + for (int i = 0; i < mGame.State.mProjectiles.Count; i++) { - - 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++) + bool removed = false; + //Check to see if there are any entities in the square with the projectile + if (!mGame.IsCellOpen(new Point(mGame.State.mProjectiles[i].Coordinates.X, mGame.State.mProjectiles[i].Coordinates.Y))) { - 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) + //The projectile has hit something. + IEntity hitEntity = mGame.GetEntityAtCoordinates(new Point(mGame.State.mProjectiles[i].Coordinates.X, mGame.State.mProjectiles[i].Coordinates.Y)); + //If it is a monster than decrement monster health and increment the score of the player who shot it. + if (hitEntity is IMonster) { - mGame.State.mCharacters[j].causeDamageTo(mGame.State.mProjectiles[i].Damage); - Console.WriteLine(mGame.State.mCharacters[j].Health); - mGame.State.mProjectiles.RemoveAt(i); - i--; + IMonster hitMonster = (IMonster)hitEntity; + hitMonster.causeDamageTo(mGame.State.mProjectiles[i].Damage); + if (hitMonster.Health > 0) + { + mGame.State.mCharacters[mGame.State.mProjectiles[i].CharacterIndex].Score += mGame.State.HitMonsterScore; + Console.WriteLine(mGame.State.mCharacters[mGame.State.mProjectiles[i].CharacterIndex].Score); + } + else + { + mGame.State.mCharacters[mGame.State.mProjectiles[i].CharacterIndex].Score += mGame.State.KillMonsterScore; + Console.WriteLine(mGame.State.mCharacters[mGame.State.mProjectiles[i].CharacterIndex].Score); + //Remove dead monsters + mGame.State.Entities.Remove(hitEntity); + } } + mGame.State.mProjectiles.RemoveAt(i); + removed = true; + 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 (!removed) + mGame.State.mProjectiles[i].Update(timespan); + + } + //Check for collisons + /* + + */ + //Update input for each player + for (int i = 0; i < mGame.State.NumberOfPlayers; i++) { - if (mGame.State.GetKeysDown(i).Contains(Keys.Enter)) - { - //mCharacters[i] = new Human(mGame, "", everything, projectile1, this, mGame.State.Map.GetStartingPositionForPlayer(i + 1)); - } + if (mGame.State.mCharacters[i] != null) + mGame.State.mCharacters[i].Update(timespan, mGame.State.GetKeysDown(i)); } - //Regular player input updates - else + if (mGame.State.mCharacters[thisPlayer] != null) { - - mGame.State.mCharacters[i].UpdateInput(timespan, mGame.State.GetKeysDown(i)); + 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--; + } } } - if (mGame.State.mCharacters[thisPlayer] != null) + /* + else if (mGame.State.Map.Type == Map.Mode.Battle) { - 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))) + for (int j = 0; j < mGame.State.mCharacters.Length; j++) { - mGame.State.mProjectiles.RemoveAt(i); - i--; - } + 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--; + } + } + } } + */ } } }