Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Node ClosestWalkableNode(Node node) {
- int maxRadius = Mathf.Max (gridSizeX, gridSizeY) / 2;
- for (int i = 1; i < maxRadius; i++) {
- Node n = FindWalkableInRadius (node.gridX, node.gridY, i);
- if (n != null) {
- return n;
- }
- }
- return null;
- }
- Node FindWalkableInRadius(int centreX, int centreY, int radius) {
- for (int i = -radius; i <= radius; i ++) {
- int verticalSearchX = i + centreX;
- int horizontalSearchY = i + centreY;
- // top
- if (InBounds(verticalSearchX, centreY + radius)) {
- Debug.DrawRay (grid [verticalSearchX, centreY + radius].worldPosition, Vector3.up * 2,Color.green,radius);
- if (grid[verticalSearchX, centreY + radius].walkable) {
- return grid [verticalSearchX, centreY + radius];
- }
- }
- // bottom
- if (InBounds(verticalSearchX, centreY - radius)) {
- if (grid[verticalSearchX, centreY - radius].walkable) {
- return grid [verticalSearchX, centreY - radius];
- }
- }
- // right
- if (InBounds(centreY + radius, horizontalSearchY)) {
- Debug.DrawRay (grid [centreY + radius, horizontalSearchY].worldPosition, Vector3.up * 2,Color.red,radius);
- if (grid[centreX + radius, horizontalSearchY].walkable) {
- return grid [centreX + radius, horizontalSearchY];
- }
- }
- // left
- if (InBounds(centreY - radius, horizontalSearchY)) {
- Debug.DrawRay (grid [centreY - radius, horizontalSearchY].worldPosition, Vector3.up * 2,Color.red,radius);
- if (grid[centreX - radius, horizontalSearchY].walkable) {
- return grid [centreX - radius, horizontalSearchY];
- }
- }
- }
- return null;
- }
- bool InBounds(int x, int y) {
- return x>=0 && x<gridSizeX && y>= 0 && y<gridSizeY;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement