private void BuildMenuActions()
        {
            EditorGUI.BeginDisabledGroup(menus.Count <= 0 || layers.Count <= 0);
            GUILayout.Label("Actions", EditorStyles.boldLabel);
            //Actions
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Toggle(cursorState == CursorState.Remove, initialIcons[1], "Button"))
            {
                if (cursorState != CursorState.Remove)
                {
                    cursorState = CursorState.Remove;
                    objMenu     = null;
                    DeactivateMenus();
                }
            }

            if (GUILayout.Toggle(cursorState == CursorState.Drag, initialIcons[0], "Button"))
            {
                if (cursorState != CursorState.Drag)
                {
                    cursorState = CursorState.Drag;
                    objMenu     = null;
                    DeactivateMenus();
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUI.EndDisabledGroup();
        }
        public void LoadData()
        {
            GameObject[] layers, boundings;
            string       serializedMenus;

            string[]          stringMenus;
            EditorObjectsMenu obj;
            Layer             newLayer;
            Vector2           eleGridPos;
            GameObject        child;

            if (selectedObjects == null)
            {
                selectedObjects = new List <EditorObject>();
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-GridSize"))
            {
                gridSize = EditorPrefs.GetInt(PlayerSettings.productName + "-GridSize");
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-ShowGrid"))
            {
                showGrid = EditorPrefs.GetBool(PlayerSettings.productName + "-ShowGrid");
            }

            //Deserialize layers
            layers = GameObject.FindGameObjectsWithTag(Layer.LAYER_TAG);
            //if (this.layers == null)
            this.layers = new List <Layer>();

            foreach (GameObject l in layers)
            {
                newLayer = new Layer(l.name, l);
                for (int i = 0; i < l.transform.childCount; i++)
                {
                    child      = l.transform.GetChild(i).gameObject;
                    eleGridPos = Helper.ConvertVectorToGrid(new Vector2(child.transform.position.x, -child.transform.position.y), gridSize / 100f, gridSize / 100f);
                    newLayer.AddSceneElement(new EditorObject(child, (int)eleGridPos.x, (int)eleGridPos.y, newLayer));
                }

                this.layers.Add(newLayer);
            }

            //Deserialize menus
            if (EditorPrefs.HasKey(PlayerSettings.productName + "-Menus"))
            {
                //if (menus == null)
                menus = new List <EditorObjectsMenu>();

                serializedMenus = EditorPrefs.GetString(PlayerSettings.productName + "-Menus");
                stringMenus     = serializedMenus.Split(';');
                foreach (string s in stringMenus)
                {
                    if (s != "")
                    {
                        obj = new EditorObjectsMenu();
                        obj.Deserialize(s);
                        obj.LoadPrefabs();
                        menus.Add(obj);
                    }
                }
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-CursorColor"))
            {
                cursorColor = FromStringToColor(EditorPrefs.GetString(PlayerSettings.productName + "-CursorColor"));
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-GridColor"))
            {
                gridColor = FromStringToColor(EditorPrefs.GetString(PlayerSettings.productName + "-GridColor"));
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-SelectColor"))
            {
                selectColor = FromStringToColor(EditorPrefs.GetString(PlayerSettings.productName + "-SelectColor"));
            }

            if (EditorPrefs.HasKey(PlayerSettings.productName + "-SnapState"))
            {
                snapState = (SnapState)System.Enum.Parse(typeof(SnapState), EditorPrefs.GetString(PlayerSettings.productName + "-SnapState"));
            }

            LoadInitialIcons();

            //Boundings
            //boundings = GameObject.Find(TILE_BOUNDING_CONTAINER_NAME);
            //foreach (GameObject o in boundings)
            //  o.GetComponent<TileBounding>().LinkAssociatedObjects();

            loaded = true;
        }
        private void BuildMenuObjects()
        {
            int curSel;
            List <EditorObjectsMenu> removedMenus;

            EditorGUI.BeginDisabledGroup(layers.Count <= 0);
            GUILayout.Label("GAME OBJECTS", EditorStyles.boldLabel);
            //Add menu button
            if (GUILayout.Button("Add Menu"))
            {
                menus.Add(new EditorObjectsMenu());
            }

            removedMenus = new List <EditorObjectsMenu>();

            //GUILayout.BeginVertical();
            gameobjectsScrollPos = GUILayout.BeginScrollView(gameobjectsScrollPos, false, true);
            //Menus
            foreach (EditorObjectsMenu m in menus)
            {
                //Title
                GUILayout.Label("Menu: " + m.folder, EditorStyles.boldLabel);
                //m.name = EditorGUILayout.TextField("Title", m.name);
                //Columns
                m.columns = EditorGUILayout.IntField("Columns", m.columns);
                //Folder's location
                EditorGUILayout.BeginHorizontal();
                m.folder = EditorGUILayout.TextField("Folder Name", m.folder);
                if (GUILayout.Button("Load"))
                {
                    m.LoadPrefabs();
                }
                EditorGUILayout.EndHorizontal();
                //Load elements
                if (m.tiles != null && m.tiles.Length > 0 && m.columns > 0)
                {
                    curSel = GUILayout.SelectionGrid(m.selGridInt, m.tiles, m.columns, GUILayout.Width(position.width - 20), GUILayout.Height(100));
                    if (curSel != m.selGridInt)
                    {
                        m.selGridInt = curSel;
                        objMenu      = m;
                        cursorState  = CursorState.Add;
                        DeactivateMenus();
                    }
                }

                //Remove menu
                if (GUILayout.Button("Remove"))
                {
                    removedMenus.Add(m);
                }
            }
            GUILayout.EndScrollView();
            EditorGUI.EndDisabledGroup();

            //Clean menus
            foreach (EditorObjectsMenu m in removedMenus)
            {
                menus.Remove(m);
            }
        }