using System.Collections.Generic; using InfinityCode.RealWorldTerrain; using InfinityCode.RealWorldTerrain.Windows; using UnityEditor; using UnityEngine; public class RegenerateTexturesWindow : EditorWindow { public List items; private int itemIndex = -1; private bool isIdle = true; private Vector2 scrollPosition; private int width = 1024; private int height = 1024; private void Finish() { EditorApplication.update -= GenerateNextItem; RealWorldTerrainWindow.OnCaptureCompleted -= OnCaptureCompleted; RealWorldTerrainWindow.OnCaptureCanceled -= OnCaptureCanceled; isIdle = true; Repaint(); } private void GenerateNextItem() { EditorApplication.update -= GenerateNextItem; itemIndex++; if (itemIndex >= items.Count) { Finish(); return; } RealWorldTerrainWindow.OpenWindow(RealWorldTerrainGenerateType.texture, items[itemIndex]); RealWorldTerrainWindow.prefs.generateTextures = true; RealWorldTerrainWindow.prefs.textureSize = new RealWorldTerrainVector2i(width, height); // Here you can specify additional generation settings. RealWorldTerrainWindow.StartCapture(); } private void OnCaptureCanceled() { Finish(); } private void OnCaptureCompleted() { EditorApplication.update += GenerateNextItem; } private void OnGUI() { if (isIdle) OnIdleGUI(); else OnGenerateGUI(); } private void OnGenerateGUI() { EditorGUILayout.LabelField("Generating, please wait ..."); if (GUILayout.Button("Cancel")) RealWorldTerrainWindow.CancelCapture(); } private void OnIdleGUI() { width = EditorGUILayout.IntField("Width", width); height = EditorGUILayout.IntField("Height", height); if (items == null) items = new List(); EditorGUILayout.LabelField("Items"); bool hasNull = false; scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); for (int i = 0; i < items.Count; i++) { items[i] = EditorGUILayout.ObjectField(i + 1 + ": ", items[i], typeof(RealWorldTerrainItem), true) as RealWorldTerrainItem; if (items[i] == null) hasNull = true; } if (hasNull) items.RemoveAll(i => i == null); RealWorldTerrainItem newItem = EditorGUILayout.ObjectField(items.Count + 1 + ": ", null, typeof(RealWorldTerrainItem), true) as RealWorldTerrainItem; if (newItem != null) items.Add(newItem); EditorGUILayout.EndScrollView(); if (GUILayout.Button("Start")) PrepareStart(); } [MenuItem("Window/Infinity Code/Real World Terrain/Tools/Regenerate Textures")] public static void OpenWindow() { GetWindow("Regenerate Textures"); } private void PrepareStart() { if (items == null || items.Count == 0) return; isIdle = false; itemIndex = -1; RealWorldTerrainWindow.OnCaptureCompleted += OnCaptureCompleted; RealWorldTerrainWindow.OnCaptureCanceled += OnCaptureCanceled; GenerateNextItem(); } }