think i finally solved movement going into enemy territory
This commit is contained in:
@@ -115,7 +115,7 @@ public partial class Map : TileMapLayer
|
||||
|
||||
public int GetCellDisposition(Vector2I ADDRESS)
|
||||
{
|
||||
return (int)GetCellTileData(ADDRESS).GetCustomData("disposition");
|
||||
return (int)GetCellTileData(ADDRESS).GetCustomData(_dispositionString);
|
||||
}
|
||||
|
||||
public MapCellOccupant GetOccupant(Vector2I CELL_TO_CHECK)
|
||||
|
||||
@@ -29,16 +29,7 @@ public partial class Peg : MapCellOccupant
|
||||
}
|
||||
public virtual PegAction SelectAction()
|
||||
{
|
||||
PegAction action = null;
|
||||
for (int i = 0; i < _actions.Count; i++)
|
||||
{
|
||||
if (_actions[i].MeetsCriteria(this))
|
||||
{
|
||||
action = _actions[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return action;
|
||||
return _actions.FirstOrDefault(a => a.MeetsCriteria(this), null);
|
||||
}
|
||||
|
||||
public virtual void CounterAct(Commander COMMANDER)
|
||||
@@ -73,14 +64,8 @@ public partial class Peg : MapCellOccupant
|
||||
|
||||
public virtual MapCell Goal()
|
||||
{
|
||||
Map map = _pegController._playArea._map;
|
||||
Dictionary<Vector2I, MapCell> visible = GetVisibleCells();
|
||||
Dictionary<Vector2I, MapCell> unoccupied = visible.Where(c => !map._astar.IsPointSolid(c.Key)).ToDictionary();
|
||||
Dictionary<Vector2I, MapCell> enemyTerritory = map._cells.Where(c => _map.GetCellDisposition(c.Value._address) == -(int)_disposition).ToDictionary();
|
||||
Dictionary<Vector2I, MapCell> closest = enemyTerritory.OrderByDescending(c => c.Value._address.Y).ThenByDescending(c => Math.Abs(c.Value._address.X - _address.X)).ToDictionary();
|
||||
|
||||
// Dictionary<Vector2I, MapCell> closest = unoccupied.OrderByDescending(c => c.Value._address.Y * -(int)_disposition).ThenByDescending(c => Math.Abs(c.Value._address.X - _address.X)).ToDictionary();
|
||||
// Dictionary<Vector2I, MapCell> closest = furthest.Where(c => _map.GetCellDisposition(c.Value._address) == -(int)_disposition).ToDictionary();
|
||||
Dictionary<Vector2I, MapCell> enemyTerritory = _map._cells.Where(c => _map.GetCellDisposition(c.Value._address) == (_disposition == Disposition.FRIENDLY ? -1 : 1)).ToDictionary();
|
||||
Dictionary<Vector2I, MapCell> closest = enemyTerritory.OrderByDescending(c => c.Value._address.Y).ThenBy(c => Math.Abs(c.Value._address.X - _address.X)).ToDictionary();
|
||||
return closest.ElementAt(0).Value;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,9 @@ public partial class BasicMovement : PegAction
|
||||
public override bool MeetsCriteria(Peg PEG)
|
||||
{
|
||||
List<MapCell> bestPath = PEG.GetBestPath(true);
|
||||
return base.MeetsCriteria(PEG) && bestPath.Count > 0;
|
||||
return base.MeetsCriteria(PEG)
|
||||
&& bestPath.Count > 0
|
||||
&& PEG._map.GetCellDisposition(bestPath[0]._address) != -(int)PEG._disposition;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -25,16 +25,11 @@ public partial class ShootShortbow : PegAction
|
||||
subtween.TweenProperty(_image, "global_position", target.GlobalPosition, 0.5f);
|
||||
subtween.TweenCallback(Callable.From(() =>
|
||||
{
|
||||
((Peg)target._occupant)._pegController._playerController.ChangeHealth(-2, this);
|
||||
PEG._pegController._playerController.ChangeHealth(-2, this);
|
||||
Position = Vector2.Zero;
|
||||
Visible = false;
|
||||
}));
|
||||
return subtween;
|
||||
}
|
||||
|
||||
public override MapCell Target(Peg PEG)
|
||||
{
|
||||
return PEG.Goal();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,16 +26,10 @@ public partial class SwingShortsword : PegAction
|
||||
subtween.TweenProperty(_image, "global_position", target.GlobalPosition, 0.5f);
|
||||
subtween.TweenCallback(Callable.From(() =>
|
||||
{
|
||||
((Peg)target._occupant)._pegController._playerController.ChangeHealth(-2, this);
|
||||
PEG._pegController._playerController.ChangeHealth(-2, this);
|
||||
_image.Position = Vector2.Zero;
|
||||
_image.Visible = false;
|
||||
}));
|
||||
return subtween;
|
||||
}
|
||||
|
||||
public override MapCell Target(Peg PEG)
|
||||
{
|
||||
return PEG.Goal();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public partial class ThrustSpear : PegAction
|
||||
subtween.TweenProperty(_image, "global_position", target.GlobalPosition, 0.5f);
|
||||
subtween.TweenCallback(Callable.From(() =>
|
||||
{
|
||||
((Peg)target._occupant).ChangeHealth(-1);
|
||||
((Peg)target?._occupant)?.ChangeHealth(-1);
|
||||
_image.Position = Vector2.Zero;
|
||||
_image.Visible = false;
|
||||
}));
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ public partial class HostilePeg : Peg
|
||||
{
|
||||
base._Ready();
|
||||
|
||||
_disposition = Disposition.FRIENDLY;
|
||||
_disposition = Disposition.HOSTILE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-2
@@ -25,9 +25,10 @@ public partial class PegAction : Node2D
|
||||
|
||||
public virtual bool MeetsCriteria(Peg PEG)
|
||||
{
|
||||
MapCell target = Target(PEG);
|
||||
return PEG._staminaRemaining >= _cost
|
||||
&& _usesRemaining > 0
|
||||
&& (PEG._address - Target(PEG)._address).Length() <= _range;
|
||||
&& (PEG._address - target._address).Length() <= _range;
|
||||
}
|
||||
|
||||
public virtual void Reset()
|
||||
@@ -37,6 +38,6 @@ public partial class PegAction : Node2D
|
||||
|
||||
public virtual MapCell Target(Peg PEG)
|
||||
{
|
||||
return PEG._cell;
|
||||
return PEG.Goal();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ public partial class PlayArea : Node2D
|
||||
MapCell c = _map._cells.ElementAt(i).Value;
|
||||
if (c._occupant != null)
|
||||
{
|
||||
GD.Print(c._occupant);
|
||||
occupiedSpaces.SetCell(c._address, 0, new Vector2I(4,0));
|
||||
}
|
||||
else if (_map._astar.IsPointSolid(c._address))
|
||||
|
||||
Reference in New Issue
Block a user