Example #1
0
    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);
    }