public void Abs(object value, object expected) { // Act var result = _sut.Abs(value); // Assert result.Should().Be(expected); }
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); }
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); } } } } } }
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))); }