Пример #1
0
    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;
        }
    }
Пример #2
0
    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();
    }
Пример #3
0
    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);
    }