Пример #1
0
    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();
    }
Пример #2
0
 public ModifiedTileInfo(HexChunk chunk, ChunkOperation operation)
 {
     Chunk     = chunk;
     Operation = operation;
 }
Пример #3
0
        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;
            }
        }
Пример #4
0
    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();
    }
Пример #5
0
 public ChunkSection(long pos, uint size, int opcode)
 {
     Position = pos;
     Size     = size;
     OpCode   = (ChunkOperation)opcode;
 }