public static List <AtlasScene> getNeighbors(string sceneName = null)
    {
        if (sceneName == null)
        {
            sceneName = SceneManager.GetActiveScene().name;
        }
        AtlasSceneData sceneData    = getSceneData();
        AtlasScene     currentScene = getScene();

        if (currentScene == null)
        {
            throw new Exception("Cannot get neighbors for scene: " + sceneName);
        }

        List <AtlasScene> neighbors = new List <AtlasScene>();

        for (int x = 0; x < currentScene.size.x; x++)
        {
            neighbors.Add(findSceneByCoords(currentScene.position + new Vector2(x, -1)));
            neighbors.Add(findSceneByCoords(currentScene.position + new Vector2(x, currentScene.size.y)));
        }
        for (int y = 0; y < currentScene.size.y; y++)
        {
            neighbors.Add(findSceneByCoords(currentScene.position + new Vector2(-1, y)));
            neighbors.Add(findSceneByCoords(currentScene.position + new Vector2(currentScene.size.x, y)));
        }

        return(neighbors);
    }
    public static void printSceneNames()
    {
        StreamReader reader = new StreamReader(path);
        string       json   = reader.ReadToEnd();

        reader.Close();
        AtlasSceneData sceneData = JsonUtility.FromJson <AtlasSceneData>(json);

        sceneData.printSceneNames();
    }
    public static AtlasSceneData getSceneData(string sceneName = null)
    {
        StreamReader reader = new StreamReader(path);
        string       json   = reader.ReadToEnd();

        reader.Close();
        //string json = "{\"scenes\":[{\"scene\":\"UndergroundFountain\",\"position\":{\"x\":4,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":4,\"y\":3}]},{\"scene\":\"LandingSite\",\"position\":{\"x\":-1,\"y\":2},\"size\":{\"x\":2,\"y\":2},\"coords\":[{\"x\":-1,\"y\":2},{\"x\":-1,\"y\":3},{\"x\":0,\"y\":2},{\"x\":0,\"y\":3}]},{\"scene\":\"CaveEntrance\",\"position\":{\"x\":3,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":3,\"y\":2}]},{\"scene\":\"caveOpening\",\"position\":{\"x\":2,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":2,\"y\":2}]},{\"scene\":\"plainsPath1\",\"position\":{\"x\":1,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":1,\"y\":2}]},{\"scene\":\"UndergroundPath\",\"position\":{\"x\":3,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":3,\"y\":3}]},{\"scene\":\"AltairKettle\",\"position\":{\"x\":7,\"y\":6},\"size\":{\"x\":1,\"y\":6},\"coords\":[{\"x\":7,\"y\":6},{\"x\":7,\"y\":7},{\"x\":7,\"y\":8},{\"x\":7,\"y\":9},{\"x\":7,\"y\":10},{\"x\":7,\"y\":11}]},{\"scene\":\"BamBerry Grotto Intro\",\"position\":{\"x\":4,\"y\":6},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":4,\"y\":6}]},{\"scene\":\"ClockworkBombs\",\"position\":{\"x\":5,\"y\":6},\"size\":{\"x\":2,\"y\":1},\"coords\":[{\"x\":5,\"y\":6},{\"x\":6,\"y\":6}]},{\"scene\":\"followTheBomb\",\"position\":{\"x\":2,\"y\":6},\"size\":{\"x\":1,\"y\":2},\"coords\":[{\"x\":2,\"y\":6},{\"x\":2,\"y\":7}]},{\"scene\":\"warpZone\",\"position\":{\"x\":5,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":5,\"y\":3}]},{\"scene\":\"witchCanyon\",\"position\":{\"x\":3,\"y\":7},\"size\":{\"x\":2,\"y\":4},\"coords\":[{\"x\":3,\"y\":7},{\"x\":3,\"y\":8},{\"x\":3,\"y\":9},{\"x\":3,\"y\":10},{\"x\":4,\"y\":7},{\"x\":4,\"y\":8},{\"x\":4,\"y\":9},{\"x\":4,\"y\":10}]},{\"scene\":\"followStarChamber\",\"position\":{\"x\":3,\"y\":6},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":3,\"y\":6}]},{\"scene\":\"gardenEntrance\",\"position\":{\"x\":6,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":6,\"y\":3}]},{\"scene\":\"climbpastbombers\",\"position\":{\"x\":7,\"y\":0},\"size\":{\"x\":1,\"y\":2},\"coords\":[{\"x\":7,\"y\":0},{\"x\":7,\"y\":1}]},{\"scene\":\"gardenhub1\",\"position\":{\"x\":9,\"y\":1},\"size\":{\"x\":1,\"y\":3},\"coords\":[{\"x\":9,\"y\":1},{\"x\":9,\"y\":2},{\"x\":9,\"y\":3}]},{\"scene\":\"bombflowerHallway\",\"position\":{\"x\":8,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":8,\"y\":2}]},{\"scene\":\"chargerHall\",\"position\":{\"x\":10,\"y\":1},\"size\":{\"x\":2,\"y\":1},\"coords\":[{\"x\":10,\"y\":1},{\"x\":11,\"y\":1}]},{\"scene\":\"gardenTemplate\",\"position\":{\"x\":0,\"y\":6},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":0,\"y\":6}]},{\"scene\":\"gardenRampDown\",\"position\":{\"x\":8,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":8,\"y\":3}]},{\"scene\":\"bombberryTree\",\"position\":{\"x\":7,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":7,\"y\":2}]},{\"scene\":\"bombCrossroads\",\"position\":{\"x\":10,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":10,\"y\":3}]},{\"scene\":\"gardenStairs\",\"position\":{\"x\":11,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":11,\"y\":2}]},{\"scene\":\"gardenBombPuzzle1\",\"position\":{\"x\":11,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":11,\"y\":3}]},{\"scene\":\"movingUpToBumpBerry\",\"position\":{\"x\":12,\"y\":2},\"size\":{\"x\":1,\"y\":2},\"coords\":[{\"x\":12,\"y\":2},{\"x\":12,\"y\":3}]},{\"scene\":\"gardenReturn\",\"position\":{\"x\":9,\"y\":4},\"size\":{\"x\":2,\"y\":1},\"coords\":[{\"x\":9,\"y\":4},{\"x\":10,\"y\":4}]},{\"scene\":\"gardenRibbonBridge\",\"position\":{\"x\":7,\"y\":3},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":7,\"y\":3}]},{\"scene\":\"bumpberryTree\",\"position\":{\"x\":10,\"y\":2},\"size\":{\"x\":1,\"y\":1},\"coords\":[{\"x\":10,\"y\":2}]}]}";
        AtlasSceneData sceneData = JsonUtility.FromJson <AtlasSceneData>(json);

        return(sceneData);
    }
    public static AtlasScene findSceneByCoords(Vector2 sceneCoords)
    {
        AtlasSceneData sceneData = getSceneData();
        AtlasScene     rtnScene  = sceneData.scenes.Find(s => { return
                                                                (sceneCoords.x < s.position.x + s.size.x &&
                                                                 sceneCoords.x >= s.position.x &&
                                                                 sceneCoords.y < s.position.y + s.size.y &&
                                                                 sceneCoords.y >= s.position.y); });

        if (rtnScene == null)
        {
            rtnScene = new AtlasScene();
        }
        return(rtnScene);
    }
    public static Vector2 getSceneCoords(string sceneName = null)
    {
        if (sceneName == null)
        {
            sceneName = SceneManager.GetActiveScene().name;
        }
        AtlasSceneData sceneData = getSceneData();
        AtlasScene     scene     = sceneData.scenes.Find(s => s.scene == sceneName);

        if (scene != null)
        {
            return(new Vector2(scene.position.x, scene.position.y));
        }
        return(new Vector2(-1, -1));
    }
    public static AtlasScene getScene(string sceneName = null)
    {
        if (sceneName == null)
        {
            sceneName = SceneManager.GetActiveScene().name;
        }
        if (sceneName == "Main Menu")
        {
            return(new AtlasScene());
        }
        AtlasSceneData sceneData    = getSceneData();
        AtlasScene     currentScene = sceneData.scenes.Find(s => s.scene == sceneName);

        if (currentScene == null)
        {
            throw new Exception("No Scene data found for scene: " + sceneName);
        }
        return(currentScene);
    }