bool CheckIfStuck()
{
if (TileMap.Tiles[CurrentTileID].PathsInts[goalTileID].Count < 1)
{
//FIX MATH.ABS CRAP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diffX = Position.X - focalPoint.X;
diffZ = Position.Z - focalPoint.Z;
diffX = diffX >= 0 ? diffX : diffX * -1;
diffZ = diffZ >= 0 ? diffZ : diffZ * -1;
if ((diffX < 30 && diffZ < 30)
|| !TileMap.GetTileFromPos(focalPoint).IsWalkable() || !isStuck)
{
List<Tile> stuckTiles = TileMap.GetWalkableNeighbors(TileMap.Tiles[CurrentTileID]);
stuckTiles.Add(TileMap.Tiles[CurrentTileID]);
if (stuckTiles.Count == 1 && !TileMap.Tiles[CurrentTileID].IsWalkable())
{
Health = 0;
OnDied();
//throw new NotImplementedException("No walkable neighbors with blocked current Tile2... handle this!");
}
SetFocalPointAndVelocity(stuckTiles[rand.Next(stuckTiles.Count)].ID);
}
UpdatePositionAndRotation();
isStuck = true;
return true;
}
isStuck = false;
return false;
}