private void Spawn( SpawnPopulation population, SpawnDistribution distribution, int targetCount, int numToFill, int numToTry) { if (targetCount == 0) { return; } if (!population.Initialize()) { Debug.LogError((object)("[Spawn] No prefabs to spawn in " + population.ResourceFolder), (Object)population); } else { if (Global.developer > 1) { Debug.Log((object)("[Spawn] Population " + population.ResourceFolder + " needs to spawn " + (object)numToFill)); } float num1 = Mathf.Max((float)population.ClusterSizeMax, distribution.GetGridCellArea() * population.GetMaximumSpawnDensity()); population.UpdateWeights(distribution, targetCount); while (numToFill >= population.ClusterSizeMin && numToTry > 0) { ByteQuadtree.Element node = distribution.SampleNode(); int num2 = Random.Range(population.ClusterSizeMin, population.ClusterSizeMax + 1); int num3 = Mathx.Min(numToTry, numToFill, num2); for (int index = 0; index < num3; ++index) { Vector3 spawnPos; Quaternion spawnRot; if (distribution.Sample(out spawnPos, out spawnRot, node, population.AlignToNormal, (float)population.ClusterDithering) && (double)population.Filter.GetFactor(spawnPos) > 0.0 && (double)distribution.GetCount(spawnPos) < (double)num1) { this.Spawn(population, spawnPos, spawnRot); --numToFill; } --numToTry; } } } }
private void Spawn(SpawnPopulation population, SpawnDistribution distribution, int targetCount, int numToFill, int numToTry) { Vector3 vector3; Quaternion quaternion; if (targetCount == 0) { return; } if (!population.Initialize()) { UnityEngine.Debug.LogError(string.Concat("[Spawn] No prefabs to spawn in ", population.ResourceFolder), population); return; } if (Global.developer > 1) { UnityEngine.Debug.Log(string.Concat(new object[] { "[Spawn] Population ", population.ResourceFolder, " needs to spawn ", numToFill })); } float single = Mathf.Max((float)population.ClusterSizeMax, distribution.GetGridCellArea() * population.GetMaximumSpawnDensity()); population.UpdateWeights(distribution, targetCount); while (numToFill >= population.ClusterSizeMin && numToTry > 0) { ByteQuadtree.Element element = distribution.SampleNode(); int num = UnityEngine.Random.Range(population.ClusterSizeMin, population.ClusterSizeMax + 1); num = Mathx.Min(numToTry, numToFill, num); for (int i = 0; i < num; i++) { if (distribution.Sample(out vector3, out quaternion, element, population.AlignToNormal, (float)population.ClusterDithering) && population.Filter.GetFactor(vector3) > 0f && (float)distribution.GetCount(vector3) < single) { this.Spawn(population, vector3, quaternion); numToFill--; } numToTry--; } } }