Gave Get best path to enemy, enemy controller hands it a map
This commit is contained in:
@@ -53,6 +53,39 @@ public partial class Enemy : StaticBody2D
|
||||
|
||||
}
|
||||
|
||||
public virtual List<Vector2I> GetBestPath(Map MAP)
|
||||
{
|
||||
Vector2I goal = Vector2I.One * -1000;
|
||||
|
||||
goal.Y = MAP.GetFirstOpenRow();
|
||||
List<Vector2I> openCells = [.. MAP._cells.Where(c => c.Y == goal.Y && !MAP._astar.IsPointSolid(c))];
|
||||
List<Vector2I> testPath, bestPath = [];
|
||||
|
||||
int bestLength = 999999;
|
||||
|
||||
for (int i = 0; i < openCells.Count; i++)
|
||||
{
|
||||
testPath = MAP.GetPath(_address, openCells[i]);
|
||||
int testLength = testPath.Count;
|
||||
if (testLength < bestLength)
|
||||
{
|
||||
bestPath = testPath;
|
||||
bestLength = testLength;
|
||||
goal = openCells[i];
|
||||
}
|
||||
else if (testLength == bestLength)
|
||||
{
|
||||
if (Math.Abs(openCells[i].X - _address.X) < Math.Abs(goal.X - _address.X))
|
||||
{
|
||||
bestPath = testPath;
|
||||
bestLength = testLength;
|
||||
goal = openCells[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return bestPath;
|
||||
}
|
||||
|
||||
public void TakeDamage(int DAMAGE, Commander ATTACKER)
|
||||
{
|
||||
_health -= DAMAGE;
|
||||
|
||||
+4
-37
@@ -60,39 +60,6 @@ public partial class EnemyController : TurnController
|
||||
}
|
||||
}
|
||||
|
||||
public List<Vector2I> GetBestPath(Enemy ENEMY)
|
||||
{
|
||||
Vector2I goal = Vector2I.One * -1000;
|
||||
|
||||
goal.Y = _playArea._map.GetFirstOpenRow();
|
||||
List<Vector2I> openCells = [.. _playArea._map._cells.Where(c => c.Y == goal.Y && !_playArea._map._astar.IsPointSolid(c))];
|
||||
List<Vector2I> testPath, bestPath = new();
|
||||
|
||||
int bestLength = 999999;
|
||||
|
||||
for (int i = 0; i < openCells.Count; i++)
|
||||
{
|
||||
testPath = _playArea._map.GetPath(ENEMY._address, openCells[i]);
|
||||
int testLength = testPath.Count;
|
||||
if (testLength < bestLength)
|
||||
{
|
||||
bestPath = testPath;
|
||||
bestLength = testLength;
|
||||
goal = openCells[i];
|
||||
}
|
||||
else if (testLength == bestLength)
|
||||
{
|
||||
if (Math.Abs(openCells[i].X - ENEMY._address.X) < Math.Abs(goal.X - ENEMY._address.X))
|
||||
{
|
||||
bestPath = testPath;
|
||||
bestLength = testLength;
|
||||
goal = openCells[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return bestPath;
|
||||
}
|
||||
|
||||
public void GetRemainingSpeed(Enemy ENEMY)
|
||||
{
|
||||
ENEMY._speedRemaining = ENEMY._address.Y <= _playArea._map.GetFirstOpenRow() || ENEMY._address.Y <= ENEMY._hitRange ? 0 : ENEMY._speed;
|
||||
@@ -104,7 +71,7 @@ public partial class EnemyController : TurnController
|
||||
return;
|
||||
}
|
||||
TileMapLayer pathLayer = _playArea.GetNode<TileMapLayer>("PathLayer");
|
||||
List<Vector2I> newPath = GetBestPath(ENEMY);
|
||||
List<Vector2I> newPath = ENEMY.GetBestPath(_playArea._map);
|
||||
|
||||
|
||||
pathLayer.GetUsedCells().ToList().ForEach(c => pathLayer.SetCell(c,0,Vector2I.Down*4));
|
||||
@@ -136,7 +103,7 @@ public partial class EnemyController : TurnController
|
||||
|
||||
if (enemy._speedRemaining > 0)
|
||||
{
|
||||
enemy._path = GetBestPath(enemy);
|
||||
enemy._path = enemy.GetBestPath(map);
|
||||
|
||||
if (enemy._path.Count <= 0)
|
||||
{
|
||||
@@ -166,7 +133,7 @@ public partial class EnemyController : TurnController
|
||||
enemy._speedRemaining = 0;
|
||||
continue;
|
||||
}
|
||||
List<Vector2I> path = GetBestPath(enemy);
|
||||
List<Vector2I> path = enemy.GetBestPath(map);
|
||||
|
||||
if (path.Count == 0)
|
||||
{
|
||||
@@ -222,7 +189,7 @@ public partial class EnemyController : TurnController
|
||||
|
||||
public List<Enemy> GetRemainingEnemies(List<Enemy> ENEMIES)
|
||||
{
|
||||
return [.. ENEMIES.Where(e => e._speedRemaining > 0).OrderByDescending(e => GetBestPath(e).Count).ThenBy(e => e._address.Y).ThenBy(e => Math.Abs(e._address.X - _playArea._map._maxX / 2))];
|
||||
return [.. ENEMIES.Where(e => e._speedRemaining > 0).OrderByDescending(e => e.GetBestPath(_playArea._map).Count).ThenBy(e => e._address.Y).ThenBy(e => Math.Abs(e._address.X - _playArea._map._maxX / 2))];
|
||||
}
|
||||
|
||||
public override void StartTurn()
|
||||
|
||||
Reference in New Issue
Block a user