Beispiel #1
0
        public void TrackVisibleChunks(World gameContext)
        {
            Int3 aPos = playerInfo.PositionI.AlignedDown(16);

            for (int x = -128; x < 144; x += 16)
            {
                for (int z = -128; z < 144; z += 16)
                {
                    Int2 testPoint = new Int2(x + aPos.X, z + aPos.Z);

                    if (gameContext.regionInfos.TryGetValue(testPoint, out var regionInfo))
                    {
                        for (int y = regionInfo.m_minHeight; y < regionInfo.m_maxHeight; y += 16)
                        {
                            var chunkPosition = new Int3(aPos.X + x, y, aPos.Z + z);
                            //var chunk1 = gameCore.GetExistChunk(chunkPosition.x, chunkPosition.y, chunkPosition.z);
                            //if (playerInfo.visibleChunks.TryGetValue(chunkPosition, out var timeStamp1))
                            //{
                            //    if (chunk1 != null && chunk1.stamp > timeStamp1)
                            //    {
                            //        playerInfo.visibleChunks[chunkPosition] = chunk1.stamp;
                            //        NetBlock netBlock = netContext.GetNetBlock(1802856547/*'kuhc'*/, Chunk.c_minimumSize);
                            //        GUtility.ToNetBlock(chunk1, netBlock);
                            //        wrapLayout.SendNetBlock(netBlock);
                            //    }
                            //}
                            //else if (chunk1 != null)
                            //{
                            //    playerInfo.visibleChunks[chunkPosition] = chunk1.stamp;

                            //    NetBlock netBlock = netContext.GetNetBlock(1802856547/*'kuhc'*/, Chunk.c_minimumSize);
                            //    GUtility.ToNetBlock(chunk1, netBlock);
                            //    wrapLayout.SendNetBlock(netBlock);
                            //}
                        }
                        playerInfo.visibleRegions[testPoint] = regionInfo.m_recentUpdateTimeStamp;
                    }
                }
            }

            List <Int3> chunkCullResult = new List <Int3>();

            foreach (var pair in playerInfo.visibleChunks)
            {
                Int3 a = pair.Key - playerInfo.PositionI + new Int3(8, 8, 8);
                if (Math.Abs(a.X) + Math.Abs(a.Z) > 512)
                {
                    chunkCullResult.Add(pair.Key);
                }
            }
            for (int j = 0; j < chunkCullResult.Count; j++)
            {
                playerInfo.visibleChunks.Remove(chunkCullResult[j]);
            }
        }
Beispiel #2
0
        public void RemoveUnusedChunks()
        {
            List <Int3> chunkCullResult = new List <Int3>();

            foreach (var pair in visibleChunks)
            {
                Int3 a = pair.Key - PositionI + new Int3(8, 8, 8);
                if (Math.Abs(a.X) + Math.Abs(a.Z) > 512)
                {
                    chunkCullResult.Add(pair.Key);
                }
            }
            for (int j = 0; j < chunkCullResult.Count; j++)
            {
                visibleChunks.Remove(chunkCullResult[j]);
            }
        }