/// <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"); } }
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); } } } }