public void Abs(object value, object expected)
        {
            // Act
            var result = _sut.Abs(value);

            // Assert
            result.Should().Be(expected);
        }
Ejemplo n.º 2
0
        private float[] GenerateHeightMap(Biome[] biomes, int chunkX, int chunkZ)
        {
            int minX = (chunkX * 16) - 1;
            int minZ = (chunkZ * 16) - 1;
            var maxX = ((chunkX + 1) << 4) - 1;
            var maxZ = ((chunkZ + 1) << 4) - 1;

            int cx = (chunkX * 16);
            int cz = (chunkZ * 16);

            float q11 = MathHelpers.Abs(WaterLevel + (128f * biomes[0].MaxHeight) * _mainNoise.GetValue(minX, minZ));
            float q12 = MathHelpers.Abs(WaterLevel + (128f * biomes[15].MaxHeight) * _mainNoise.GetValue(minX, maxZ));

            float q21 = MathHelpers.Abs(WaterLevel + (128f * biomes[240].MaxHeight) * _mainNoise.GetValue(maxX, minZ));
            float q22 = MathHelpers.Abs(WaterLevel + (128f * biomes[255].MaxHeight) * _mainNoise.GetValue(maxX, maxZ));

            /*float q11 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(minX, minZ));
            *  float q12 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(minX, maxZ));
            *
            *  float q21 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(maxX, minZ));
            *  float q22 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(maxX, maxZ));*/

            float[] heightMap = new float[16 * 16];

            for (int x = 0; x < 16; x++)
            {
                float rx = cx + x;

                for (int z = 0; z < 16; z++)
                {
                    float rz = cz + z;

                    var baseNoise = MathHelpers.BilinearCmr(
                        rx, rz,
                        q11,
                        q12,
                        q21,
                        q22,
                        minX, maxX, minZ, maxZ);

                    heightMap[(x << 4) + z] = baseNoise;                     //WaterLevel + ((128f * baseNoise));
                }
            }
            return(heightMap);
        }
Ejemplo n.º 3
0
        public override void Decorate(ChunkColumn column, Biome biome, float[] thresholdMap, int x, int y, int z, bool surface,
                                      bool isBelowMaxHeight)
        {
            if (surface || column.GetBlock(x, y, z) != 1 && isBelowMaxHeight)
            {
                return;
            }

            if (isBelowMaxHeight && !surface)
            {
                int rx = column.x * 16 + x;
                int rz = column.z * 16 + z;

                var noise = _simplex.GetValue(rx, y, rz);

                foreach (var ore in Ores.Where(o => o.MinY <y && o.MaxY> y))
                {
                    var weightOffsets = (ore.MaxY > 30) ? HighWeightOffset : LowWeightOffset;

                    if (MathHelpers.Abs(noise) * 3f < ore.Rarity)
                    {
                        double weight = 0;
                        for (int i = 0; i < 4; i++)
                        {
                            weight += _random.NextDouble();
                        }

                        weight /= ore.Rarity;
                        weight  = weightOffsets[0] - MathHelpers.Abs((float)weight - weightOffsets[1]);

                        if (noise > weight)
                        {
                            int xOffset = 0;
                            int zOffset = 0;
                            int yOffset = 0;
                            for (int i = 0; i < _random.Next(0, ore.Abundance); i++)
                            {
                                int    offset  = _random.Next(0, 3);
                                double offset2 = _random.NextDouble();
                                if (offset.Equals(0) && offset2 < 0.4)
                                {
                                    xOffset += 1;
                                }
                                else if (offset.Equals(1) && offset2 >= 0.4 && offset2 < 0.65)
                                {
                                    yOffset += 1;
                                }
                                else
                                {
                                    zOffset += 1;
                                }

                                var mX = Math.Min(x + xOffset, x);
                                var my = Math.Min(y + yOffset, ore.MaxY);
                                var mz = Math.Min(z + zOffset, z);

                                if (column.GetBlock(mX, my, mz) != 1)
                                {
                                    return;
                                }
                                column.SetBlock(mX, my, mz, ore.ID);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
 private static float GetSquaredDistance(Biome biome, float temp, float rain)
 {
     return(MathHelpers.Abs((biome.Temperature - temp) * (biome.Temperature - temp) + (biome.Downfall - rain) * (biome.Downfall - rain)));
 }