public bool ShowRange(Character c) { var startTile = Tiles.FirstOrDefault(t => t.Coordinate == c.Coordinate); var maxRangeOfTiles = Tiles.Where(t => ((t.Coordinate.x <= c.Coordinate.x + c.Stats.Movement) && (t.Coordinate.x >= c.Coordinate.x - c.Stats.Movement)) && ((t.Coordinate.y <= c.Coordinate.y + c.Stats.Movement) && (t.Coordinate.y >= c.Coordinate.y - c.Stats.Movement))).ToList(); var blockedTiles = Tiles.Where(t => Personajes.Any(p => p.Coordinate == t.Coordinate && p != c)).ToList(); var dijks = Dijsktra.GetDistances(maxRangeOfTiles, startTile, blockedTiles); foreach (var dijk in dijks) { if (dijk.Distance > c.Stats.Movement) { continue; } //if (Personajes.Where(p => p.Team != c.Team).Any(p => p.Coordinate == dijk.t.Coordinate)) if (Personajes.Where(p => p != c).Any(p => p.Coordinate == dijk.t.Coordinate)) { continue; } GameObject newObject = GameObject.Instantiate(MovementTile) as GameObject; newObject.transform.position = dijk.t.Coordinate; tilesForMovement.Add(newObject); lastDijkstraSearch.Add(dijk); } return(true); }