IEnumerator ChunksInSquare(Vector3 center, int radius, ChunkOperation delegateOperation, int iterationsPerFrame) { int iterationCount = 0; for (int x = -radius; x < radius + 1; x++) { for (int z = -radius; z < radius + 1; z++) { Vector3 offset = new Vector3(x, 0, z) * chunkSize; Vector3 position = center + offset; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } } CoroutineComplete(); }
public ModifiedTileInfo(HexChunk chunk, ChunkOperation operation) { Chunk = chunk; Operation = operation; }
private void ParseSection(FileReader reader, ChunkOperation opCode, uint sectionSize) { Console.WriteLine($"OPCODE {opCode}"); switch (opCode) { case ChunkOperation.Header: reader.ReadBytes(0x18); Header = reader.ReadStruct <FileHeader>(); break; case ChunkOperation.VertexPosition: buffer.PositionsOffset = GetVertexOffset(reader); break; case ChunkOperation.VertexNormal: buffer.NormalsOffset = GetVertexOffset(reader); break; case ChunkOperation.VertexNBT: buffer.NBTOffset = GetVertexOffset(reader); break; case ChunkOperation.VertexUV0: case ChunkOperation.VertexUV1: case ChunkOperation.VertexUV2: case ChunkOperation.VertexUV3: case ChunkOperation.VertexUV4: case ChunkOperation.VertexUV5: case ChunkOperation.VertexUV6: case ChunkOperation.VertexUV7: buffer.TexCoordsOffset.Add(GetVertexOffset(reader)); break; case ChunkOperation.VertexColor: buffer.ColorsOffset = GetVertexOffset(reader); break; case ChunkOperation.Texture: Textures = ReadTextures(reader); break; case ChunkOperation.TextureAttribute: TextureAttributes = reader.ParseStructs <TextureAttribute>(); break; case ChunkOperation.Material: MaterialData = new MaterialList(reader); break; case ChunkOperation.SkinningIndices: ushort[] indices = reader.ParsePrimitive <ushort>(); ParseSkinningIndices(indices); break; case ChunkOperation.Envelope: Envelopes = reader.ParseArray <Envelope>(); break; case ChunkOperation.Mesh: Shapes = ReadShapes(reader, buffer).ToList(); break; case ChunkOperation.Joint: Joints = reader.ParseArray <Joint>(); break; case ChunkOperation.JointName: JointNames = reader.ParsePrimitive <string>(); break; } }
IEnumerator ChunksInSpiral(Vector3 center, int radius, ChunkOperation delegateOperation, int iterationsPerFrame) { Vector3 position = center; // Trim radius to allow buffer of generated chunks delegateOperation(position); int iterationCount = 0; int increment = 1; for (int i = 0; i < radius; i++) { // right then back for (int r = 0; r < increment; r++) { position += Vector3.right * chunkSize; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } for (int b = 0; b < increment; b++) { position += Vector3.back * chunkSize; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } increment++; // left then forward for (int l = 0; l < increment; l++) { position += Vector3.left * chunkSize; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } for (int f = 0; f < increment; f++) { position += Vector3.forward * chunkSize; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } increment++; } // Square made by spiral is always missing one corner for (int r = 0; r < increment - 1; r++) { position += Vector3.right * chunkSize; if (delegateOperation(position)) { iterationCount++; if (iterationCount >= iterationsPerFrame) { iterationCount = 0; yield return(null); } } } CoroutineComplete(); }
public ChunkSection(long pos, uint size, int opcode) { Position = pos; Size = size; OpCode = (ChunkOperation)opcode; }