/// <summary> /// Converts a Detail Prototype array into a Terrain Grass List /// An empty (but not null) terrainGrassList is supplied to reduce GC /// </summary> /// <param name="detailPrototypes"></param> /// <param name="terrainGrassList"></param> public static void ToLBTerrainGrassList(DetailPrototype[] detailPrototypes, List <LBTerrainGrass> terrainGrassList) { if (detailPrototypes != null && terrainGrassList != null) { if (detailPrototypes.Length > 0) { terrainGrassList.Clear(); for (int i = 0; i < detailPrototypes.Length; i++) { LBTerrainGrass temp = new LBTerrainGrass(); // NOTE: Texture will be null if a mesh is being used temp.texture = detailPrototypes[i].prototypeTexture; temp.minHeight = detailPrototypes[i].minHeight; temp.maxHeight = detailPrototypes[i].maxHeight; temp.minWidth = detailPrototypes[i].minWidth; temp.maxWidth = detailPrototypes[i].maxWidth; temp.dryColour = detailPrototypes[i].dryColor; temp.healthyColour = detailPrototypes[i].healthyColor; temp.noiseSpread = detailPrototypes[i].noiseSpread; temp.detailRenderMode = detailPrototypes[i].renderMode; // Used when using a mesh prefab instead of a texture for the grass temp.useMeshPrefab = detailPrototypes[i].usePrototypeMesh; temp.meshPrefab = detailPrototypes[i].prototype; terrainGrassList.Add(temp); temp = null; } } } }
private void UserDefinedLookup(LBTerrainGrass lbTerrainGrass, string sourceName) { if (lbGrassSetup == null) { Debug.LogWarning("LandscapeBuilderGrassEditor.UserDefinedLookup - Grass Setup is not defined"); } else if (lbTerrainGrass == null) { Debug.LogWarning("LandscapeBuilderGrassEditor.UserDefinedLookup - Terrain Grass cannot be null"); } else { string filePath = LBTextureOperations.GetTextureFilePath(lbTerrainGrass.texture); string textureNameWithExtension = LBTextureOperations.GetTextureFileNameFromPath(filePath); // Find a match in the current config list LBGrassConfig lbGrassConfig = lbGrassSetup.lbGrassConfigList.Find(g => g.grassTextureName == textureNameWithExtension && g.sourceName == sourceName); // If we didn't find a match, create a new one if (lbGrassConfig == null) { AddGrassConfig(lbTerrainGrass, textureNameWithExtension); } } }
/// <summary> /// Add a new LBGrassConfig using an existing LBTerrainGrass instance /// </summary> /// <param name="lbTerrainGrass"></param> private void AddGrassConfig(LBTerrainGrass lbTerrainGrass, string textureName) { if (lbGrassSetup == null) { Debug.LogWarning("LandscapeBuilderGrassEditor.AddGrassConfig - Grass Setup is not defined"); } else if (lbTerrainGrass == null) { Debug.LogWarning("LandscapeBuilderGrassEditor.AddGrassConfig - Terrain Grass cannot be null"); } else if (lbGrassSetup.lbGrassConfigList == null) { Debug.LogWarning("LandscapeBuilderGrassEditor.AddGrassConfig - GrassConfigList is not defined"); } else { LBGrassConfig lbGrassConfigNew = new LBGrassConfig(); if (lbGrassConfigNew != null) { lbGrassConfigNew.sourceName = LBGrassSetup.UserDefinedSourceFilter; lbGrassConfigNew.texture2D = lbTerrainGrass.texture; lbGrassConfigNew.grassTexturePath = AssetDatabase.GetAssetPath(lbTerrainGrass.texture); lbGrassConfigNew.grassTextureName = LBTextureOperations.GetTextureFileNameFromPath(lbGrassConfigNew.grassTexturePath); lbGrassConfigNew.detailRenderMode = lbTerrainGrass.detailRenderMode; lbGrassConfigNew.dryColour = lbTerrainGrass.dryColour; lbGrassConfigNew.grassPatchFadingMode = (LBGrassConfig.GrassPatchFadingMode)lbTerrainGrass.grassPatchFadingMode; lbGrassConfigNew.healthyColour = lbTerrainGrass.healthyColour; lbGrassConfigNew.minWidth = lbTerrainGrass.minWidth; lbGrassConfigNew.maxWidth = lbTerrainGrass.maxWidth; lbGrassConfigNew.minHeight = lbTerrainGrass.minHeight; lbGrassConfigNew.maxHeight = lbTerrainGrass.maxHeight; lbGrassSetup.lbGrassConfigList.Add(lbGrassConfigNew); lbGrassSetup.Save(false); if (lbWindow != null) { lbWindow.isGrassConfigListDirty = true; } } } }
/// <summary> /// Constructor to create a clone of a LBTerrainGrass instance /// </summary> /// <param name="lbTerrainGrass"></param> public LBTerrainGrass(LBTerrainGrass lbTerrainGrass) { this.texture = lbTerrainGrass.texture; if (lbTerrainGrass.textureName == null) { this.textureName = string.Empty; } else { this.textureName = lbTerrainGrass.textureName; } this.minHeight = lbTerrainGrass.minHeight; this.maxHeight = lbTerrainGrass.maxHeight; this.minWidth = lbTerrainGrass.minWidth; this.maxWidth = lbTerrainGrass.maxWidth; this.healthyColour = lbTerrainGrass.healthyColour; this.dryColour = lbTerrainGrass.dryColour; this.noiseSpread = lbTerrainGrass.noiseSpread; this.minPopulatedHeight = lbTerrainGrass.minPopulatedHeight; this.maxPopulatedHeight = lbTerrainGrass.maxPopulatedHeight; this.minInclination = lbTerrainGrass.minInclination; this.maxInclination = lbTerrainGrass.maxInclination; this.influence = lbTerrainGrass.influence; this.minDensity = lbTerrainGrass.minDensity; this.density = lbTerrainGrass.density; this.detailRenderMode = lbTerrainGrass.detailRenderMode; this.isCurvatureConcave = lbTerrainGrass.isCurvatureConcave; this.curvatureDistance = lbTerrainGrass.curvatureDistance; this.curvatureMinHeightDiff = lbTerrainGrass.curvatureMinHeightDiff; this.grassPlacingMode = lbTerrainGrass.grassPlacingMode; this.grassPatchFadingMode = lbTerrainGrass.grassPatchFadingMode; this.map = lbTerrainGrass.map; this.mapColour = lbTerrainGrass.mapColour; this.mapTolerance = lbTerrainGrass.mapTolerance; this.mapInverse = lbTerrainGrass.mapInverse; this.mapToleranceBlendCurve = lbTerrainGrass.mapToleranceBlendCurve; this.mapIsPath = lbTerrainGrass.mapIsPath; this.isDisabled = lbTerrainGrass.isDisabled; if (lbTerrainGrass.filterList != null) { this.filterList = LBFilter.CopyList(lbTerrainGrass.filterList); } else { this.filterList = new List <LBFilter>(); } this.showGrass = lbTerrainGrass.showGrass; this.useNoise = lbTerrainGrass.useNoise; this.noiseTileSize = lbTerrainGrass.noiseTileSize; this.noiseOctaves = lbTerrainGrass.noiseOctaves; this.grassPlacementCutoff = lbTerrainGrass.grassPlacementCutoff; if (lbTerrainGrass.lbTerrainDataList == null) { this.lbTerrainDataList = null; } else { this.lbTerrainDataList = new List <LBTerrainData>(lbTerrainGrass.lbTerrainDataList); } this.useMeshPrefab = lbTerrainGrass.useMeshPrefab; this.meshPrefab = lbTerrainGrass.meshPrefab; if (lbTerrainGrass.meshPrefabName == null) { this.meshPrefabName = string.Empty; } else { this.meshPrefabName = lbTerrainGrass.meshPrefabName; } this.showPrefabPreview = lbTerrainGrass.showPrefabPreview; this.GUID = lbTerrainGrass.GUID; }