Ejemplo n.º 1
0
    public void BuildMesh(object data)
    {
        try
        {
            MeshDataGroup group = new MeshDataGroup();

            for (int y = Position.y; y < Position.y + Chunk.Size; y++)
            {
                for (int z = Position.z; z < Position.z + Chunk.Size; z++)
                {
                    for (int x = Position.x; x < Position.x + Chunk.Size; x++)
                    {
                        Block block = Map.GetBlock(x, y, z);

                        if (block.ID != BlockID.Air)
                        {
                            block.Build(x, y, z, group.GetData(block.MeshIndex()));
                        }
                    }
                }
            }

            invisible = true;
            PreparedMeshInfo info = new PreparedMeshInfo(group, this);
            Map.ProcessMeshData(info);
        }
        catch (System.Exception e)
        {
            Logger.LogError("Error while building meshes.", e.Message, e.StackTrace);
            Engine.SignalQuit();
        }
    }
Ejemplo n.º 2
0
    public void UpdateTick()
    {
        while (preparedMeshes.Count > 0)
        {
            PreparedMeshInfo info = preparedMeshes.Dequeue();

            for (int i = 0; i < MeshDataGroup.MeshCount; i++)
            {
                info.chunk.SetMesh(info.group.GetMesh(i), i);
            }
        }

        for (int c = 0; c < chunks.Length; c++)
        {
            chunks[c].DrawMeshes();
        }
    }
Ejemplo n.º 3
0
 public static void ProcessMeshData(PreparedMeshInfo info)
 {
     preparedMeshes.Enqueue(info);
 }