public void Prebuild(Vector3 point, UnitTower tower) { if (nodeGraph == null || nodeGraph.Length == 0) { return; } NodeTD node = PathFinderTD.GetNearestNode(point, nodeGraph, 0); node.walkable = false; List <NodeTD> nodeList = PathFinderTD.GetNodeInFootprint(node, tower.GetFootprint()); foreach (NodeTD n in nodeList) { n.walkable = false; } tower.SetPlatform(this, node); foreach (PathOnPlatform pathObj in pathObjects) { queue.Add(pathObj.thisWP); PathFinderTD.GetPath(pathObj.startN, pathObj.endN, nodeGraph, this.SetPath); } }
public void Build(Vector3 point, UnitTower tower) { //pathfinding related code, only call if this platform is walkable; if (walkable) { if (tower.type != _TowerType.Mine) { //if build on the node last check for block, use the cached node and path if (nextBuildNode != null && Vector3.Distance(nextBuildNode.pos, point) < BuildManager.GetGridSize() / 2) { //Debug.Log("use cached path"); nextBuildNode.walkable = false; List <NodeTD> nodeList = PathFinderTD.GetNodeInFootprint(nextBuildNode, tower.GetFootprint()); foreach (NodeTD node in nodeList) { node.walkable = false; } tower.SetPlatform(this, nextBuildNode); foreach (PathOnPlatform pathObj in pathObjects) { int rand = pathObj.pathID; while (rand == pathObj.pathID) { rand = Random.Range(-999999, 999999); } pathObj.SetPath(pathObj.altPath, rand); //forceSearch doesnt smooth path so path smoothing is call //smoothPath will only valid path smoothing is enable in PathFinder pathObj.SmoothPath(); } } //if build on node that is unchecked, find the block node and initiate a new path search else { //Debug.Log("unexpected build point, query for new path"); NodeTD node = PathFinderTD.GetNearestNode(point, nodeGraph); node.walkable = false; //~ Debug.Log(node.ID); List <NodeTD> nodeList = PathFinderTD.GetNodeInFootprint(node, tower.GetFootprint()); foreach (NodeTD n in nodeList) { n.walkable = false; } tower.SetPlatform(this, node); foreach (PathOnPlatform pathObj in pathObjects) { queue.Add(pathObj.thisWP); PathFinderTD.GetPath(pathObj.startN, pathObj.endN, nodeGraph, this.SetPath); } } } } }
public void UnBuild(NodeTD node, int footprint) { footprint = 0; //Debug.Log("unbuild "+node.ID); node.walkable = true; List <NodeTD> nodeList = PathFinderTD.GetNodeInFootprint(node, footprint); foreach (NodeTD n in nodeList) { n.walkable = true; } foreach (PathOnPlatform pathObj in pathObjects) { //~ Debug.Log("update path"); queue.Add(pathObj.thisWP); PathFinderTD.GetPath(pathObj.startN, pathObj.endN, nodeGraph, this.SetPath); } }