public static bool Prefix(long _key, bool _bDisplayed) { if (DistantTerrain.Instance == null) { return(true); } ChunkCluster chunkCluster = GameManager.Instance.World.ChunkClusters[0]; if (chunkCluster == null) { return(true); } if (!GameManager.IsSplatMapAvailable()) { Chunk chunkSync = chunkCluster.GetChunkSync(_key); if (_bDisplayed && chunkSync != null && chunkSync.NeedsOnlyCollisionMesh) { return(true); } DistantTerrain.Instance.ActivateChunk(WorldChunkCache.extractX(_key), WorldChunkCache.extractZ(_key), !_bDisplayed); return(false); } return(true); }
public static void SetSnow(int startX, int startZ, int width, int depth, ChunkCluster cluster, bool notifyRpc, bool log, bool AlreadyFilled, int height) { Write("Set snow " + startX + "," + startZ + " by " + width + "," + depth); //WorldBase world = cluster.GetWorld(); Chunk chunk = cluster.GetChunkSync(World.toChunkXZ(startX), World.toChunkXZ(startZ)); var worldPos = new Vector3i(startX, 0, startZ); var size = new Vector3i(width, height, depth); List <long> processed = new List <long>(); for (int x = 0; x < width; x++) { for (int z = 0; z <= depth; z++) { int worldX = x + startX; int worldZ = z + startZ; int chunkWorldX = World.toChunkXZ(worldX); int chunkWorldZ = World.toChunkXZ(worldZ); //var chunkX = World.toBlockXZ(worldX); //var chunkZ = World.toBlockXZ(worldZ); if (chunk == null || chunk.X != chunkWorldX || chunk.Z != chunkWorldZ) { Write("Getting chunk at " + chunkWorldX + "," + chunkWorldZ + " " + worldX + "," + worldZ); chunk = cluster.GetChunkSync(chunkWorldX, chunkWorldZ); if (chunk != null) { if (processed.Contains(chunk.Key)) { continue; } processed.Add(chunk.Key); ProcessChunk(chunk, worldPos, size, AlreadyFilled, log, notifyRpc, true); } } } } Write("Set Snow Complete"); }