public override void OnInspectorGUI() { if (_decorator == null) { return; } bool requestChanges = false; EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Group", GUILayout.Width(120)); int oldGroup = _decorator.GUIGroupIndex; _decorator.GUIGroupIndex = EditorGUILayout.Popup(_decorator.GUIGroupIndex, groupNames, GUILayout.MaxWidth(200)); if (_decorator.GUIGroupIndex != oldGroup || decoratorGroup == null) { decoratorGroup = _decorator.GetDecoratorGroup(_decorator.GUIGroupIndex, true); } if (GUILayout.Button("Clear")) { _decorator.ClearDecoratorGroup(_decorator.GUIGroupIndex); ReloadGroupNames(); ReloadCountryNames(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Enabled", GUILayout.Width(120)); decoratorGroup.active = EditorGUILayout.Toggle(decoratorGroup.active, GUILayout.Width(20)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); // country selector EditorGUILayout.BeginHorizontal(); GUILayout.Label("Country", GUILayout.Width(120)); if (lastCountryCount != _map.countries.Length) { ReloadCountryNames(); } int selection = EditorGUILayout.Popup(_decorator.GUICountryIndex, countryNames); if (selection != _decorator.GUICountryIndex) { _decorator.GUICountryName = ""; _decorator.GUICountryIndex = selection; FlyToCountry(); } bool prevc = _decorator.groupByContinent; GUILayout.Label("Grouped"); _decorator.groupByContinent = EditorGUILayout.Toggle(_decorator.groupByContinent, GUILayout.Width(20)); if (_decorator.groupByContinent != prevc) { ReloadCountryNames(); } EditorGUILayout.EndHorizontal(); // type of decoration if (_decorator.GUICountryName.Length > 0) { EditorGUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(120)); if (GUILayout.Button("Toggle Zoom")) { ToggleZoomState(); } if (GUILayout.Button("Fly To")) { FlyToCountry(); } EditorGUILayout.EndHorizontal(); CountryDecorator existingDecorator = _decorator.GetCountryDecorator(_decorator.GUIGroupIndex, _decorator.GUICountryName); if (existingDecorator != null) { decorator = existingDecorator; } else if (decorator == null || !decorator.countryName.Equals(_decorator.GUICountryName)) { decorator = new CountryDecorator(_decorator.GUICountryName); } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Hidden", GUILayout.Width(120)); bool prevHidden = decorator.hidden; decorator.hidden = EditorGUILayout.Toggle(decorator.hidden); if (prevHidden != decorator.hidden) { requestChanges = true; } EditorGUILayout.EndHorizontal(); if (!decorator.hidden) { EditorGUILayout.BeginHorizontal(); GUILayout.Label("Label Visible", GUILayout.Width(120)); bool prevLabelVisible = decorator.labelVisible; decorator.labelVisible = EditorGUILayout.Toggle(decorator.labelVisible); if (prevLabelVisible != decorator.labelVisible) { requestChanges = true; } EditorGUILayout.EndHorizontal(); if (decorator.labelVisible) { EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Text", GUILayout.Width(120)); string prevLabel = decorator.customLabel; decorator.customLabel = EditorGUILayout.TextField(decorator.customLabel); if (!prevLabel.Equals(decorator.customLabel)) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Font", GUILayout.Width(120)); Font prevFont = decorator.labelFontOverride; decorator.labelFontOverride = (Font)EditorGUILayout.ObjectField(decorator.labelFontOverride, typeof(Font), false); if (decorator.labelFontOverride != prevFont) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Custom Color", GUILayout.Width(120)); decorator.labelOverridesColor = EditorGUILayout.Toggle(decorator.labelOverridesColor); if (decorator.labelOverridesColor) { GUILayout.Label("Color", GUILayout.Width(120)); Color prevColor = decorator.labelColor; decorator.labelColor = EditorGUILayout.ColorField(decorator.labelColor); if (prevColor != decorator.labelColor) { requestChanges = true; } } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Offset", GUILayout.Width(120)); Vector2 prevLabelOffset = decorator.labelOffset; decorator.labelOffset = EditorGUILayout.Vector2Field("", decorator.labelOffset); if (prevLabelOffset != decorator.labelOffset) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Rotation", GUILayout.Width(120)); float prevLabelRotation = decorator.labelRotation; decorator.labelRotation = EditorGUILayout.Slider(decorator.labelRotation, 0, 359); if (prevLabelRotation != decorator.labelRotation) { requestChanges = true; } EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Colorized", GUILayout.Width(120)); bool prevColorized = decorator.isColorized; decorator.isColorized = EditorGUILayout.Toggle(decorator.isColorized); if (decorator.isColorized != prevColorized) { requestChanges = true; } if (decorator.isColorized) { GUILayout.Label("Fill Color", GUILayout.Width(120)); Color prevColor = decorator.fillColor; decorator.fillColor = EditorGUILayout.ColorField(decorator.fillColor); if (prevColor != decorator.fillColor) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Texture", GUILayout.Width(120)); Texture2D prevTexture = decorator.texture; decorator.texture = (Texture2D)EditorGUILayout.ObjectField(decorator.texture, typeof(Texture2D), false); if (decorator.texture != prevTexture) { requestChanges = true; } if (decorator.texture != null) { EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Vector2 prevVector = decorator.textureScale; decorator.textureScale = EditorGUILayout.Vector2Field(" Scale", decorator.textureScale); if (prevVector != decorator.textureScale) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); prevVector = decorator.textureOffset; decorator.textureOffset = EditorGUILayout.Vector2Field(" Offset", decorator.textureOffset); if (prevVector != decorator.textureOffset) { requestChanges = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Rotation", GUILayout.Width(120)); float prevFloat = decorator.textureRotation; decorator.textureRotation = EditorGUILayout.Slider(decorator.textureRotation, 0, 360); if (prevFloat != decorator.textureRotation) { requestChanges = true; } } } EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); if (decorator.isNew) { if (GUILayout.Button("Assign")) { _decorator.SetCountryDecorator(_decorator.GUIGroupIndex, _decorator.GUICountryName, decorator); ReloadGroupNames(); ReloadCountryNames(); } } else if (GUILayout.Button("Remove")) { decorator = null; _decorator.RemoveCountryDecorator(_decorator.GUIGroupIndex, _decorator.GUICountryName); ReloadGroupNames(); ReloadCountryNames(); } EditorGUILayout.EndHorizontal(); if (!decoratorGroup.active) { DrawWarningLabel("Enable the decoration group to activate changes"); } } EditorGUILayout.EndVertical(); if (requestChanges) { _decorator.ForceUpdateDecorators(); SceneView.RepaintAll(); EditorUtility.SetDirty(_map); if (!Application.isPlaying) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } } }