public override void OnInspectorGUI() { GUILayout.Space(10); EditorGUILayout.HelpBox("This tile randomly chooses a sprite from the list below to render. It is based on position and the seed.", MessageType.Info); tile.globalSeed = EditorGUILayout.IntField("Global Seed:", tile.globalSeed); GUILayout.Space(10); GUILayout.BeginHorizontal(); GUILayout.Label("Sprites:", MyStyles.leftBoldLabel); GUILayout.FlexibleSpace(); GUI.color = new Color(0.5f, 1, 0.5f); if (GUILayout.Button("Add New")) { tile.sprites.Add(tile.sprites[tile.sprites.Count - 1]); } GUI.color = Color.white; GUILayout.EndHorizontal(); GUILayout.Space(10); float width = EditorGUIUtility.labelWidth / 3; for (int i = 0; i < tile.sprites.Count; i++) { GUILayout.BeginHorizontal(); if (!tile.IsValid) { GUI.color = new Color(1, 0.5f, 0.5f); } if (GUILayout.Button(GUIContent.none, MyStyles.centerWhiteBoldLabel, GUILayout.Width(width), GUILayout.Height(width))) { EditorGUIUtility.ShowObjectPicker <Sprite>(tile.sprites[i], false, "", i); } Rect r = GUILayoutUtility.GetLastRect(); Texture2D texture = tile.IsValid ? tile.sprites[i].ToTexture2D() : new Texture2D(16, 16); GUI.DrawTexture(r, texture); GUI.color = Color.white; GUIStyle labelStyle = new GUIStyle(MyStyles.centerWhiteBoldLabel); if (!tile.sprites[i]) { GUI.Label(r, "Tile not valid!\nSprite cannot be left empty", labelStyle); } else if (!tile.IsValid) { GUI.Label(r, "Tile not valid!\nEnable Read/Write in import settings", labelStyle); } GUILayout.FlexibleSpace(); GUI.color = new Color(1, 0.5f, 0.5f); if (GUILayout.Button("Delete")) { tile.sprites.RemoveAt(i); } GUI.color = Color.white; GUILayout.EndHorizontal(); MyGUILayout.Splitter(); } /* * if (!tile.sprite) * EditorGUILayout.HelpBox ("This tile is not valid, main sprite (15) cannot be left empty.", MessageType.Error); * else if (!tile.IsValid) * EditorGUILayout.HelpBox ("This tile is not valid, please check that Read/Write is enabled in the main sprite (15)'s import settings", MessageType.Error); */ if (Event.current.commandName == "ObjectSelectorUpdated") { int index = EditorGUIUtility.GetObjectPickerControlID(); tile.sprites[index] = EditorGUIUtility.GetObjectPickerObject() as Sprite; } if (GUI.changed) { EditorUtility.SetDirty(this); } }
private void ToolbarWindow(int id) { string text = "None"; Rect secondaryTileRect = new Rect(tileMap.toolbarWindowPosition.width - 5 - tileMap.toolbarWindowPosition.width * 0.4f, 25 + tileMap.toolbarWindowPosition.width * 0.4f, tileMap.toolbarWindowPosition.width * 0.4f, tileMap.toolbarWindowPosition.width * 0.4f); tileMap.secondaryTilePickerToggle = GUI.Toggle(secondaryTileRect, tileMap.secondaryTilePickerToggle, GUIContent.none, "Label"); GUI.DrawTexture(secondaryTileRect, new Texture2D(16, 16)); GUI.contentColor = Color.black; if (tileMap.secondaryTile) { GUI.DrawTexture(secondaryTileRect, tileMap.secondaryTile.GetIcon()); GUI.contentColor = Color.white; text = tileMap.secondaryTile.Name; } GUI.Label(secondaryTileRect, text, MyStyles.centerWhiteMiniLabel); Rect primaryTileRect = new Rect(5, 25, tileMap.toolbarWindowPosition.width * 0.6f, tileMap.toolbarWindowPosition.width * 0.6f); tileMap.primaryTilePickerToggle = GUI.Toggle(primaryTileRect, tileMap.primaryTilePickerToggle, GUIContent.none, "Label"); text = "None"; GUI.DrawTexture(primaryTileRect, new Texture2D(16, 16)); GUI.contentColor = Color.black; if (tileMap.primaryTile) { GUI.DrawTexture(primaryTileRect, tileMap.primaryTile.GetIcon()); GUI.contentColor = Color.white; text = tileMap.primaryTile.Name; } GUI.Label(primaryTileRect, text, MyStyles.centerWhiteBoldLabel); GUI.contentColor = Color.white; float tileHeight = 10 + primaryTileRect.height + 0.5f * secondaryTileRect.height; GUILayout.Space(tileHeight); GUILayout.BeginHorizontal(); if (GUILayout.Button("Swap [X]")) { Swap <ScriptableTile> (ref tileMap.primaryTile, ref tileMap.secondaryTile); } GUI.color = new Color(1, 0.5f, 0.5f); if (GUILayout.Button("Clear")) { tileMap.primaryTile = null; tileMap.secondaryTile = null; } GUI.color = Color.white; GUILayout.EndHorizontal(); MyGUILayout.Splitter(); GUILayout.BeginHorizontal(); GUI.enabled = tileMap.CanUndo; if (GUILayout.Button("Undo [Z]")) { tileMap.Undo(); SetTileMapDirty(); } GUI.enabled = tileMap.CanRedo; if (GUILayout.Button("Redo [R]")) { tileMap.Redo(); SetTileMapDirty(); } GUI.enabled = true; GUILayout.EndHorizontal(); MyGUILayout.Splitter(); GUILayout.Label("Tools", MyStyles.leftBoldLabel); EditorGUILayout.HelpBox("[RMB] to toggle tool", MessageType.Info, true); for (int i = 0; i < tileMap.scriptableToolCache.Count; i++) { bool selected = (i == tileMap.selectedScriptableTool); EditorGUI.BeginChangeCheck(); string labelName = tileMap.scriptableToolCache [i].Shortcut != KeyCode.None ? string.Format("{1} [{0}]", tileMap.scriptableToolCache [i].Shortcut.ToString(), tileMap.scriptableToolCache [i].Name) : tileMap.scriptableToolCache [i].Name; GUIContent content = new GUIContent(labelName, tileMap.scriptableToolCache [i].Description); GUILayout.Toggle(selected, content, EditorStyles.radioButton, GUILayout.Width(100)); if (EditorGUI.EndChangeCheck()) { tileMap.lastSelectedScriptableTool = tileMap.selectedScriptableTool; tileMap.selectedScriptableTool = i; if (selected) { tileMap.selectedScriptableTool = -1; } } } if (tileMap.selectedScriptableTool == -1) { EditorGUILayout.HelpBox("No Tool selected, select one from above.", MessageType.Warning, true); } if (tileMap.selectedScriptableTool >= 0 && tileMap.selectedScriptableTool < tileMap.scriptableToolCache.Count) { const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static; FieldInfo [] fields = tileMap.scriptableToolCache [tileMap.selectedScriptableTool].GetType().GetFields(flags); if (fields.Length > 0) { GUILayout.Label("Settings", MyStyles.leftBoldLabel, GUILayout.Width(100)); for (int i = 0; i < fields.Length; i++) { FieldInfo field = fields [i]; Type type = field.FieldType; string fieldName = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(field.Name); GUILayout.BeginHorizontal(GUILayout.Width(100)); GUILayout.Label(fieldName, EditorStyles.miniLabel); if (type == typeof(bool)) { bool v = (bool)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); bool nv = EditorGUILayout.Toggle(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(float)) { float v = (float)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); float nv = EditorGUILayout.FloatField(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(int)) { int v = (int)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); int nv = EditorGUILayout.IntField(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Enum)) { int v = (int)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); int nv = EditorGUILayout.IntField(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Vector2)) { Vector2 v = (Vector2)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); Vector2 nv = Vector2.zero; nv.x = EditorGUILayout.FloatField(v.x); nv.y = EditorGUILayout.FloatField(v.y); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Vector3)) { Vector3 v = (Vector3)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); Vector3 nv = Vector3.zero; nv.x = EditorGUILayout.FloatField(v.x); nv.y = EditorGUILayout.FloatField(v.y); nv.z = EditorGUILayout.FloatField(v.z); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Color)) { Color v = (Color)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); Color nv = EditorGUILayout.ColorField(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(AnimationCurve)) { AnimationCurve v = (AnimationCurve)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); AnimationCurve nv = EditorGUILayout.CurveField(v); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(GameObject)) { GameObject v = (GameObject)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); GameObject nv = EditorGUILayout.ObjectField(v, typeof(GameObject), false) as GameObject; field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Texture2D)) { Texture2D v = (Texture2D)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); Texture2D nv = EditorGUILayout.ObjectField(v, typeof(Texture2D), false) as Texture2D; field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(Sprite)) { Sprite v = (Sprite)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); Sprite nv = EditorGUILayout.ObjectField(v, typeof(Sprite), false) as Sprite; field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type == typeof(UnityEngine.Object)) { UnityEngine.Object v = (UnityEngine.Object)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); UnityEngine.Object nv = EditorGUILayout.ObjectField(v, typeof(UnityEngine.Object), false) as UnityEngine.Object; field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else if (type.IsEnum) { int v = (int)field.GetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool]); int nv = EditorGUILayout.Popup(v, Enum.GetNames(type)); field.SetValue(tileMap.scriptableToolCache [tileMap.selectedScriptableTool], nv); } else { Debug.LogErrorFormat("Exposing public variable type '{0}' is currently not supported by Tooles \n Feel free to add support for it though!", type.Name); } GUILayout.EndHorizontal(); } } else { EditorGUILayout.HelpBox("Tool has no public variables to edit.", MessageType.Info, true); } } GUI.DragWindow(); }