Esempio n. 1
0
    /// <summary> A* path search -> HAS TO BE RUN ON MAIN THREAD</summary>
    /// <param name="tiles"></param>
    private void CreatePaths()
    {
        if (positions.Count() >= 2)
        {
            for (int i = 0; i < positions.Count - 1; i++)
            {
                UnityEngine.Debug.Log(positions[i]);

                activeTiles.Clear();
                visitedTiles.Clear();

                AreaTile start = new AreaTile()
                {
                    position = positions[i]
                };

                AreaTile end = new AreaTile()
                {
                    position = positions[i + 1]
                };

                start.SetDistance(end.position);
                activeTiles.Add(start);

                GeneratePathPoint(start, end);
            }
        }
        else
        {
            UnityEngine.Debug.Log("2 or more path points required to generate path");
        }
    }
Esempio n. 2
0
    private System.Collections.Generic.IEnumerable <AreaTile> GetTileGrid(AreaTile currentTile, AreaTile targetTile)
    {
        for (int z = -1; z < 2; z++)
        {
            for (int x = -1; x < 2; x++)
            {
                Vector3 position = currentTile.position;
                position.X += x;
                position.Z += z;


                if (parent.PositionWithinObject(parent.gameObject, position) & childObjects.All(obj => !parent.PositionWithinObject(obj.gameObject, position)))
                {
                    AreaTile gridTile = new AreaTile
                    {
                        position = position,
                        Parent   = currentTile,
                        Cost     = currentTile.Cost + 1
                    };

                    gridTile.SetDistance(targetTile.position);

                    yield return(gridTile);
                }
            }
        }
    }