Ejemplo n.º 1
0
    public void SaveMap(GameObject map)
    {
        // create the entry containing the data about the whole map
        MindMapData mindMapData = new MindMapData();

        // initialize the fields of the new entry
        mindMapData.mapName        = map.GetComponent <MindMap>().mapName;
        mindMapData.sizeMultiplier = map.GetComponent <MindMap>().sizeMultiplier;
        mindMapData.isPreview      = map.GetComponent <MindMap>().isPreview;
        mindMapData.mode           = map.GetComponent <MindMap>().mode;

        // creathe the list of the items that the map contains
        mindMapData.items = new List <ItemData>();

        // going through each item
        for (int i = 0; i < map.transform.childCount; i++)
        {
            // get the item
            GameObject item = map.transform.GetChild(i).gameObject;

            // create the new entry about the current item
            ItemData data = new ItemData();

            // collecting data
            data.xPosition = map.transform.InverseTransformPoint(item.transform.position).x;
            data.yPosition = map.transform.InverseTransformPoint(item.transform.position).y;
            data.zPosition = map.transform.InverseTransformPoint(item.transform.position).z;


            switch (item.tag)
            {
            case "CentralTopic":
                data.itemType = ItemType.CT;
                break;

            case "MainTopic":
                data.itemType = ItemType.MT;
                break;

            case "Subtopic":
                data.itemType = ItemType.Subtopic;
                break;

            case "FloatingTopic":
                data.itemType = ItemType.FT;
                break;

            case "Callout":
                data.itemType = ItemType.Callout;
                break;

            case "Relationship":
                data.itemType = ItemType.Relationship;
                break;
            }

            // collect other data depending on the type of the item
            if (item.GetComponent <Node>())
            {
                data.text      = item.GetComponent <Node>().text;
                data.size      = item.GetComponent <Node>().size;
                data.minSize   = item.GetComponent <Node>().minSize;
                data.maxSize   = item.GetComponent <Node>().maxSize;
                data.nodeColor = item.GetComponent <Node>().nodeColor;
                data.shapeType = item.GetComponent <Node>().shapeType;
                data.level     = item.GetComponent <Node>().level;

                if (item.GetComponent <Node>().relationship != null)
                {
                    data.relationshipIndex = item.GetComponent <Node>().relationship.transform.GetSiblingIndex();
                }

                data.nextNodesIndices = new List <int>();
                foreach (var nextNode in item.GetComponent <Node>().nextNodes)
                {
                    if (nextNode != null)
                    {
                        data.nextNodesIndices.Add(nextNode.transform.GetSiblingIndex());
                    }
                }
            }
            else if (item.GetComponent <Callout>())
            {
                data.text    = item.GetComponent <Callout>().text;
                data.size    = item.GetComponent <Callout>().size;
                data.minSize = item.GetComponent <Callout>().minSize;
                data.maxSize = item.GetComponent <Callout>().maxSize;
                data.level   = item.GetComponent <Callout>().level;
            }
            else if (item.GetComponent <Relationship>())
            {
                data.object1NumberAsChild = item.GetComponent <Relationship>().object1.transform.GetSiblingIndex();
                data.object2NumberAsChild = item.GetComponent <Relationship>().object2.transform.GetSiblingIndex();
            }

            // adding the collected data to the item entry
            mindMapData.items.Add(data);
        }

        // prepare for saving to the file
        FileSave fileSave = new FileSave(FileFormat.Json);

        // here we prevent saving renamed file as a new one
        if (File.Exists(Application.persistentDataPath + "/" + mindMapData.mapName + ".json"))
        {
            // the file with the map name exists then just rewrite it
            fileSave.WriteToFile(Application.persistentDataPath + "/" + mindMapData.mapName + ".json", mindMapData);
        }
        else
        {
            // if the file with the map name does not exists but there exists the file with the old name of the map
            // then rewrite that file and rename it
            if (map.GetComponent <MindMap>().prevName != "" &&
                File.Exists(Application.persistentDataPath + "/" + map.GetComponent <MindMap>().prevName + ".json"))
            {
                fileSave.WriteToFile(Application.persistentDataPath + "/" + map.GetComponent <MindMap>().prevName + ".json", mindMapData);
                File.Move(Application.persistentDataPath + "/" + map.GetComponent <MindMap>().prevName + ".json",
                          Application.persistentDataPath + "/" + mindMapData.mapName + ".json");
            }
            // if the file with the map does not exists at all then create the new file and write there
            else
            {
                fileSave.WriteToFile(Application.persistentDataPath + "/" + mindMapData.mapName + ".json", mindMapData);
            }
        }

        Debug.Log("MAP SAVED");
    }
Ejemplo n.º 2
0
    public GameObject LoadMap(string mapName)
    {
        // get the entry conaining the data about the whole map
        FileSave    fileSave    = new FileSave(FileFormat.Json);
        MindMapData mindMapData = fileSave.ReadFromFile <MindMapData>(Application.persistentDataPath + "/" + mapName + ".json");

        // instantiate the new empty map
        GameObject newMindMap = Instantiate((GameObject)Resources.Load("Prefabs/EmptyMindMap", typeof(GameObject)));

        // retrieve the info about the map from the entry
        newMindMap.GetComponent <MindMap>().mapName        = mindMapData.mapName;
        newMindMap.GetComponent <MindMap>().sizeMultiplier = mindMapData.sizeMultiplier;
        newMindMap.GetComponent <MindMap>().isPreview      = mindMapData.isPreview;
        newMindMap.GetComponent <MindMap>().mode           = mindMapData.mode;

        /*if (GameObject.FindObjectOfType<PresetSettings>().presetMapSize == -1)
         * {
         *  GameObject.FindObjectOfType<PresetSettings>().presetMapSize = mindMapData.sizeMultiplier;
         * }*/

        var CTPosition = Vector3.zero;

        // going through each item that is in the map we set up their parameters
        foreach (ItemData data in mindMapData.items)
        {
            GameObject item;

            if (data.itemType == ItemType.CT)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/CT", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                CTPosition = item.transform.position;

                Node itemNodeComponent = item.GetComponent <Node>();

                itemNodeComponent.text      = data.text;
                itemNodeComponent.size      = data.size;
                itemNodeComponent.minSize   = data.minSize;
                itemNodeComponent.maxSize   = data.maxSize;
                itemNodeComponent.nodeColor = data.nodeColor;
                itemNodeComponent.shapeType = data.shapeType;
                itemNodeComponent.level     = data.level;
            }
            else if (data.itemType == ItemType.MT)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/MT", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                item.transform.position = new Vector3(data.xPosition, data.yPosition, data.zPosition);

                Node itemNodeComponent = item.GetComponent <Node>();

                itemNodeComponent.text      = data.text;
                itemNodeComponent.size      = data.size;
                itemNodeComponent.minSize   = data.minSize;
                itemNodeComponent.maxSize   = data.maxSize;
                itemNodeComponent.nodeColor = data.nodeColor;
                itemNodeComponent.shapeType = data.shapeType;
                itemNodeComponent.level     = data.level;
            }
            else if (data.itemType == ItemType.Subtopic)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/Subtopic", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                item.transform.position = new Vector3(data.xPosition, data.yPosition, data.zPosition);

                Node itemNodeComponent = item.GetComponent <Node>();

                itemNodeComponent.text      = data.text;
                itemNodeComponent.size      = data.size;
                itemNodeComponent.minSize   = data.minSize;
                itemNodeComponent.maxSize   = data.maxSize;
                itemNodeComponent.nodeColor = data.nodeColor;
                itemNodeComponent.shapeType = data.shapeType;
                itemNodeComponent.level     = data.level;
            }
            else if (data.itemType == ItemType.FT)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/FT", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                item.transform.position = new Vector3(data.xPosition, data.yPosition, data.zPosition);

                Node itemNodeComponent = item.GetComponent <Node>();

                itemNodeComponent.text      = data.text;
                itemNodeComponent.size      = data.size;
                itemNodeComponent.minSize   = data.minSize;
                itemNodeComponent.maxSize   = data.maxSize;
                itemNodeComponent.nodeColor = data.nodeColor;
                itemNodeComponent.shapeType = data.shapeType;
                itemNodeComponent.level     = data.level;
            }
            else if (data.itemType == ItemType.Callout)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/Callout", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                item.transform.position = new Vector3(data.xPosition, data.yPosition, data.zPosition);

                Callout itemCalloutComponent = item.GetComponent <Callout>();

                itemCalloutComponent.text    = data.text;
                itemCalloutComponent.size    = data.size;
                itemCalloutComponent.minSize = data.minSize;
                itemCalloutComponent.maxSize = data.maxSize;
                itemCalloutComponent.level   = data.level;
            }
            else if (data.itemType == ItemType.Relationship)
            {
                item = Instantiate((GameObject)Resources.Load("Prefabs/Items/Relationship", typeof(GameObject)));
                item.transform.SetParent(newMindMap.transform);

                Relationship itemRelationshipComponent = item.GetComponent <Relationship>();

                // here we obtain the objects that the relationship connects
                itemRelationshipComponent.object1 = newMindMap.transform.GetChild(data.object1NumberAsChild).gameObject;
                itemRelationshipComponent.object2 = newMindMap.transform.GetChild(data.object2NumberAsChild).gameObject;
            }
        }

        int index = 0;

        foreach (ItemData data in mindMapData.items)
        {
            Node item = newMindMap.transform.GetChild(index).gameObject.GetComponent <Node>();
            if (data.itemType != ItemType.Relationship && data.itemType != ItemType.Callout)
            {
                item.relationship = newMindMap.transform.GetChild(data.relationshipIndex).gameObject;
                item.nextNodes    = new List <GameObject>();
                foreach (var i in data.nextNodesIndices)
                {
                    item.nextNodes.Add(newMindMap.transform.GetChild(i).gameObject);
                }
            }

            index++;
        }

        return(newMindMap);
    }