Пример #1
0
        public string ToFixedSizeString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ID.ToString().PadLeft(10, '0'));
            sb.Append('^');
            sb.Append(INT1.ToString().PadLeft(10, '0'));
            sb.Append('^');
            sb.Append(INT2.ToString().PadLeft(10, '0'));
            sb.Append('^');
            sb.Append(INT3.ToString().PadLeft(10, '0'));
            sb.Append('^');
            sb.Append(DT1.PadLeft(25, '#'));
            sb.Append('^');
            sb.Append(DT2.PadLeft(25, '#'));
            sb.Append('^');
            sb.Append(DT3.PadLeft(25, '#'));
            sb.Append('^');
            sb.Append(VAR1.PadLeft(100, '#'));
            sb.Append('^');
            sb.Append(VAR2.PadLeft(100, '#'));
            sb.Append('^');
            sb.Append(VAR3.PadLeft(100, '#'));

            return(sb.ToString());
        }
Пример #2
0
        public Chunk ChunkGlobal(INT3 globalPosition)
        {
            INT3 localPos = (globalPosition - basePosition).AlignedDown(16);
            int  index    = (localPos.x >> 4) + (localPos.y >> 4) * 4 + (localPos.z >> 4) * 16;

            return(chunks[index]);
        }
Пример #3
0
        public void TrackVisibleChunks(GameContext 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.regionInfo.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]);
            }
        }
Пример #4
0
 void ExpandMap()
 {
     foreach (var playerInfo in gameContext.playerInfos.Values)
     {
         INT3 p  = playerInfo.positionI;
         INT2 p1 = new INT2(p.x, p.z).AlignedDown(64);
         for (int x = -192; x < 256; x += 64)
         {
             for (int y = -192; y < 256; y += 64)
             {
                 cover64.Add(new INT2(p1.x + x, p1.y + y));
             }
         }
     }
     foreach (var p64 in cover64)
     {
         int filledCount = 0;
         if (gameContext.regionInfo64.TryGetValue(p64, out var regionInfo64))
         {
             if (regionInfo64.m_generatorFilled)
             {
                 continue;
             }
         }
         else
         {
             regionInfo64 = new RegionInfo();
             gameContext.regionInfo64[p64] = regionInfo64;
         }
         for (int x = 0; x < 64; x += 16)
         {
             for (int y = 0; y < 64; y += 16)
             {
                 INT2 position = new INT2(p64.x + x, p64.y + y);
                 if (!gameContext.regionInfo.TryGetValue(position, out var regionInfo) || !regionInfo.m_generatorFilled)
                 {
                     chunkGenerator.FillRegion(position.x, position.y, gameContext);
                 }
                 else
                 {
                     filledCount++;
                 }
             }
         }
         if (filledCount == 16)
         {
             regionInfo64.m_generatorFilled = true;
         }
     }
     cover64.Clear();
 }
Пример #5
0
 public bool CastRay(int filter, out INT3 result, out INT3 surfaceHit)
 {
     result     = new INT3();
     surfaceHit = new INT3();
     return(false);
 }
Пример #6
0
 public bool TryGetBlock(INT3 position, out int oValue) => TryGetBlock(position.x, position.y, position.z, out oValue);