MapEditor.OnInspectorGUI C# (CSharp) Method

OnInspectorGUI() public method

public OnInspectorGUI ( ) : void
return void
    public override void OnInspectorGUI()
    {
        Map m = (Map)target;
        showDimensions = EditorGUILayout.Foldout(showDimensions, "Map Dimensions");
        if(showDimensions) {
        //		EditorGUI.indentLevel++;
            GUILayout.BeginHorizontal();
            GUILayout.Label("Width", GUILayout.Width(78));
            float nextXSz = EditorGUILayout.FloatField(m.size.x, GUILayout.Width(32));
            GUILayout.Label("Height", GUILayout.Width(78));
            float nextYSz = EditorGUILayout.FloatField(m.size.y, GUILayout.Width(32));
            Vector2 nextSz = new Vector2(nextXSz, nextYSz);
            if(nextSz != m.size) {
                RegisterUndo("Map Size Change");
                m.size = nextSz;
            }
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.Label("Side Length", GUILayout.Width(78));
            float nextLength = EditorGUILayout.FloatField(m.sideLength, GUILayout.Width(32));
            if(nextLength != m.sideLength) {
                RegisterUndo("Map Side Length Change");
                m.sideLength = nextLength;
            }
            GUILayout.Label("Tile Height", GUILayout.Width(78));
            float nextHeight = EditorGUILayout.FloatField(m.tileHeight, GUILayout.Width(32));
            if(nextHeight != m.tileHeight) {
                RegisterUndo("Map Side Height Change");
                m.tileHeight = nextHeight;
            }
            GUILayout.EndHorizontal();
        //		EditorGUI.indentLevel--;
        }

        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Edit Z", GUILayout.Width(78));
        int nextZ = EditorGUILayout.IntSlider(editZ, 0, 20);
        if(nextZ != editZ) {
        //			RegisterUndo(target, "Map Height Selection");
            editZ = nextZ;
        }
        GUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        EditorGUILayout.BeginHorizontal();
        GUIContent[] toolbarOptions = new GUIContent[3];
        toolbarOptions[(int)EditMode.AddRemove] = new GUIContent("Add/Remove");
        toolbarOptions[(int)EditMode.Reshape] = new GUIContent("Reshape");
        toolbarOptions[(int)EditMode.Paint] = new GUIContent("Paint");
        EditMode nextMode = (EditMode)GUILayout.Toolbar((int)editMode, toolbarOptions);
        EditorGUILayout.EndHorizontal();
        if(nextMode != editMode) {
            editMode = nextMode;
            editModeChanged = true;
        }
        if(editMode == EditMode.AddRemove || editMode == EditMode.Reshape) {
            //show inset/offset settings for current stamp
            GUILayout.BeginHorizontal();
            GUILayout.Label("Invisible", GUILayout.Width(78));
            makeInvisibleTiles = EditorGUILayout.Toggle(makeInvisibleTiles);
            GUILayout.EndHorizontal();
            GUILayout.Label("Side Insets");
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("-X", GUILayout.Width(32));
            sideInsets[(int)Neighbors.FrontLeftIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.FrontLeftIdx  ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BackRightIdx ]);
            GUILayout.Label("+X", GUILayout.Width(32));
            sideInsets[(int)Neighbors.BackRightIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BackRightIdx  ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.FrontLeftIdx ]);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("-Y", GUILayout.Width(32));
            sideInsets[(int)Neighbors.FrontRightIdx] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.FrontRightIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BackLeftIdx  ]);
            GUILayout.Label("+Y", GUILayout.Width(32));
            sideInsets[(int)Neighbors.BackLeftIdx  ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BackLeftIdx   ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.FrontRightIdx]);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("-Z", GUILayout.Width(32));
            sideInsets[(int)Neighbors.BottomIdx    ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BottomIdx     ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.TopIdx       ]);
            GUILayout.Label("+Z", GUILayout.Width(32));
            sideInsets[(int)Neighbors.TopIdx       ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.TopIdx        ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BottomIdx    ]);
            EditorGUILayout.EndHorizontal();
            // GUILayout.Label("Corner Insets (not yet implemented)");
            // EditorGUILayout.BeginHorizontal();
            // GUILayout.Label(" 0", GUILayout.Width(32));
            // cornerInsets[(int)Corners.Front] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Front], GUILayout.Width(32)), 0, 1.0f);
            // GUILayout.Label("+X", GUILayout.Width(32));
            // cornerInsets[(int)Corners.Right] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Right], GUILayout.Width(32)), 0, 1.0f);
            // EditorGUILayout.EndHorizontal();
            // EditorGUILayout.BeginHorizontal();
            // GUILayout.Label("+Y", GUILayout.Width(32));
            // cornerInsets[(int)Corners.Left ] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Left ], GUILayout.Width(32)), 0, 1.0f);
            // GUILayout.Label("+XY", GUILayout.Width(32));
            // cornerInsets[(int)Corners.Back ] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Back ], GUILayout.Width(32)), 0, 1.0f);
            // EditorGUILayout.EndHorizontal();
        } else if(editMode == EditMode.Paint) {
            EditorGUILayout.Separator();
            specScrollPos = EditorGUILayout.BeginScrollView(specScrollPos, true, false, GUILayout.Height(80));
            EditorGUILayout.BeginHorizontal(GUILayout.Height(64));
            //show list of texture specs controls
            //a texture spec is a rectangular Texture2D with some metadata
            //only for now, there's no metadata.
            //this metadata gets stored in the map object, which composes the
            //textures into an atlas. uvs are mapped from this atlas.
            //changes to the texture spec list force recreation of the mesh.
            //texture spec info for each face is stored as part of the MapTile class.
            Texture2D[] textures = new Texture2D[m.TileSpecCount+1];
            if(specPlaceholderTexture == null) {
                specPlaceholderTexture = EditorGUIUtility.LoadRequired("SpecPlaceholder.png") as Texture2D;
            }
            for(int i = 0; i < m.TileSpecCount; i++) {
                Texture2D specTex = m.TileSpecAt(i).texture;
                if(specTex != null) {
                    textures[i] = specTex;
                } else {
                    textures[i] = specPlaceholderTexture;
                }
            }
            textures[m.TileSpecCount] = specPlaceholderTexture;
            var names = new Dictionary<string, int>();
            for(int i = 0; i < textures.Length; i++) {
                Texture2D tex = textures[i];
                GUIUpdateTexture(tex, i, names);
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndScrollView();
            string n = GUI.GetNameOfFocusedControl();
            if(names.ContainsKey(n)) {
                if(names[n] < m.TileSpecCount) {
                    specSelectedSpec = names[n];
                }
            }
            EditorGUI.indentLevel++;
            //now, show the parameters for this spec
            bool oldEnabled = GUI.enabled;
            GUI.enabled = specSelectedSpec < m.TileSpecCount;

            if(GUILayout.Button("Delete Tile")) {
                RegisterUndo("Delete Tile Spec");
                m.RemoveTileSpecAt(specSelectedSpec);
                while(specSelectedSpec >= m.TileSpecCount) {
                    specSelectedSpec--;
                    if(specSelectedSpec < 0) { specSelectedSpec = 0; break; }
                }
            }
            GUI.enabled = oldEnabled;
            EditorGUI.indentLevel--;
            EditorGUILayout.Separator();
        }

        if(GUI.changed) {
            EditorUtility.SetDirty(target);
        }
    }