public static void PlaceTrees(Terrain terrain, float xBase, float yBase)
{
int prototypeCount = TerrainInspectorUtil.GetPrototypeCount(terrain.terrainData);
if (TreePainter.selectedTree == -1 || TreePainter.selectedTree >= prototypeCount)
{
return;
}
if (!TerrainInspectorUtil.PrototypeIsRenderable(terrain.terrainData, TreePainter.selectedTree))
{
return;
}
int num = 0;
TreeInstance instance = default(TreeInstance);
instance.position = new Vector3(xBase, 0f, yBase);
instance.color = TreePainter.GetTreeColor();
instance.lightmapColor = Color.white;
instance.prototypeIndex = TreePainter.selectedTree;
instance.heightScale = TreePainter.GetTreeHeight();
instance.widthScale = ((!TreePainter.lockWidthToHeight) ? TreePainter.GetTreeWidth() : instance.heightScale);
instance.rotation = TreePainter.GetTreeRotation();
bool flag = Event.current.type == EventType.MouseDrag || TreePainter.brushSize > 1f;
if (!flag || TerrainInspectorUtil.CheckTreeDistance(terrain.terrainData, instance.position, instance.prototypeIndex, TreePainter.spacing))
{
terrain.AddTreeInstance(instance);
num++;
}
Vector3 prototypeExtent = TerrainInspectorUtil.GetPrototypeExtent(terrain.terrainData, TreePainter.selectedTree);
prototypeExtent.y = 0f;
float num2 = TreePainter.brushSize / (prototypeExtent.magnitude * TreePainter.spacing * 0.5f);
int num3 = (int)(num2 * num2 * 0.5f);
num3 = Mathf.Clamp(num3, 0, 100);
int num4 = 1;
while (num4 < num3 && num < num3)
{
Vector2 insideUnitCircle = UnityEngine.Random.insideUnitCircle;
insideUnitCircle.x *= TreePainter.brushSize / terrain.terrainData.size.x;
insideUnitCircle.y *= TreePainter.brushSize / terrain.terrainData.size.z;
Vector3 position = new Vector3(xBase + insideUnitCircle.x, 0f, yBase + insideUnitCircle.y);
if (position.x >= 0f && position.x <= 1f && position.z >= 0f && position.z <= 1f && TerrainInspectorUtil.CheckTreeDistance(terrain.terrainData, position, TreePainter.selectedTree, TreePainter.spacing * 0.5f))
{
instance = default(TreeInstance);
instance.position = position;
instance.color = TreePainter.GetTreeColor();
instance.lightmapColor = Color.white;
instance.prototypeIndex = TreePainter.selectedTree;
instance.heightScale = TreePainter.GetTreeHeight();
instance.widthScale = ((!TreePainter.lockWidthToHeight) ? TreePainter.GetTreeWidth() : instance.heightScale);
instance.rotation = TreePainter.GetTreeRotation();
terrain.AddTreeInstance(instance);
num++;
}
num4++;
}
}