// Update is called once per frame
    void Update()
    {
        ArrayList o = new ArrayList();

        lock (creationQueue)
        {
            int countCreation = 0;
            while (creationQueue.Count > 0 && countCreation < 1)
            {
                countCreation++;
                ChunkCreationParameters para = creationQueue.Dequeue();
                o.Add(para);
            }
        }
        foreach (ChunkCreationParameters para in o)
        {
            chunkManager.CreateChunk(para.x, para.y, para.z, para.ids);
        }

        lock (relationQueue)
        {
            int countRelations = 0;
            while (relationQueue.Count > 0 && countRelations < 64)
            {
                countRelations++;
                Chunk c = relationQueue.Dequeue();
                if (c.GetChunkDistanceToPlayer() > Chunk.renderDistanceSquared)
                {
                    continue;
                }
                countRelations++;
                chunkManager.UpdateRelations(c);
            }
        }

        lock (renderQueue)
        {
            int countRender = 0;
            while (renderQueue.Count > 0 && countRender < 32)
            {
                Chunk c = renderQueue.Dequeue();
                if (c.GetChunkDistanceToPlayer() > Chunk.renderDistanceSquared)
                {
                    continue;
                }
                countRender++;
                c.RenderMesh();
            }
        }
    }
    public void QueueCreation(int x, int y, int z, byte[] ids)
    {
        ChunkCreationParameters c = new ChunkCreationParameters()
        {
            x   = x,
            y   = y,
            z   = z,
            ids = ids
        };

        lock (creationQueue)
        {
            creationQueue.Enqueue(c);
        }
    }