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--;
+ }
+ }
+ }
}
+ */
}
}
}