public void LoadShapesJSON(JToken mapMetadata)
    {
        Debug.Log("Loading shapes");
        Debug.Log(mapMetadata is JObject);
        Debug.Log(mapMetadata["data"] is JObject);
        if (mapMetadata is JObject && mapMetadata["data"] is JObject)
        {
            NodeShapeList shapeList = mapMetadata["data"].ToObject <NodeShapeList>();
            if (shapeList.shapes == null)
            {
                Debug.Log("No shapes dropped");
                return;
            }

            foreach (NodeShape shape in shapeList.shapes)
            {
                Debug.Log(shape.info.type);
                this.shapeList.Add(shape);

                GameObject shapeObj = ShapeFromJSON(shape.id, shape.info);
                if (shape.info.type == TYPE_DEST.GetHashCode())
                {
                    numDest += 1;
                    shapeObj.transform.GetChild(1).gameObject.GetComponent <TextMeshPro>().text = shape.name;
                }
                this.shapeObjList.Add(shapeObj);
            }
        }
    }
    public JObject Shapes2JSON()
    {
        NodeShapeList shapeList = new NodeShapeList();

        shapeList.shapes = new NodeShape[this.shapeList.Count];
        for (int i = 0; i < this.shapeList.Count; i++)
        {
            Debug.Log(this.shapeList[i].info.type);
            shapeList.shapes[i] = this.shapeList[i];
        }

        return(JObject.FromObject(shapeList));
    }