Advertisement
rsklnkv

AltTrees importer

Feb 1st, 2017
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.36 KB | None | 0 0
  1. // add following fields to 'public class AddTreesStruct'
  2.         public float height = -1.0f;
  3.         public float width = -1.0f;
  4.         public Color color = new Color(1, 1, 1, 0);
  5.  
  6. // copy to the end of 'public override void OnInspectorGUI()' in AltTrees_Editor.cs
  7.             if (GUILayout.Button("Clear"))
  8.             {
  9.                 List<AltTreesPatch> allPatches = new List<AltTreesPatch>(obj.altTreesManagerData.patches);
  10.                 foreach (var patch in allPatches)
  11.                 {
  12.                     removePatch(patch);
  13.                 }
  14.             }
  15.             if (GUILayout.Button("Convert terrains"))
  16.             {
  17.                 ConvertTerrains();
  18.             }
  19.  
  20. // implementation, copy anywhere in AltTrees_Editor.cs
  21.         void ConvertTerrains()
  22.         {
  23.             List<GameObject> prefabs = new List<GameObject>();
  24.             for (int i = 0; i < Terrain.activeTerrains.Length; i++)
  25.             {
  26.                 var terrainData = Terrain.activeTerrains[i].terrainData;
  27.                 foreach(var t in terrainData.treePrototypes)
  28.                 {
  29.                     prefabs.Add(t.prefab);
  30.                 }
  31.             }
  32.  
  33.             SpeedTreeImporter[] speedTreeImporters = new SpeedTreeImporter[prefabs.Count];
  34.             for (int i = 0; i < prefabs.Count; i++)
  35.             {
  36.                 string path = AssetDatabase.GetAssetPath(prefabs[i]);
  37.                 var importer = AssetImporter.GetAtPath(path);
  38.                 if (importer is SpeedTreeImporter)
  39.                 {
  40.                     speedTreeImporters[i] = importer as SpeedTreeImporter;
  41.                 }
  42.             }
  43.  
  44.             AltTree[] trees = new AltTree[prefabs.Count];
  45.             for (int i = 0; i < prefabs.Count; i++)
  46.             {
  47.                 AltTree treeTemp2 = null;
  48.                 treeTemp2 = dataLinks.getAltTree(prefabs[i]);
  49.                 if (treeTemp2 == null)
  50.                 {
  51.                     ImportTreeWindow.ConvertTree(prefabs[i], this, null, false, false);
  52.                     return;
  53.                 }
  54.  
  55.                 trees[i] = dataLinks.getAltTree(prefabs[i]);
  56.             }
  57.  
  58.             List<AltTreesPatch> allPatches = new List<AltTreesPatch>(obj.altTreesManagerData.patches);
  59.             foreach(var patch in allPatches)
  60.             {
  61.                 removePatch(patch);
  62.             }
  63.  
  64.             Dictionary<AltTreesPatch, List<AddTreesStruct>> tempListPatches = new Dictionary<AltTreesPatch, List<AddTreesStruct>>();
  65.             for (int i = 0; i < Terrain.activeTerrains.Length; i++)
  66.             {
  67.                 var terrainData = Terrain.activeTerrains[i].terrainData;
  68.                 for (int t = 0; t < terrainData.treeInstances.Length; t++)
  69.                 {
  70.                     var tree = terrainData.treeInstances[t];
  71.                     Vector3 posTemp = Vector3.Scale(tree.position, terrainData.size) + Terrain.activeTerrains[i].GetPosition();
  72.  
  73.                     var atpTree = trees[tree.prototypeIndex];
  74.                     var atp = new AddTreesStruct(posTemp, atpTree);
  75.                     atp.width = tree.widthScale;
  76.                     atp.height = tree.heightScale;
  77.                     if (speedTreeImporters[tree.prototypeIndex] != null)
  78.                     {
  79.                         atp.color = speedTreeImporters[tree.prototypeIndex].hueVariation;
  80.                     }
  81.  
  82.                     var patch = getPatch(posTemp);
  83.                     List<AddTreesStruct> addTo = null;
  84.  
  85.                     if (tempListPatches.ContainsKey(patch))
  86.                     {
  87.                         addTo = tempListPatches[patch];
  88.                     }
  89.                     else
  90.                     {
  91.                         addTo = new List<AddTreesStruct>();
  92.                         tempListPatches.Add(patch, addTo);
  93.                     }
  94.  
  95.                     patch.checkTreePrototype(atpTree.id, atpTree);
  96.                     addTo.Add(atp);
  97.                 }
  98.  
  99.                 terrainData.treeInstances = new TreeInstance[0];
  100.                 terrainData.RefreshPrototypes();
  101.                 Terrain.activeTerrains[i].Flush();
  102.             }
  103.  
  104.             foreach (AltTreesPatch key in tempListPatches.Keys)
  105.             {
  106.                 key.addTrees(tempListPatches[key].ToArray(), true, false, 2.0f, 1.0f, true, false, 1.0f, 1.0f, new Color32(0, 0, 0, 0), new Color32(0, 0, 0, 0), false, false);
  107.             }
  108.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement