Esempio n. 1
0
    /// <summary>
    /// Raises the GU event.
    /// </summary>
    void OnGUI()
    {
        GUI.skin = null;

        if (EditorApplication.isPlaying == false)
        {
            GUILayout.Space(5);

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUI.skin = myState == MyStates.Pointer ? null : tilesGuiSkin;
            if (GUILayout.Button(contents.pointer) == true)
            {
                myState = MyStates.Pointer;
                UpdateTemp();
                tileIdx        = -1;
                environmentIdx = -1;
            }
            GUI.skin = null;
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(20);

            if (GUILayout.Button("Choose background") == true)
            {
                ShowPicker <Sprite>(PickerState.Map, mapSpriteLabel);
            }

            GUI.skin = tilesGuiSkin;

            GUILayout.Space(5);
            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("------------Environment------------");
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("In game sorting");
            inGameSorting = EditorGUILayout.Toggle(inGameSorting);
            EditorGUILayout.EndHorizontal();

            environmentScrollPos = EditorGUILayout.BeginScrollView(environmentScrollPos, GUILayout.MaxHeight(120));
            int environmentNewIdx = GUILayout.SelectionGrid(environmentIdx, environmentTextures, 4);
            if (environmentNewIdx != environmentIdx)
            {
                environmentIdx = environmentNewIdx;
                if (environmentIdx >= 0)
                {
                    myState = MyStates.EnvironmentPlacement;
                    UpdateTemp();
                    tileIdx = -1;
                    SetEnvironment(environmentPrefabs[environmentIdx]);
                }
            }
            EditorGUILayout.EndScrollView();

            GUILayout.Space(5);
            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("---------------Tiles---------------");
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Snap step");
            snapStep = EditorGUILayout.FloatField(snapStep);
            EditorGUILayout.EndHorizontal();

            tilesScrollPos = EditorGUILayout.BeginScrollView(tilesScrollPos, GUILayout.MaxHeight(140));
            int tileNewIdx = GUILayout.SelectionGrid(tileIdx, tileTextures, 4);
            if (tileNewIdx != tileIdx)
            {
                tileIdx = tileNewIdx;
                if (tileIdx >= 0)
                {
                    myState = MyStates.TilePlacement;
                    UpdateTemp();
                    environmentIdx = -1;
                    SetTile(tilePrefabs[tileIdx]);
                }
            }
            EditorGUILayout.EndScrollView();

            GUI.skin = null;

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button(contents.rotateLeft) == true)
            {
                RotateTile(90f);
            }
            GUILayout.FlexibleSpace();
            if (GUILayout.Button(contents.rotateRight) == true)
            {
                RotateTile(-90f);
            }
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            if (myState == MyStates.Pointer)
            {
                GUILayout.Space(20);
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Map name");
                mapName = EditorGUILayout.TextField(mapName);
                EditorGUILayout.EndHorizontal();

                if (GUILayout.Button("Save map") == true)
                {
                    if (mapFolderInspector != null)
                    {
                        if (mapFolderInspector.map != null)
                        {
                            mapFolderInspector.map.gameObject.name = mapName;
                            GameObject newMapPrefab = PrefabUtility.CreatePrefab("Assets/TD2D/Prefabs/Map/LevelMaps/" + mapName + ".prefab", mapFolderInspector.map.gameObject, ReplacePrefabOptions.ConnectToPrefab);
                            AssetDatabase.Refresh();
                            Selection.activeObject = newMapPrefab;
                            EditorUtility.FocusProjectWindow();
                        }
                    }
                }
            }

            // New object selected in picker window
            if (Event.current.commandName == "ObjectSelectorUpdated" && EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow)
            {
                pickedObject = EditorGUIUtility.GetObjectPickerObject();
            }
            // Picker window closed
            if (Event.current.commandName == "ObjectSelectorClosed" && EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow)
            {
                switch (pickerState)
                {
                case PickerState.Map:
                    if (pickedObject != null && pickedObject is Sprite && mapFolderInspector != null)
                    {
                        mapFolderInspector.ChangeMapSprite(pickedObject as Sprite);
                        EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
                    }
                    break;
                }

                pickedObject = null;
                pickerState  = PickerState.None;
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Editor disabled in play mode", MessageType.Info);
        }
    }