void Start()
    {
        // A*
        greedy = new Greedy(width, height, depth, nodeSize, origin);

        // Create main camera
        Vector3 position = new Vector3(width * -6, height * 18, depth * -6);

        Instantiate(cam, position, cam.transform.rotation);

        grid = greedy.GetGrid();

        // Add walls manually
        greedy.GetNode(2, 2, 2).SetWalkable(!greedy.GetNode(2, 2, 2).isWalkable);

        // Draw walls
        DrawWalls();

        // Create visual nodes
        stepVisual.Setup(grid);

        // Show goal node
        Object.Instantiate(goalObject, grid.GetPosition(goalX, goalY, goalZ) + new Vector3(5, 5, 5), new Quaternion());
        Object.Instantiate(goalObject, grid.GetPosition(startX, startY, startZ) + new Vector3(5, 5, 5), new Quaternion());
    }
    void SetupGreedy()
    {
        greedy = new Greedy(width, height, depth, nodeSize, origin);

        greedyGrid = greedy.GetGrid();

        // Add walls manually
        greedy.GetNode(2, 2, 0).SetWalkable(!greedy.GetNode(2, 2, 0).isWalkable);
        greedy.GetNode(2, 3, 0).SetWalkable(!greedy.GetNode(2, 3, 0).isWalkable);
        greedy.GetNode(2, 4, 0).SetWalkable(!greedy.GetNode(2, 4, 0).isWalkable);
        greedy.GetNode(3, 4, 0).SetWalkable(!greedy.GetNode(3, 4, 0).isWalkable);
        greedy.GetNode(4, 4, 0).SetWalkable(!greedy.GetNode(4, 4, 0).isWalkable);
        greedy.GetNode(5, 4, 0).SetWalkable(!greedy.GetNode(5, 4, 0).isWalkable);
        greedy.GetNode(6, 4, 0).SetWalkable(!greedy.GetNode(6, 4, 0).isWalkable);
        greedy.GetNode(6, 3, 0).SetWalkable(!greedy.GetNode(6, 3, 0).isWalkable);
        greedy.GetNode(6, 2, 0).SetWalkable(!greedy.GetNode(6, 2, 0).isWalkable);
        greedy.GetNode(1, 9, 0).SetWalkable(!greedy.GetNode(1, 9, 0).isWalkable);
        greedy.GetNode(1, 8, 0).SetWalkable(!greedy.GetNode(1, 8, 0).isWalkable);
        greedy.GetNode(3, 7, 0).SetWalkable(!greedy.GetNode(3, 7, 0).isWalkable);
        greedy.GetNode(4, 7, 0).SetWalkable(!greedy.GetNode(4, 7, 0).isWalkable);
        greedy.GetNode(5, 7, 0).SetWalkable(!greedy.GetNode(5, 7, 0).isWalkable);
        greedy.GetNode(6, 7, 0).SetWalkable(!greedy.GetNode(6, 7, 0).isWalkable);
        greedy.GetNode(7, 7, 0).SetWalkable(!greedy.GetNode(7, 7, 0).isWalkable);
        greedy.GetNode(8, 7, 0).SetWalkable(!greedy.GetNode(8, 7, 0).isWalkable);

        // Add weighted tiles manually
        greedy.GetNode(0, 4, 0).SetWeighted(!greedy.GetNode(0, 4, 0).isWeighted);
        greedy.GetNode(1, 4, 0).SetWeighted(!greedy.GetNode(1, 4, 0).isWeighted);

        // Draw walls
        for (int x = 0; x < greedyGrid.GetWidth(); x++)
        {
            for (int y = 0; y < greedyGrid.GetHeight(); y++)
            {
                for (int z = 0; z < greedyGrid.GetDepth(); z++)
                {
                    Node node = greedyGrid.GetGridObject(x, y, z);

                    // If the node is not walkable draw a wall
                    if (!node.isWalkable)
                    {
                        Object.Instantiate(wallObject, greedyGrid.GetPosition(x, y, z) + new Vector3(5, 5, 5), new Quaternion());
                    }

                    if (node.isWeighted)
                    {
                        Object.Instantiate(weightedObject, greedyGrid.GetPosition(x, y, z) + new Vector3(5, 5, 5), new Quaternion());
                    }
                }
            }
        }

        // Create visual nodes
        stepVisual.Setup(greedyGrid);

        // Show goal node
        Object.Instantiate(goalObject, greedyGrid.GetPosition(goalX, goalY, goalZ) + new Vector3(5, 5, 5), new Quaternion());
        Object.Instantiate(goalObject, greedyGrid.GetPosition(startX, startY, startZ) + new Vector3(5, 5, 5), new Quaternion());

        currentAlgorithm = "greedy";
    }