/// <summary>
    /// Saves the scenes.
    /// </summary>
    void SaveScenes()
    {
        foreach (var layer in currentCollections)
        {
            foreach (var item in loadedScenes)
            {
                if (item.name.StartsWith(layer.prefixScene) && item.isLoaded)
                {
                    if (GameObject.Find(item.name) == null)
                    {
                        GameObject        split             = new GameObject(item.name);
                        SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                        sceneSplitManager.sceneName = split.name;

                        sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                        int posx;
                        int posy;
                        int posz;
                        Streamer.SceneNameToPos(layer, item.name, out posx, out posy, out posz);
                        posx *= layer.xSize;
                        posy *= layer.ySize;
                        posz *= layer.zSize;
                        sceneSplitManager.position = GetSplitPosition(new Vector3(posx, posy, posz), layer);
                        sceneSplitManager.color    = layer.color;
                        EditorSceneManager.MoveGameObjectToScene(split, item);
                    }
                }
            }
        }
        EditorSceneManager.SaveModifiedScenesIfUserWantsTo(loadedScenes.ToArray());
    }
Esempio n. 2
0
    /// <summary>
    /// Splits the scene into tiles.
    /// </summary>
    void SplitScene(SceneCollection layer)
    {
        warning = "";
        splits [layer.layerNumber] = new Dictionary <string, GameObject> ();


        layer.xLimitsx = int.MaxValue;
        layer.xLimitsy = int.MinValue;
        layer.yLimitsx = int.MaxValue;
        layer.yLimitsy = int.MinValue;
        layer.zLimitsx = int.MaxValue;
        layer.zLimitsy = int.MinValue;


        GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> ();

        FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]);

        ClearSceneGO(layer);

        foreach (var item in allObjects)
        {
            if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) ||
                item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null)
            {
                continue;
            }
            string itemId = GetID(item.transform.position, layer);

            GameObject split = null;
            if (!splits [layer.layerNumber].TryGetValue(itemId, out split))
            {
                split = new GameObject(layer.prefixScene + itemId);
                SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                sceneSplitManager.sceneName = split.name;

                sceneSplitManager.size     = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                sceneSplitManager.position = GetSplitPosition(item.transform.position, layer);
                sceneSplitManager.color    = layer.color;

                splits [layer.layerNumber].Add(itemId, split);

                Vector3 splitPosId = GetSplitPositionID(item.transform.position, layer);

                if (layer.xSplitIs)
                {
                    if (splitPosId.x < layer.xLimitsx)
                    {
                        layer.xLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.x > layer.xLimitsy)
                    {
                        layer.xLimitsy = (int)splitPosId.x;
                    }
                }
                else
                {
                    layer.xLimitsx = 0;
                    layer.xLimitsy = 0;
                }

                if (layer.ySplitIs)
                {
                    if (splitPosId.y < layer.yLimitsx)
                    {
                        layer.yLimitsx = (int)splitPosId.y;
                    }
                    if (splitPosId.y > layer.yLimitsy)
                    {
                        layer.yLimitsy = (int)splitPosId.y;
                    }
                }
                else
                {
                    layer.yLimitsx = 0;
                    layer.yLimitsy = 0;
                }

                if (layer.zSplitIs)
                {
                    if (splitPosId.z < layer.zLimitsx)
                    {
                        layer.zLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.z > layer.zLimitsy)
                    {
                        layer.zLimitsy = (int)splitPosId.z;
                    }
                }
                else
                {
                    layer.zLimitsx = 0;
                    layer.zLimitsy = 0;
                }
            }


            item.transform.SetParent(split.transform);
        }

        if (splits.Count == 0)
        {
            warning = "No objects to split. Check GameObject or Scene Prefix.";
        }
    }
    /// <summary>
    /// Splits the scene into tiles.
    /// </summary>
    void SplitScene(SceneCollection layer)
    {
        warning = "";
        splits [layer.layerNumber] = new Dictionary <string, GameObject> ();



        GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> ();

        FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]);

        ClearSceneGO(layer);


        foreach (var item in allObjects)
        {
            if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) ||
                item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null)
            {
                continue;
            }

            string splitName = layer.prefixScene + GetID(item.transform.position, layer);

            UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(splitName);             //EditorSceneManager.NewScene (NewSceneSetup.EmptyScene, NewSceneMode.Additive);



            if (scene.name == null)
            {
                string splitSceneName = splitName + ".unity";
                string sceneName      = layer.path + splitSceneName;

                bool contains = false;

                foreach (var nameSplit in layer.names)
                {
                    if (nameSplit == splitSceneName)
                    {
                        contains = true;
                        break;
                    }
                }

                if (!contains)
                {
                    List <string> names = new List <string> ();
                    names.AddRange(layer.names);
                    names.Add(splitSceneName);
                    layer.names = names.ToArray();

                    scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive);

                    EditorSceneManager.SaveScene(scene, sceneName);
                    loadedScenes.Add(scene);
                }
                else
                {
                    scene = EditorSceneManager.OpenScene(sceneName, OpenSceneMode.Additive);
                    loadedScenes.Add(scene);
                }
            }
        }

        allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> ();

        FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]);

        ClearSceneGO(layer);

        foreach (var item in allObjects)
        {
            if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) ||
                item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null)
            {
                continue;
            }
            string itemId = GetID(item.transform.position, layer);

            GameObject split = null;
            if (!splits [layer.layerNumber].TryGetValue(itemId, out split))
            {
                split = new GameObject(layer.prefixScene + itemId);
                SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                sceneSplitManager.sceneName = split.name;

                sceneSplitManager.size     = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                sceneSplitManager.position = GetSplitPosition(item.transform.position, layer);
                sceneSplitManager.color    = layer.color;

                splits [layer.layerNumber].Add(itemId, split);

                Vector3 splitPosId = GetSplitPositionID(item.transform.position, layer);

                if (layer.xSplitIs)
                {
                    if (splitPosId.x < layer.xLimitsx)
                    {
                        layer.xLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.x > layer.xLimitsy)
                    {
                        layer.xLimitsy = (int)splitPosId.x;
                    }
                }
                else
                {
                    layer.xLimitsx = 0;
                    layer.xLimitsy = 0;
                }

                if (layer.ySplitIs)
                {
                    if (splitPosId.y < layer.yLimitsx)
                    {
                        layer.yLimitsx = (int)splitPosId.y;
                    }
                    if (splitPosId.y > layer.yLimitsy)
                    {
                        layer.yLimitsy = (int)splitPosId.y;
                    }
                }
                else
                {
                    layer.yLimitsx = 0;
                    layer.yLimitsy = 0;
                }

                if (layer.zSplitIs)
                {
                    if (splitPosId.z < layer.zLimitsx)
                    {
                        layer.zLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.z > layer.zLimitsy)
                    {
                        layer.zLimitsy = (int)splitPosId.z;
                    }
                }
                else
                {
                    layer.zLimitsx = 0;
                    layer.zLimitsy = 0;
                }

                UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(sceneSplitManager.sceneName);



                EditorSceneManager.MoveGameObjectToScene(split, scene);
            }



            item.transform.SetParent(split.transform);
        }

        if (splits.Count == 0)
        {
            warning = "No objects to split. Check GameObject or Scene Prefix.";
        }

        foreach (var item in loadedScenes)
        {
            if (!string.IsNullOrEmpty(item.name) && GameObject.Find(item.name) == null)
            {
                GameObject        split             = new GameObject(item.name);
                SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                sceneSplitManager.sceneName = split.name;

                sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                int posx;
                int posy;
                int posz;

                Streamer.SceneNameToPos(layer, item.name, out posx, out posy, out posz);

                posx *= layer.xSize;
                posy *= layer.ySize;
                posz *= layer.zSize;
                sceneSplitManager.position = GetSplitPosition(new Vector3(posx, posy, posz), layer);
                sceneSplitManager.color    = layer.color;

                splits [layer.layerNumber].Add(split.name.Replace(layer.prefixScene, ""), split);
                EditorSceneManager.MoveGameObjectToScene(split, item);
            }
        }
    }