예제 #1
0
    public void FifthTest()
    {
        Generator   gen         = new Generator();
        BiomeObject biomeObject = new BiomeObject();

        gen.biomeObjects.Add(biomeObject);
        Assert.That(gen.biomeObjects != null, Is.EqualTo(true));
    }
예제 #2
0
    public void SixthTest()
    {
        Generator   gen         = new Generator();
        BiomeObject biomeObject = new BiomeObject();

        biomeObject.name = "test";
        Assert.That(biomeObject.name, Is.EqualTo("test"));
    }
예제 #3
0
    public GameObject GetDecoration(string biomeName)
    {
        if (Random.value < trainStationChance)
        {
            currentGeneratedItemsCount[biomeName] += 1;
            return(trainStation.prefab);
        }

        for (int i = 0; i < generationMatrix.Count; i++)
        {
            if (biomeName == generationMatrix[i].name)
            {
                currentBiome = i;
            }
        }
        if (currentGeneratedItemsCount.ContainsKey(biomeName) && currentGeneratedItemsCount[biomeName] > minObjectsToSwitch)
        {
            if (Random.value <= .5)
            {
                //change biome
                currentGeneratedItemsCount[biomeName] = 0;
                int prevBiome = currentBiome;
                currentBiome = Random.Range(0, generationMatrix.Count);
                if (prevBiome == currentBiome)
                {
                    currentBiome = (prevBiome + 1) % generationMatrix.Count;
                }
            }
        }
        BiomeObject biome = generationMatrix[currentBiome];

        if (lastGeneratedItemIndex >= biome.decorations.Count)
        {
            lastGeneratedItemIndex = 0;
        }
        BiomeDecoration lastDecoration = biome.decorations[lastGeneratedItemIndex];
        float           value          = Random.value;

        for (int i = 0; i < lastDecoration.chanceArray.Count; i++)
        {
            if (value < lastDecoration.chanceArray[i])
            {
                lastGeneratedItemIndex = i;
                break;
            }
            value -= lastDecoration.chanceArray[i];
        }

        currentGeneratedItemsCount[biome.name] += 1;
        return(biome.decorations[lastGeneratedItemIndex].prefab);
    }
예제 #4
0
        public void Generate(TerrainGenerator terrain, Vector2 blockLowerLeft, Vector3 blockUpperRight, float strength)
        {
            if (objects.Length == 0)
            {
                return;
            }

            // preselect this block's objects
            foreach (var obj in objects)
            {
                if (obj.selectConsistent)
                {
                    obj.selectedIndex = RandomUtil.RandomInt(0, obj.objects.Length);
                }
            }

            // generate choices list
            float[] choices = objects.Select(o => o.probability).ToArray();

            //generate items
            int itemsToGenerate = Mathf.Clamp(Mathf.FloorToInt(strength * RandomUtil.RandomNormal(meanObjectsPerBlock, stdDevObjectsPerBlock)), 0, 2 * (int)meanObjectsPerBlock);

            for (int i = 0; i < itemsToGenerate; i++)
            {
                // select an item at random
                int         biomeObjectChoice = RandomUtil.RandomChoice(choices);
                BiomeObject biomeObject       = objects[biomeObjectChoice];

                // select a location at random
                float x = RandomUtil.RandomFloat(blockLowerLeft.x, blockUpperRight.x);
                float y = RandomUtil.RandomFloat(blockLowerLeft.y, blockUpperRight.y);

                // select object from list
                int        objectIndex = biomeObject.selectConsistent ? biomeObject.selectedIndex : RandomUtil.RandomInt(0, biomeObject.objects.Length);
                GameObject template    = biomeObject.objects[objectIndex];

                // scale object
                float      scale = RandomUtil.RandomNormal(biomeObject.meanScale, biomeObject.stdDevScale);
                GameObject obj   = terrain.PlaceObjectAt(template, x, y, 0.0f);
                obj.transform.localScale = new Vector3(scale, scale, scale);
            }
        }
예제 #5
0
    public void FourthTest()
    {
        Generator gen = new Generator();

        float[,] noise = Noise.GenerateNoiseMap(gen.seed, gen.worldWidth, gen.worldHeight, gen.noiseScale,
                                                gen.octaves, gen.persistance, gen.lacunarity, gen.offset,
                                                gen.terrainMask, gen.terrainMaskStrenght);

        TerrainHeight terrainHeight = new TerrainHeight();

        gen.heightRules.Add(terrainHeight);
        BiomeObject biomeObject = ScriptableObject.CreateInstance <BiomeObject>();

        gen.biomeObjects.Add(biomeObject);
        TerrainTemp terrainTemp = new TerrainTemp();

        gen.temperatureRules.Add(terrainTemp);
        gen.GenerateTerrain();
        Assert.That(gen.biomeLayer != null, Is.EqualTo(true));
    }