/* INFINITY CODE */ /* https://infinity-code.com */ using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace InfinityCode.RealWorldTerrain.Phases { public class RealWorldTerrainSaveBuildingsPhase : RealWorldTerrainPhase { public static List renderersToSave { get { if (_renderersToSave == null) _renderersToSave = new List(); return _renderersToSave; } } public static Dictionary filtersToSave { get { if (_filtersToSave == null) _filtersToSave = new Dictionary(); return _filtersToSave; } } private static Dictionary _filtersToSave; private static List _renderersToSave; public override string title { get { return "Save Buildings..."; } } public override void Enter() { try { if (prefs.buildingGenerator != 0) return; AssetDatabase.StartAssetEditing(); if (renderersToSave != null) { foreach (var savableRenderer in renderersToSave) { try { Material material = savableRenderer.renderer.sharedMaterials[savableRenderer.index]; AssetDatabase.CreateAsset(material, savableRenderer.path); } catch { } } } if (filtersToSave != null) { foreach (var pair in filtersToSave) { try { AssetDatabase.CreateAsset(pair.Key.sharedMesh, pair.Value); } catch { } } } AssetDatabase.StopAssetEditing(); if (renderersToSave != null) { foreach (var savableRenderer in renderersToSave) { try { savableRenderer.renderer.sharedMaterials[savableRenderer.index] = AssetDatabase.LoadAssetAtPath(savableRenderer.path); } catch { } } } if (filtersToSave != null) { foreach (var pair in filtersToSave) { try { pair.Key.sharedMesh = AssetDatabase.LoadAssetAtPath(pair.Value); } catch { } } } } catch (Exception exception) { Debug.Log(exception.Message); throw; } _renderersToSave = null; _filtersToSave = null; Complete(); } public class SavableRenderer { public string path; public int index; public MeshRenderer renderer; } } }