protected PoissonDiskSampling CreatePointGenerator() { PoissonDiskSampling pointGenerator = _controller.gameObject.AddComponent <PoissonDiskSampling>(); _controller.pointGenerator = pointGenerator; return(pointGenerator); }
/** Pass in the constructor from the poisson-disk-sampling module */ public MeshBuilder addPoisson(float spacing, Rander.RandFloat rng) { var generator = new PoissonDiskSampling(new int[] { 1000, 1000 }, spacing, 0, 0, rng); foreach (var p in this.points) { generator.addPoint(new Float[] { p[0], p[1] }); } this.points = generator.fill(); return(this); }
/// <summary> /// Generates a foreground layer of objects at the start of each scenario iteration /// </summary> protected override void OnIterationStart() { var seed = SamplerState.NextRandomState(); var placementSamples = PoissonDiskSampling.GenerateSamples( placementArea.x, placementArea.y, separationDistance, seed); var offset = new Vector3(placementArea.x, placementArea.y, 0f) * -0.5f; foreach (var sample in placementSamples) { var instance = m_GameObjectOneWayCache.GetOrInstantiate(prefabs.Sample()); instance.transform.position = new Vector3(sample.x, sample.y, depth) + offset; } placementSamples.Dispose(); }
public void GenerateObjects(float[,] heightMap, MapGenerator mapGenerator) { prng = new System.Random(mapGenerator.seed); this.mapGenerator = mapGenerator; int chunkCount = mapGenerator.mapSizeX * mapGenerator.mapSizeY; LOD = MapGenerator.LOD; int width = heightMap.GetLength(0); int height = heightMap.GetLength(1); Dictionary <int, List <Vector2> > objectsMap = new Dictionary <int, List <Vector2> >(); for (int i = 0; i < objects.Count; i++) { objectsMap.Add(i, PoissonDiskSampling.GeneratePoints(mapGenerator.seed, width, height, LOD, chunkCount, objects[i].spawnRadius, objects[i].spawnIterationCount)); SpawnObjects(objectsMap[i], objects[i], heightMap); } }
void PlaceLayerTwoObjects() { if (m_LayerTwoSpawnedObjects == null) { m_LayerTwoSpawnedObjects = new List <GameObject>(); } var seed = scenario.GenerateRandomSeed(); var placementSamples = PoissonDiskSampling.GenerateSamples( layerTwoPlacementArea.x, layerTwoPlacementArea.y, layerTwoSeparationDistance.Sample(), seed); var offset = new Vector3(layerTwoPlacementArea.x, layerTwoPlacementArea.y, 0) * -0.5f; var parent = scenario.transform; foreach (var sample in placementSamples) { var instance = Object.Instantiate(layerTwoPrefabs.Sample(), parent); instance.transform.position = new Vector3(sample.x, sample.y, layerTwoDepth + layerTwoDepthDisplacement.Sample()) + offset; m_LayerTwoSpawnedObjects.Add(instance); } placementSamples.Dispose(); }
/// <summary> /// Generates a foreground layer of objects at the start of each scenario iteration /// </summary> protected override void OnIterationStart() { if (m_SpawnedObjects == null) { m_SpawnedObjects = new List <GameObject>(); } var seed = scenario.GenerateRandomSeed(); var placementSamples = PoissonDiskSampling.GenerateSamples( placementArea.x, placementArea.y, separationDistance.Sample(), seed); var offset = new Vector3(placementArea.x, placementArea.y, 0f) * -0.5f; var parent = scenario.transform; foreach (var sample in placementSamples) { var instance = UnityEngine.Object.Instantiate(prefabs.Sample(), parent); instance.transform.position = new Vector3(sample.x, sample.y, depth) + offset; m_SpawnedObjects.Add(instance); } placementSamples.Dispose(); }
void PlaceObjects() { m_SpawnedCount = 0; var seed = SamplerState.NextRandomState(); var placementSamples = PoissonDiskSampling.GenerateSamples( placementArea.x, placementArea.y, separationDistance.Sample(), seed); var offset = new Vector3(placementArea.x, placementArea.y, 0) * -0.5f; foreach (var sample in placementSamples) { var instance = m_GameObjectOneWayCache.GetOrInstantiate(prefabs.Sample()); instance.transform.position = new Vector3(sample.x, sample.y, depth) + offset; m_SpawnedObjects.Add(instance); if (++m_SpawnedCount == maxObjectCount) { break; } } placementSamples.Dispose(); }
public PointsData(int seed, int width, int height, float mountainSpacing, float spacing) { var shape = new int[] { width, height }; var poissonPeaks = new PoissonDiskSampling(shape, mountainSpacing, 0, 0, Rander.makeRandFloat(seed)).fill(); var generator = new PoissonDiskSampling(shape, spacing, 0, 0, Rander.makeRandFloat(seed)); foreach (var p in poissonPeaks) { generator.addPoint(p); } var mesh = generator.fill(); var tmpPoints = new int[mesh.Count]; var indexs = new int[mesh.Count]; for (int i = 0; i < indexs.Length; ++i) { var p = mesh[i]; tmpPoints[i] = ((int)p[0]) << 16 | (int)p[1]; indexs[i] = i; } Array.Sort(tmpPoints, indexs); points = new UInt16[tmpPoints.Length][]; peaks = new UInt16[poissonPeaks.Count]; int count = 0; for (int i = 0; i < indexs.Length; ++i) { var p = tmpPoints[i]; points[i] = new UInt16[] { (UInt16)((p >> 16) & 0xffff), (UInt16)(p & 0xffff) }; if (indexs[i] < peaks.Length) { peaks[count++] = (UInt16)i; } } }
void OnValidate() { points = PoissonDiskSampling.GeneratePoints(radius, regionSize, rejectionSamples); }