private void Event_ChunkDirty(Vec3i chunkCoord, IWorldChunk chunk, EnumChunkDirtyReason reason) { if (allNetworksFullyLoaded || reason == EnumChunkDirtyReason.MarkedDirty) { return; } allNetworksFullyLoaded = true; nowFullyLoaded.Clear(); foreach (var network in data.networksById.Values) { if (network.fullyLoaded) { continue; } allNetworksFullyLoaded = false; if (network.inChunks.ContainsKey(chunkCoord)) { testFullyLoaded(network); if (network.fullyLoaded) { nowFullyLoaded.Add(network); } } } for (int i = 0; i < nowFullyLoaded.Count; i++) { RebuildNetwork(nowFullyLoaded[i]); } }
private void Event_OnChunkDirty(Vec3i chunkCoord, IWorldChunk chunk, EnumChunkDirtyReason reason) { //api.Logger.Notification("NowDirty @{0}/{1}", chunkCoord.X, chunkCoord.Z); lock (chunksToGenLock) { if (!mapSink.IsOpened) { return; } tmpMccoord.Set(chunkCoord.X / MultiChunkMapComponent.ChunkLen, chunkCoord.Z / MultiChunkMapComponent.ChunkLen); tmpCoord.Set(chunkCoord.X, chunkCoord.Z); if (!loadedMapData.ContainsKey(tmpMccoord) && !curVisibleChunks.Contains(tmpCoord)) { return; } chunksToGen.Enqueue(new Vec2i(chunkCoord.X, chunkCoord.Z)); chunksToGen.Enqueue(new Vec2i(chunkCoord.X, chunkCoord.Z - 1)); chunksToGen.Enqueue(new Vec2i(chunkCoord.X - 1, chunkCoord.Z)); chunksToGen.Enqueue(new Vec2i(chunkCoord.X, chunkCoord.Z + 1)); chunksToGen.Enqueue(new Vec2i(chunkCoord.X + 1, chunkCoord.Z + 1)); } }
private void Event_ChunkDirty(Vec3i chunkCoord, IWorldChunk chunk, EnumChunkDirtyReason reason) { long index3d = MapUtil.Index3dL(chunkCoord.X, chunkCoord.Y, chunkCoord.Z, chunkMapSizeX, chunkMapSizeZ); ChunkRooms chunkrooms; Cuboidi cuboid; FastSetOfLongs set = new FastSetOfLongs(); set.Add(index3d); lock (roomsByChunkIndexLock) { roomsByChunkIndex.TryGetValue(index3d, out chunkrooms); if (chunkrooms != null) { set.Add(index3d); for (int i = 0; i < chunkrooms.Rooms.Count; i++) { cuboid = chunkrooms.Rooms[i].Location; int x1 = cuboid.Start.X / chunksize; int x2 = cuboid.End.X / chunksize; int y1 = cuboid.Start.Y / chunksize; int y2 = cuboid.End.Y / chunksize; int z1 = cuboid.Start.Z / chunksize; int z2 = cuboid.End.Z / chunksize; set.Add(MapUtil.Index3dL(x1, y1, z1, chunkMapSizeX, chunkMapSizeZ)); if (z2 != z1) { set.Add(MapUtil.Index3dL(x1, y1, z2, chunkMapSizeX, chunkMapSizeZ)); } if (y2 != y1) { set.Add(MapUtil.Index3dL(x1, y2, z1, chunkMapSizeX, chunkMapSizeZ)); if (z2 != z1) { set.Add(MapUtil.Index3dL(x1, y2, z2, chunkMapSizeX, chunkMapSizeZ)); } } if (x2 != x1) { set.Add(MapUtil.Index3dL(x2, y1, z1, chunkMapSizeX, chunkMapSizeZ)); if (z2 != z1) { set.Add(MapUtil.Index3dL(x2, y1, z2, chunkMapSizeX, chunkMapSizeZ)); } if (y2 != y1) { set.Add(MapUtil.Index3dL(x2, y2, z1, chunkMapSizeX, chunkMapSizeZ)); if (z2 != z1) { set.Add(MapUtil.Index3dL(x2, y2, z2, chunkMapSizeX, chunkMapSizeZ)); } } } } } foreach (long index in set) { roomsByChunkIndex.Remove(index); } } }
private void Event_ChunkDirty(Vec3i chunkCoord, IWorldChunk chunk, EnumChunkDirtyReason reason) { long index3d = MapUtil.Index3dL(chunkCoord.X, chunkCoord.Y, chunkCoord.Z, chunkMapSizeX, chunkMapSizeZ); lock (roomsByChunkIndexLock) { roomsByChunkIndex.Remove(index3d); } }
private void Event_OnChunkDirty(Vec3i chunkCoord, IWorldChunk chunk, EnumChunkDirtyReason reason) { if (reason == EnumChunkDirtyReason.NewlyCreated || !mapSink.IsOpened) { return; } if (!loadedMapData.ContainsKey(new Vec2i(chunkCoord.X, chunkCoord.Z))) { return; } lock (chunksToGenLock) { chunksToGen.Enqueue(new Vec2i(chunkCoord.X, chunkCoord.Z)); } }