예제 #1
0
        public TerrainResponseEvent nextResponse()
        {
            TerrainResponseEvent c = null;

            myReturnedChunks.TryDequeue(out c);
            return(c);
        }
예제 #2
0
        public override void workerFunction()
        {
            while (myShouldQuit == false)
            {
                UInt64 id;
                while (myRequsetedChunks.TryDequeue(out id) == true)
                {
                    if (checkDatabase(id) == false)
                    {
                        myClient.requestChunk(id);
                    }
                }

                //clear out anything that the generator has created
                TerrainResponseEvent tc = myClient.nextResponse();
                while (tc != null)
                {
                    Chunk chunk = myChunkCache.handleResponse(tc);
                    chunk.world = myWorld;
                    myAvaialbleChunks.Enqueue(chunk);
                    tc = myClient.nextResponse();
                }

                Thread.Sleep(10);
            }
        }
예제 #3
0
        public Chunk handleResponse(TerrainResponseEvent tcr)
        {
            Chunk chunk = new Chunk(Vector3.Zero);

            chunk.chunkKey = new ChunkKey(tcr.chunkId);
            byte[] data = decompressChunk(tcr.data.ToArray());
            chunk.deserialize(data);
            updateChunk(chunk);
            return(chunk);
        }