Skip to content

Commit

Permalink
Merge pull request #52 from samsmithnz/feature/AddedExperienceLevels
Browse files Browse the repository at this point in the history
added more experience logic
  • Loading branch information
samsmithnz committed May 23, 2021
2 parents cfe87ae + 0dcde33 commit d50ba48
Show file tree
Hide file tree
Showing 9 changed files with 290 additions and 73 deletions.
8 changes: 4 additions & 4 deletions src/Battle.Logic/CharacterCover/Cover.cs
Original file line number Diff line number Diff line change
Expand Up @@ -200,19 +200,19 @@ private static List<Vector3> FindAdjacentCover(Vector3 currentLocation, int widt
}

//Get possible tiles, within constraints of map, including only square titles from current position (not diagonally)
if (validTiles[Convert.ToInt32(currentLocation.X), Convert.ToInt32(zMax)] == CoverType.FullCover)
if (validTiles[Convert.ToInt32(currentLocation.X), zMax] == CoverType.FullCover || validTiles[Convert.ToInt32(currentLocation.X), zMax] == CoverType.HalfCover)
{
result.Add(new Vector3(currentLocation.X, 0f, zMax));
}
if (validTiles[Convert.ToInt32(xMax), Convert.ToInt32(currentLocation.Z)] == CoverType.FullCover)
if (validTiles[xMax, Convert.ToInt32(currentLocation.Z)] == CoverType.FullCover || validTiles[xMax, Convert.ToInt32(currentLocation.Z)] == CoverType.HalfCover)
{
result.Add(new Vector3(xMax, 0f, currentLocation.Z));
}
if (validTiles[Convert.ToInt32(currentLocation.X), Convert.ToInt32(zMin)] == CoverType.FullCover)
if (validTiles[Convert.ToInt32(currentLocation.X), zMin] == CoverType.FullCover|| validTiles[Convert.ToInt32(currentLocation.X), zMin] == CoverType.HalfCover)
{
result.Add(new Vector3(currentLocation.X, 0f, zMin));
}
if (validTiles[Convert.ToInt32(xMin), Convert.ToInt32(currentLocation.Z)] == CoverType.FullCover)
if (validTiles[xMin, Convert.ToInt32(currentLocation.Z)] == CoverType.FullCover|| validTiles[xMin, Convert.ToInt32(currentLocation.Z)] == CoverType.HalfCover)
{
result.Add(new Vector3(xMin, 0f, currentLocation.Z));
}
Expand Down
2 changes: 1 addition & 1 deletion src/Battle.Logic/CharacterCover/CoverType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
public static class CoverType
{
public const string FullCover = "";
public const string FullCover = "";
public const string HalfCover = "";
public const string NoCover = "";
//▫
Expand Down
102 changes: 102 additions & 0 deletions src/Battle.Logic/Characters/Experience.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
namespace Battle.Logic.Characters
{
public static class Experience
{
//Experience
// 0xp for miss
// 10xp for hit
// 100xp for kill

//Rank Enemy Unknown
//1. Rookie 0
//2. Squaddie 100
//3. Corporal 500
//4. Sergeant 1000
//5. Lieutenant 1500
//6. Captain 2000
//7. Major 2500
//8. Colonel 3000
private const int Level2ExperienceNeeded = 100;
private const int Level3ExperienceNeeded = 500;
private const int Level4ExperienceNeeded = 1000;
private const int Level5ExperienceNeeded = 1500;
private const int Level6ExperienceNeeded = 2000;
private const int Level7ExperienceNeeded = 2500;
private const int Level8ExperienceNeeded = 3000;

private const int SuccessfulAction = 10;
private const int KillXP = 100;

public static int GetExperience(bool successfulAction, bool successfulKill = false)
{
//hit
if (successfulAction == true)
{
if (successfulKill == true)
{
return KillXP;
}
else
{
return SuccessfulAction;
}
}
else
{
return 0;
}
}

public static bool CheckIfReadyToLevelUp(int level, int experience)
{
bool result = false;
switch (level)
{
case 1:
if (experience >= Level2ExperienceNeeded)
{
result = true;
}
break;
case 2:
if (experience >= Level3ExperienceNeeded)
{
result = true;
}
break;
case 3:
if (experience >= Level4ExperienceNeeded)
{
result = true;
}
break;
case 4:
if (experience >= Level5ExperienceNeeded)
{
result = true;
}
break;
case 5:
if (experience >= Level6ExperienceNeeded)
{
result = true;
}
break;
case 6:
if (experience >= Level7ExperienceNeeded)
{
result = true;
}
break;
case 7:
if (experience >= Level8ExperienceNeeded)
{
result = true;
}
break;

}
return result;
}
}
}
2 changes: 1 addition & 1 deletion src/Battle.Logic/Encounters/Encounter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public static EncounterResult AttackCharacterWithAreaOfEffect(Character sourceCh
List<Vector3> area = FieldOfViewAreaEffectCalculator.GetAreaOfEffect(map, throwingTargetLocation, weapon.AreaEffectRadius);
foreach (Vector3 item in area)
{
if (map[(int)item.X, (int)item.Z] == CoverType.FullCover)
if (map[(int)item.X, (int)item.Z] == CoverType.FullCover || map[(int)item.X, (int)item.Z] == CoverType.HalfCover)
{
map[(int)item.X, (int)item.Z] = "";
log.Add("Cover removed from " + item.ToString());
Expand Down
65 changes: 0 additions & 65 deletions src/Battle.Logic/Encounters/Experience.cs

This file was deleted.

5 changes: 3 additions & 2 deletions src/Battle.Logic/FieldOfView/FieldOfViewCalculator.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Battle.Logic.CharacterCover;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
Expand Down Expand Up @@ -70,7 +71,7 @@ public static List<Vector3> GetFieldOfView(string[,] map, Vector3 location, int
currentLength += lineSegment;
Vector3 fovItem = singleLineCheck[i];
//If we find an object, stop adding tiles
if (map[(int)fovItem.X, (int)fovItem.Z] != "")
if (map[(int)fovItem.X, (int)fovItem.Z] == CoverType.FullCover)
{
break;
}
Expand Down
10 changes: 10 additions & 0 deletions src/Battle.Logic/Map/MapItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Battle.Logic.Map
{
public class MapItem
{
public string Name { get; set; }
public int HitPoints { get; set; }
public bool IsBurnable { get; set; }
public bool IsExplosive { get; set; }
}
}
134 changes: 134 additions & 0 deletions src/Battle.Tests/Characters/CharacterExperienceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
using Battle.Logic.AbilitiesAndEffects;
using Battle.Logic.Characters;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using System.Numerics;

namespace Battle.Tests.Characters
{
[TestClass]
[TestCategory("L0")]
public class CharacterExperienceTests
{
[TestMethod]
public void CharacterFredLevel1To2XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 100;
fred.Level = 1;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel2To3XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 500;
fred.Level = 2;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel3To4XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 1000;
fred.Level = 3;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel4To5XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 1500;
fred.Level = 4;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel5To6XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 2000;
fred.Level = 5;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel6To7XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 2500;
fred.Level = 6;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel7To8XPFailTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 3000-1;
fred.Level = 7;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(false, readyToLevelUp);
}

[TestMethod]
public void CharacterFredLevel7To8XPTest()
{
//Arrange
Character fred = CharacterPool.CreateFredHero();
fred.Experience = 3000;
fred.Level = 7;

//Act
bool readyToLevelUp = Experience.CheckIfReadyToLevelUp(fred.Level, fred.Experience);

//Assert
Assert.AreEqual(true, readyToLevelUp);
}

}
}
Loading

0 comments on commit d50ba48

Please sign in to comment.