void Start() { Camera mainCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <Camera>(); Vector2[] spawnpoints = PoissonDisc.Bridsons(transform.position, minDistance, numSpawns, 10, mainCamera.transform.position.x + mainCamera.orthographicSize * mainCamera.aspect - 1f, mainCamera.transform.position.x - mainCamera.orthographicSize * mainCamera.aspect + 1f, mainCamera.transform.position.y + mainCamera.orthographicSize - 1f, mainCamera.transform.position.y - mainCamera.orthographicSize + 1f); System.Random rng = new System.Random(); foreach (Vector2 point in spawnpoints) { GameObject spawnee = (GameObject)GameObject.Instantiate(spawnedPrefabs[rng.Next(spawnedPrefabs.Length)]); spawnee.transform.position = point; } }
private void GenerateDebugLevel() { elevationMap = new float[mapDimensions.width * mapDimensions.height]; moistureMap = new float[mapDimensions.width * mapDimensions.height]; terrainMap = new TerrainType[mapDimensions.width * mapDimensions.height]; for (int i = 0; i < mapDimensions.width * mapDimensions.height; i++) { terrainMap[i] = TerrainType.Grass; elevationMap[i] = 0.5f; moistureMap[i] = 0.5f; } List <Point> forestPoints = PoissonDisc.Distribute(terrainMap, forestParam.poissonSeedParameters, forestParam.allowedBiomes); foreach (Point p in forestPoints) { terrainMap[p.gridIndex] = TerrainType.Forest; } InitializePerlinMap(); }
public static TerrainType[] PopulateGrid(TerrainType[] originalMap, SeedGrowthParameters param, MapDimensions mapSettings) { grid = originalMap; parameters = param; ExternalPlacementCondition condition; switch (param.conditionType) { case PlacementCondition.Forest: condition = ForestConditon; break; case PlacementCondition.City: condition = CityCondition; break; default: condition = null; break; } Point seedLocation; List <Point> seeds = new List <Point>(); if (parameters.amountOfSeeds > 0) { seeds = PoissonDisc.Distribute(grid, param.poissonSeedParameters, param.allowedBiomes); } for (int seed = 0; seed < param.amountOfSeeds; seed++) { seedLocation = seeds[Random.Range(0, seeds.Count)]; for (int step = 0; step < param.amountOfGrowthSteps.GetRandomValue(); step++) { int kernelSize = parameters.kernelSize.GetRandomValue(); List <Point> createdArea = new List <Point>(); for (int xOffset = -kernelSize; xOffset <= kernelSize; xOffset++) { for (int yOffset = -kernelSize; yOffset <= kernelSize; yOffset++) { Point neighbour = new Point(seedLocation.x + xOffset, seedLocation.y + yOffset); //Checking all conditions of the neighbour if (neighbour.IsInsideGrid() && IsCorrectTile(neighbour) && condition(seedLocation, neighbour)) { float chanceOffset = CalculatePlacementChance(seedLocation, neighbour, kernelSize); //Lower chance for placing a forest tile the farther you are away if (Random.Range(0f, 1f) < chanceOffset) { grid[neighbour.gridIndex] = param.desiredTerrain; createdArea.Add(neighbour); } } } } if (createdArea.Count > 0) { seedLocation = createdArea[Random.Range(0, createdArea.Count)]; } } } return(grid); }