本文整理汇总了C#中IChunk.GetBlockID方法的典型用法代码示例。如果您正苦于以下问题:C# IChunk.GetBlockID方法的具体用法?C# IChunk.GetBlockID怎么用?C# IChunk.GetBlockID使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IChunk
的用法示例。
在下文中一共展示了IChunk.GetBlockID方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
var noise = new Perlin();
noise.Seed = world.Seed;
var chanceNoise = new ClampNoise(noise);
chanceNoise.MaxValue = 2;
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
var blockX = MathHelper.ChunkToBlockX(x, chunk.Coordinates.X);
var blockZ = MathHelper.ChunkToBlockZ(z, chunk.Coordinates.Z);
var height = chunk.HeightMap[x * Chunk.Width + z];
if (noise.Value2D(blockX, blockZ) > 0)
{
var blockLocation = new Coordinates3D(x, height, z);
var plantPosition = blockLocation + Coordinates3D.Up;
if (chunk.GetBlockID(blockLocation) == biome.SurfaceBlock && plantPosition.Y < Chunk.Height)
{
var chance = chanceNoise.Value2D(blockX, blockZ);
if (chance < 1)
{
var bushNoise = chanceNoise.Value2D(blockX * 0.7, blockZ * 0.7);
var grassNoise = chanceNoise.Value2D(blockX * 0.3, blockZ * 0.3);
if (biome.Plants.Contains(PlantSpecies.Deadbush) && bushNoise > 1 && chunk.GetBlockID(blockLocation) == SandBlock.BlockID)
{
GenerateDeadBush(chunk, plantPosition);
continue;
}
if (biome.Plants.Contains(PlantSpecies.TallGrass) && grassNoise > 0.3 && grassNoise < 0.95)
{
byte meta = (grassNoise > 0.3 && grassNoise < 0.45 && biome.Plants.Contains(PlantSpecies.Fern)) ? (byte)0x2 : (byte)0x1;
GenerateTallGrass(chunk, plantPosition, meta);
continue;
}
}
else
{
var flowerTypeNoise = chanceNoise.Value2D(blockX * 1.2, blockZ * 1.2);
if (biome.Plants.Contains(PlantSpecies.Rose) && flowerTypeNoise > 0.8 && flowerTypeNoise < 1.5)
{
GenerateRose(chunk, plantPosition);
}
else if (biome.Plants.Contains(PlantSpecies.Dandelion) && flowerTypeNoise <= 0.8)
{
GenerateDandelion(chunk, plantPosition);
}
}
}
}
}
}
}
示例2: GenerateHeightMap
private void GenerateHeightMap(IChunk chunk)
{
Coordinates3D coords;
var map = new byte[Chunk.Width, Chunk.Depth];
for (byte x = 0; x < Chunk.Width; x++)
{
for (byte z = 0; z < Chunk.Depth; z++)
{
for (byte y = (byte)(chunk.GetHeight(x, z) + 2); y > 0; y--)
{
if (y >= Chunk.Height)
continue;
coords.X = x; coords.Y = y - 1; coords.Z = z;
var id = chunk.GetBlockID(coords);
if (id == 0)
continue;
var provider = BlockRepository.GetBlockProvider(id);
if (provider.LightOpacity != 0)
{
map[x, z] = y;
break;
}
}
}
}
HeightMaps[chunk.Coordinates] = map;
}
示例3: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
var noise = new Perlin();
noise.Seed = world.Seed;
var chanceNoise = new ClampNoise(noise);
chanceNoise.MaxValue = 2;
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
var blockX = MathHelper.ChunkToBlockX(x, chunk.Coordinates.X);
var blockZ = MathHelper.ChunkToBlockZ(z, chunk.Coordinates.Z);
var height = chunk.HeightMap[x * Chunk.Width + z];
if (biome.Plants.Contains(PlantSpecies.Cactus) && chanceNoise.Value2D(blockX, blockZ) > 1.7)
{
var blockLocation = new Coordinates3D(x, height, z);
var cactiPosition = blockLocation + Coordinates3D.Up;
if (chunk.GetBlockID(blockLocation).Equals(SandBlock.BlockID))
{
var HeightChance = chanceNoise.Value2D(blockX, blockZ);
var CactusHeight = (HeightChance < 1.4) ? 2 : 3;
Decoration.GenerateColumn(chunk, cactiPosition, CactusHeight, CactusBlock.BlockID);
}
}
}
}
}
示例4: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
for (int x = 0; x < Chunk.Width; x++)
{
for (int z = 0; z < Chunk.Depth; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
var height = chunk.HeightMap[x * Chunk.Width + z];
for (int y = height; y <= WaterLevel; y++)
{
var blockLocation = new Coordinates3D(x, y, z);
int blockId = chunk.GetBlockID(blockLocation);
if (blockId.Equals(AirBlock.BlockID))
{
chunk.SetBlockID(blockLocation, biome.WaterBlock);
var below = blockLocation + Coordinates3D.Down;
if (!chunk.GetBlockID(below).Equals(AirBlock.BlockID) && !chunk.GetBlockID(below).Equals(biome.WaterBlock))
{
if (!biome.WaterBlock.Equals(LavaBlock.BlockID) && !biome.WaterBlock.Equals(StationaryLavaBlock.BlockID))
{
var random = new Random(world.Seed);
if (random.Next(100) < 40)
{
chunk.SetBlockID(below, ClayBlock.BlockID);
}
else
{
chunk.SetBlockID(below, SandBlock.BlockID);
}
}
}
}
}
for (int y = 4; y < height / 8; y++)
{
var blockLocation = new Coordinates3D(x, y, z);
int blockId = chunk.GetBlockID(blockLocation);
if (blockId.Equals(AirBlock.BlockID))
{
chunk.SetBlockID(blockLocation, LavaBlock.BlockID);
}
}
}
}
}
示例5: CoverIce
bool CoverIce(IChunk chunk, IBiomeRepository biomes, Coordinates3D location)
{
const int maxDistance = 4;
var adjacent = new[] {
location + new Coordinates3D(-maxDistance, 0, 0),
location + new Coordinates3D(maxDistance, 0, 0),
location + new Coordinates3D(0, 0, maxDistance),
location + new Coordinates3D(0, 0, -maxDistance),
};
for (int i = 0; i < adjacent.Length; i++)
{
var check = adjacent[i];
if (check.X < 0 || check.X >= Chunk.Width || check.Z < 0 || check.Z >= Chunk.Depth || check.Y < 0 || check.Y >= Chunk.Height)
return false;
var biome = biomes.GetBiome(chunk.Biomes[check.X * Chunk.Width + check.Z]);
if (chunk.GetBlockID(check).Equals(biome.SurfaceBlock) || chunk.GetBlockID(check).Equals(biome.FillerBlock))
return true;
}
return false;
}
示例6: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
var noise = new Perlin();
noise.Seed = world.Seed;
var chanceNoise = new ClampNoise(noise);
chanceNoise.MaxValue = 1;
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
var height = chunk.HeightMap[x * Chunk.Width + z];
var blockX = MathHelper.ChunkToBlockX(x, chunk.Coordinates.X);
var blockZ = MathHelper.ChunkToBlockZ(z, chunk.Coordinates.Z);
if (biome.Plants.Contains(PlantSpecies.SugarCane))
{
if (noise.Value2D(blockX, blockZ) > 0.65)
{
var blockLocation = new Coordinates3D(x, height, z);
var sugarCaneLocation = blockLocation + Coordinates3D.Up;
var neighborsWater = Decoration.NeighboursBlock(chunk, blockLocation, WaterBlock.BlockID) || Decoration.NeighboursBlock(chunk, blockLocation, StationaryWaterBlock.BlockID);
if (chunk.GetBlockID(blockLocation).Equals(GrassBlock.BlockID) && neighborsWater || chunk.GetBlockID(blockLocation).Equals(SandBlock.BlockID) && neighborsWater)
{
var random = new Random(world.Seed);
double heightChance = random.NextDouble();
int caneHeight = 3;
if (heightChance < 0.05)
caneHeight = 4;
else if (heightChance > 0.1 && height < 0.25)
caneHeight = 2;
Decoration.GenerateColumn(chunk, sugarCaneLocation, caneHeight, SugarcaneBlock.BlockID);
}
}
}
}
}
}
示例7: NeighboursBlock
public static bool NeighboursBlock(IChunk chunk, Coordinates3D location, byte block, byte meta = 0x0)
{
var surrounding = new[] {
location + Coordinates3D.Left,
location + Coordinates3D.Right,
location + Coordinates3D.Forwards,
location + Coordinates3D.Backwards,
};
for (int i = 0; i < surrounding.Length; i++)
{
var toCheck = surrounding[i];
if (toCheck.X < 0 || toCheck.X >= Chunk.Width || toCheck.Z < 0 || toCheck.Z >= Chunk.Depth || toCheck.Y < 0 || toCheck.Y >= Chunk.Height)
return false;
if (chunk.GetBlockID(toCheck).Equals(block))
{
if (meta != 0x0 && chunk.GetMetadata(toCheck) != meta)
return false;
return true;
}
}
return false;
}
示例8: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
if (biome.Temperature < 0.15)
{
var height = chunk.HeightMap[x * Chunk.Width + z];
for (int y = height; y < Chunk.Height; y++)
{
var location = new Coordinates3D(x, y, z);
if (chunk.GetBlockID(location).Equals(StationaryWaterBlock.BlockID) || chunk.GetBlockID(location).Equals(WaterBlock.BlockID))
chunk.SetBlockID(location, IceBlock.BlockID);
else
{
var below = chunk.GetBlockID(location);
byte[] whitelist =
{
DirtBlock.BlockID,
GrassBlock.BlockID,
IceBlock.BlockID,
LeavesBlock.BlockID
};
if (y == height && whitelist.Any(w => w == below))
{
if (chunk.GetBlockID(location).Equals(IceBlock.BlockID) && CoverIce(chunk, biomes, location))
chunk.SetBlockID((location + Coordinates3D.Up), SnowfallBlock.BlockID);
else if (!chunk.GetBlockID(location).Equals(SnowfallBlock.BlockID) && !chunk.GetBlockID(location).Equals(AirBlock.BlockID))
chunk.SetBlockID((location + Coordinates3D.Up), SnowfallBlock.BlockID);
}
}
}
}
}
}
}
示例9: GetBlockDataFromChunk
private BlockDescriptor GetBlockDataFromChunk(Coordinates3D adjustedCoordinates, IChunk chunk, Coordinates3D coordinates)
{
return new BlockDescriptor
{
ID = chunk.GetBlockID(adjustedCoordinates),
Metadata = chunk.GetMetadata(adjustedCoordinates),
BlockLight = chunk.GetBlockLight(adjustedCoordinates),
SkyLight = chunk.GetSkyLight(adjustedCoordinates),
Coordinates = coordinates
};
}
示例10: ScheduleUpdatesForChunk
void ScheduleUpdatesForChunk(IWorld world, IChunk chunk)
{
chunk.UpdateHeightMap();
int _x = chunk.Coordinates.X * Chunk.Width;
int _z = chunk.Coordinates.Z * Chunk.Depth;
Coordinates3D coords, _coords;
for (byte x = 0; x < Chunk.Width; x++)
{
for (byte z = 0; z < Chunk.Depth; z++)
{
for (int y = 0; y < chunk.GetHeight(x, z); y++)
{
_coords.X = x; _coords.Y = y; _coords.Z = z;
var id = chunk.GetBlockID(_coords);
if (id == 0)
continue;
coords.X = _x + x; coords.Y = y; coords.Z = _z + z;
var provider = BlockRepository.GetBlockProvider(id);
provider.BlockLoadedFromChunk(coords, this, world);
}
}
}
}
示例11: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
Noise = new Perlin();
Noise.Seed = world.Seed;
ChanceNoise = new ClampNoise(Noise);
ChanceNoise.MaxValue = 2;
Coordinates2D? lastTree = null;
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
var biome = biomes.GetBiome(chunk.Biomes[x * Chunk.Width + z]);
var blockX = MathHelper.ChunkToBlockX(x, chunk.Coordinates.X);
var blockZ = MathHelper.ChunkToBlockZ(z, chunk.Coordinates.Z);
var height = chunk.HeightMap[x * Chunk.Width + z];
if (lastTree != null && lastTree.Value.DistanceTo(new Coordinates2D(x, z)) < biome.TreeDensity)
continue;
if (Noise.Value2D(blockX, blockZ) > 0.3)
{
var location = new Coordinates3D(x, height, z);
var id = chunk.GetBlockID(location);
var provider = world.BlockRepository.GetBlockProvider(id);
if (id == DirtBlock.BlockID || id == GrassBlock.BlockID || id == SnowfallBlock.BlockID
|| (id != StationaryWaterBlock.BlockID && id != WaterBlock.BlockID
&& id != LavaBlock.BlockID && id != StationaryLavaBlock.BlockID
&& provider.BoundingBox == null))
{
if (provider.BoundingBox == null)
location.Y--;
var oakNoise = ChanceNoise.Value2D(blockX * 0.6, blockZ * 0.6);
var birchNoise = ChanceNoise.Value2D(blockX * 0.2, blockZ * 0.2);
var spruceNoise = ChanceNoise.Value2D(blockX * 0.35, blockZ * 0.35);
var baseCoordinates = location + Coordinates3D.Up;
if (biome.Trees.Contains(TreeSpecies.Oak) && oakNoise > 1.01 && oakNoise < 1.25)
{
var oak = new OakTree().GenerateAt(world, chunk, baseCoordinates);
if (oak)
{
lastTree = new Coordinates2D(x, z);
continue;
}
}
if (biome.Trees.Contains(TreeSpecies.Birch) && birchNoise > 0.3 && birchNoise < 0.95)
{
var birch = new BirchTree().GenerateAt(world, chunk, baseCoordinates);
if (birch)
{
lastTree = new Coordinates2D(x, z);
continue;
}
}
if (biome.Trees.Contains(TreeSpecies.Spruce) && spruceNoise < 0.75)
{
var random = new Random(world.Seed);
var type = random.Next(1, 2);
var generated = false;
if (type.Equals(1))
generated = new PineTree().GenerateAt(world, chunk, baseCoordinates);
else
generated = new ConiferTree().GenerateAt(world, chunk, baseCoordinates);
if (generated)
{
lastTree = new Coordinates2D(x, z);
continue;
}
}
}
}
}
}
}
示例12: GenerateHeightMap
private void GenerateHeightMap(IChunk chunk)
{
var map = new byte[Chunk.Width, Chunk.Depth];
for (int x = 0; x < Chunk.Width; x++)
{
for (int z = 0; z < Chunk.Depth; z++)
{
for (byte y = Chunk.Height - 1; y > 0; y--)
{
var id = chunk.GetBlockID(new Coordinates3D(x, y - 1, z));
var provider = BlockRepository.GetBlockProvider(id);
if (provider.LightOpacity != 0)
{
map[x, z] = y;
break;
}
}
}
}
HeightMaps[chunk.Coordinates] = map;
}
示例13: GenerateSphere
protected static void GenerateSphere(IChunk chunk, Coordinates3D location, int radius, byte block, byte meta = 0x0)
{
for (int i = -radius; i <= radius; i = (i + 1))
{
for (int j = -radius; j <= radius; j = (j + 1))
{
for (int k = -radius; k <= radius; k = (k + 1))
{
int max = (int)Math.Sqrt((i * i) + (j * j) + (k * k));
if (max <= radius)
{
int x = location.X + i;
int y = location.Y + k;
int z = location.Z + j;
if (x < 0 || x >= Chunk.Width || z < 0 || z >= Chunk.Depth || y < 0 || y >= Chunk.Height)
continue;
var currentBlock = new Coordinates3D(x, y, z);
if (chunk.GetBlockID(currentBlock).Equals(0))
{
chunk.SetBlockID(currentBlock, block);
chunk.SetMetadata(currentBlock, meta);
}
}
}
}
}
}
示例14: GenerateVanillaCircle
protected void GenerateVanillaCircle(IChunk chunk, Coordinates3D location, int radius, byte block, byte meta = 0x0, double corner = 0)
{
for (int i = -radius; i <= radius; i = (i + 1))
{
for (int j = -radius; j <= radius; j = (j + 1))
{
int max = (int)Math.Sqrt((i * i) + (j * j));
if (max <= radius)
{
if (i.Equals(-radius) && j.Equals(-radius)
|| i.Equals(-radius) && j.Equals(radius)
|| i.Equals(radius) && j.Equals(-radius)
|| i.Equals(radius) && j.Equals(radius))
{
if (corner + radius * 0.2 < 0.4 || corner + radius * 0.2 > 0.7 || corner.Equals(0))
continue;
}
int x = location.X + i;
int z = location.Z + j;
var currentBlock = new Coordinates3D(x, location.Y, z);
if (chunk.GetBlockID(currentBlock).Equals(0))
{
chunk.SetBlockID(currentBlock, block);
chunk.SetMetadata(currentBlock, meta);
}
}
}
}
}
示例15: Decorate
public void Decorate(IWorld world, IChunk chunk, IBiomeRepository biomes)
{
//Test Seed: 291887241
var perlin = new Perlin();
perlin.Lacunarity = 1;
perlin.Amplitude = 7;
perlin.Frequency = 0.015;
perlin.Seed = world.Seed;
var chanceNoise = new ClampNoise(perlin);
var noise = new ScaledNoise(perlin);
var random = new Random(world.Seed);
var lowWeightOffset = new int[2] { 2, 3 };
var highWeightOffset = new int[2] { 2, 2 };
foreach (var data in Ores)
{
var midpoint = (data.MaxY + data.MinY) / 2;
var weightOffsets = (data.MaxY > 30) ? highWeightOffset : lowWeightOffset;
const int weightPasses = 4;
for (int i = 0; i < data.Veins; i++)
{
double weight = 0;
for (int j = 0; j < weightPasses; j++)
{
weight += random.NextDouble();
}
weight /= data.Rarity;
weight = weightOffsets[0] - Math.Abs(weight - weightOffsets[1]);
double x = random.Next(0, Chunk.Width);
double z = random.Next(0, Chunk.Depth);
double y = weight * midpoint;
double randomOffsetX = (float)random.NextDouble() - 1;
double randomOffsetY = (float)random.NextDouble() - 1;
double randomOffsetZ = (float)random.NextDouble() - 1;
int abundance = random.Next(0, data.Abundance);
for (int k = 0; k < abundance; k++)
{
x += randomOffsetX;
y += randomOffsetY;
z += randomOffsetZ;
if (x >= 0 && z >= 0 && y >= data.MinY && x < Chunk.Width && y < data.MaxY && z < Chunk.Depth)
{
var biome = biomes.GetBiome(chunk.Biomes[(int)(x * Chunk.Width + z)]);
if (biome.Ores.Contains(data.Type) && chunk.GetBlockID(new Coordinates3D((int)x, (int)y, (int)z)).Equals(StoneBlock.BlockID))
chunk.SetBlockID(new Coordinates3D((int)x, (int)y, (int)z), data.ID);
}
var blockX = MathHelper.ChunkToBlockX((int)(x), chunk.Coordinates.X);
var blockZ = MathHelper.ChunkToBlockZ((int)(z), chunk.Coordinates.Z);
double offsetX = 0;
double offsetY = 0;
double offsetZ = 0;
int offset = random.Next(0, 3);
double offset2 = random.NextDouble();
if (offset.Equals(0) && offset2 < 0.4)
offsetX += 1;
else if (offset.Equals(1) && offset2 >= 0.4 && offset2 < 0.65)
offsetY += 1;
else
offsetZ += 1;
var newX = (int)(x + offsetX);
var newY = (int)(y + offsetY);
var newZ = (int)(z + offsetZ);
if (newX >= 0 && newZ >= 0 && newY >= data.MinY && newX < Chunk.Width && newY < data.MaxY && newZ < Chunk.Depth)
{
IBiomeProvider Biome = biomes.GetBiome(chunk.Biomes[newX * Chunk.Width + newZ]);
var coordinates = new Coordinates3D((int)newX, (int)newY, (int)newZ);
if (Biome.Ores.Contains(data.Type) && chunk.GetBlockID(coordinates).Equals(StoneBlock.BlockID))
{
chunk.SetBlockID(coordinates, data.ID);
}
}
}
}
}
}