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()); }
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]); }
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]); } }
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(); }
public bool CastRay(int filter, out INT3 result, out INT3 surfaceHit) { result = new INT3(); surfaceHit = new INT3(); return(false); }
public bool TryGetBlock(INT3 position, out int oValue) => TryGetBlock(position.x, position.y, position.z, out oValue);