void OnEnable() { filePath = ""; working = false; committing = false; texture = null; ti = null; EditorUtility.ClearProgressBar(); colorPickerMode = COLOR_PICKER_MODE.NONE; }
void OnGUI() { if (WMSK.instance == null) { DestroyImmediate(this); EditorGUIUtility.ExitGUI(); return; } EditorGUILayout.HelpBox("This tool will generate countries or provinces based on the color information of a given texture.", MessageType.Info); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Load Texture File...", GUILayout.Width(140))) { filePath = EditorUtility.OpenFilePanelWithFilters("Select Texture File", "", new string[] { "Image files", "png,jpg,jpeg" }); if (filePath.ToUpper().Contains("PROVINC")) { mode = TerritoriesImporterMode.Provinces; } ReadTexture(); } if (texture != null && GUILayout.Button("Reload Texture", GUILayout.Width(120))) { ReadTexture(); } EditorGUILayout.EndHorizontal(); if (texture != null) { textureRectWidth = (int)position.width - 400; textureRectHeight = (int)position.height - 70; textureRect = new Rect(390, 55, textureRectWidth, textureRectHeight); GUI.DrawTexture(textureRect, texture, ScaleMode.StretchToFill); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Creation Mode", GUILayout.Width(150)); mode = (TerritoriesImporterMode)EditorGUILayout.IntPopup((int)mode, modes, modesValues, GUILayout.Width(120)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Detail", GUILayout.Width(150)); EditorGUI.BeginChangeCheck(); detail = (DETAIL)EditorGUILayout.EnumPopup(detail, GUILayout.Width(120)); if (EditorGUI.EndChangeCheck()) { ReadTexture(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (mode == TerritoriesImporterMode.Countries) { GUI.enabled = false; snapToCountryFrontiers = false; } GUILayout.Label("Snap To Country Frontiers", GUILayout.Width(150)); snapToCountryFrontiers = EditorGUILayout.Toggle(snapToCountryFrontiers, GUILayout.Width(40)); GUI.enabled = true; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(new GUIContent("Additive", "Do not remove existing entities"), GUILayout.Width(150)); additive = EditorGUILayout.Toggle(additive, GUILayout.Width(40)); EditorGUILayout.EndHorizontal(); // Background Color if (colorTexStyle == null) { colorTexStyle = new GUIStyle(GUI.skin.box); colorTexStyle.fixedWidth = 120; colorTexStyle.fixedHeight = 17; } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Background Color", GUILayout.Width(150)); if (bgColorTex == null) { bgColorTex = MakeTex(150, 25, bgColor); colorTexStyle.normal.background = bgColorTex; Repaint(); } GUILayout.Box(bgColorTex, colorTexStyle, GUILayout.Width(120), GUILayout.Height(17)); if (colorPickerMode != COLOR_PICKER_MODE.BACKGROUND_COLOR) { if (GUILayout.Button("Pick", GUILayout.Width(60))) { colorPickerMode = COLOR_PICKER_MODE.BACKGROUND_COLOR; } } else if (GUILayout.Button("Cancel", GUILayout.Width(60))) { colorPickerMode = COLOR_PICKER_MODE.NONE; } EditorGUILayout.EndHorizontal(); if (colorPickerMode == COLOR_PICKER_MODE.BACKGROUND_COLOR) { GUILayout.Label("(Click on the texture to select background color)"); } // Colors EditorGUILayout.BeginHorizontal(); GUILayout.Label("Territory Colors (" + ti.goodColorCount + ")", GUILayout.Width(150)); if (goodColorsTex == null) { goodColorsTex = MakeTexGoodColors(250, 25); Repaint(); } GUILayout.Box(goodColorsTex, colorTexStyle, GUILayout.Width(120), GUILayout.Height(17)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(150)); if (colorPickerMode != COLOR_PICKER_MODE.GOOD_COLOR) { if (GUILayout.Button("Add", GUILayout.Width(60))) { colorPickerMode = COLOR_PICKER_MODE.GOOD_COLOR; } if (GUILayout.Button("Clear", GUILayout.Width(60))) { ti.ClearGoodColors(); goodColorsTex = null; GUIUtility.ExitGUI(); return; } } else { if (GUILayout.Button("Finish", GUILayout.Width(60))) { colorPickerMode = COLOR_PICKER_MODE.NONE; } GUILayout.Label("(Click on the texture to add a new color)"); } EditorGUILayout.EndHorizontal(); // Operations if (colorPickerMode != COLOR_PICKER_MODE.NONE) { Vector2 mousePos = Event.current.mousePosition; if (Event.current.button == 0 && Event.current.type == EventType.MouseDown && textureRect.Contains(mousePos)) { Color32 color = GetColor(mousePos - textureRect.min); if (colorPickerMode == COLOR_PICKER_MODE.BACKGROUND_COLOR) { bgColor = color; bgColorTex = null; colorPickerMode = COLOR_PICKER_MODE.NONE; GUIUtility.ExitGUI(); return; } else if (colorPickerMode == COLOR_PICKER_MODE.GOOD_COLOR) { if (!ti.IsGoodColor(color)) { ti.AddGoodColor(color); goodColorsTex = null; } } GUIUtility.ExitGUI(); } } if (working) { GUI.enabled = false; } if (ti != null) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); if (ti.goodColorCount == 0) { GUI.enabled = false; } if (GUILayout.Button(mode == TerritoriesImporterMode.Countries ? "Generate Countries" : "Generate Provinces", GUILayout.Width(150))) { if (AskConfirmation()) { if (mode == TerritoriesImporterMode.Provinces) { WMSK.instance.editor.ChangeEditingMode(EDITING_MODE.PROVINCES); WMSK.instance.drawAllProvinces = true; } working = true; ti.StartProcess(mode, snapToCountryFrontiers); } } GUI.enabled = true; EditorGUILayout.EndHorizontal(); } } }