private TreeInstance[] PlaceTreeOnPositions(List <Vector2> p_positions, TreeLayerData p_treeLayerConfig) { List <TreeInstance> list = new List <TreeInstance>(); for (Int32 i = 0; i < p_positions.Count; i++) { TreeInstance item = default(TreeInstance); Single num = p_positions[i].y / GetTerrainData().size.z; Single num2 = p_positions[i].x / GetTerrainData().size.x; Single interpolatedHeight = GetTerrainData().GetInterpolatedHeight(num, num2); Single y = interpolatedHeight / GetTerrainData().size.y; if (interpolatedHeight <= p_treeLayerConfig.MaxHeight && interpolatedHeight >= p_treeLayerConfig.MinHeight) { Single time = GetTerrainData().GetAlphamaps(Mathf.RoundToInt(num * GetTerrainData().alphamapWidth), Mathf.RoundToInt(num2 * GetTerrainData().alphamapHeight), 1, 1)[0, 0, p_treeLayerConfig.SplatLayerID]; Single num3 = 0f; foreach (TreeInstanceData treeInstanceData2 in p_treeLayerConfig.TreeInstanceData) { num3 += treeInstanceData2.IntensityDistribution.Evaluate(time); } if (num3 < 1.0) { num3 = 1f; } TreeInstanceData treeInstanceData3 = null; Single num4 = UnityEngine.Random.Range(0f, num3); foreach (TreeInstanceData treeInstanceData5 in p_treeLayerConfig.TreeInstanceData) { Single num5 = treeInstanceData5.IntensityDistribution.Evaluate(time); if (num4 < num5) { treeInstanceData3 = treeInstanceData5; break; } num4 -= num5; } if (treeInstanceData3 != null) { Single num6 = treeInstanceData3.IntensityScale.Evaluate(time); if (GetTerrainData().GetSteepness(num, num2) <= p_treeLayerConfig.MaxSteepness) { item.position = new Vector3(num, y, num2); item.prototypeIndex = treeInstanceData3.PrototypeID; Single num7 = p_treeLayerConfig.Scale * (1f + UnityEngine.Random.Range(-p_treeLayerConfig.ScaleVariation, p_treeLayerConfig.ScaleVariation)) * num6; item.heightScale = num7; item.widthScale = num7; item.color = Color.Lerp(p_treeLayerConfig.ColorHighValues, p_treeLayerConfig.ColorLowValues, UnityEngine.Random.value); item.lightmapColor = Color.white; list.Add(item); } } } } return(list.ToArray()); }
public TreeInstance[] PlaceTreeLayer(TreeLayerData p_layerData) { List <TreeInstance> list = new List <TreeInstance>(); List <Vector2> layerCells = GetLayerCells(p_layerData.SplatLayerID, p_layerData.IntensityThreshold, p_layerData.Distance, p_layerData.DistanceNoise); List <Vector2> list2 = layerCells; TreeInstance[] collection = new TreeInstance[list2.Count]; collection = PlaceTreeOnPositions(list2, p_layerData); list.AddRange(collection); return(list.ToArray()); }