public override void Dispose() { if (loadedMapData != null) { foreach (MultiChunkMapComponent cmp in loadedMapData.Values) { cmp?.ActuallyDispose(); } } MultiChunkMapComponent.DisposeStatic(); base.Dispose(); }
public override void OnTick(float dt) { mtThread1secAccum += dt; if (mtThread1secAccum > 1) { List <Vec2i> toRemove = new List <Vec2i>(); foreach (var val in loadedMapData) { MultiChunkMapComponent mcmp = val.Value; if (!mcmp.AnyChunkSet || !mcmp.IsVisible(curVisibleChunks)) { mcmp.TTL -= 1; if (mcmp.TTL <= 0) { Vec2i mccord = val.Key; toRemove.Add(mccord); mcmp.ActuallyDispose(); } } else { mcmp.TTL = MultiChunkMapComponent.MaxTTL; } } foreach (var val in toRemove) { loadedMapData.TryRemove(val, out _); } mtThread1secAccum = 0; } }
void loadFromChunkPixels(Vec2i cord, int[] pixels /*, int sideSepia*/) { /*if (sideSepia == 255) * { * for (int i = 0; i < pixels.Length; i++) * { * int pixel = pixels[i]; * int r = pixel & 0xff; * int g = (pixel >> 8) & 0xff; * int b = (pixel >> 16) & 0xff; * * // Sepia * byte rs = (byte)Math.Min(255, (r * 0.393f) + (g * 0.769f) + (b * 0.189f)); * byte gs = (byte)Math.Min(255, (r * 0.349f) + (g * 0.686f) + (b * 0.168f)); * byte bs = (byte)Math.Min(255, (r * 0.272f) + (g * 0.534f) + (b * 0.131f)); * * pixels[i] = (rs) | (gs << 8) | (bs << 16) | (255 << 24); * } * } * else if (sideSepia != 0) * { * bool northSepia = (sideSepia & 1) > 0; * bool eastSepia = (sideSepia & 2) > 0; * bool southSepia = (sideSepia & 4) > 0; * bool westSepia = (sideSepia & 8) > 0; * * for (int i = 0; i < pixels.Length; i++) * { * int pixel = pixels[i]; * int r = pixel & 0xff; * int g = (pixel >> 8) & 0xff; * int b = (pixel >> 16) & 0xff; * * int x = i % chunksize; * int z = i / chunksize; * * int rnd = GameMath.MurmurHash3Mod(x, 0, z, chunksize / 2); * * /// North: Negative Z * /// East: Positive X * /// South: Positive Z * /// West: Negative X * bool sepia = * northSepia && rnd > z || * eastSepia && rnd > chunksize - x || * southSepia && rnd > chunksize - z || * westSepia && rnd > x * ; * * if (!sepia) continue; * * // Sepia * byte rs = (byte)Math.Min(255, (r * 0.393f) + (g * 0.769f) + (b * 0.189f)); * byte gs = (byte)Math.Min(255, (r * 0.349f) + (g * 0.686f) + (b * 0.168f)); * byte bs = (byte)Math.Min(255, (r * 0.272f) + (g * 0.534f) + (b * 0.131f)); * * pixels[i] = (rs) | (gs << 8) | (bs << 16) | (255 << 24); * } * }*/ Vec2i mcord = new Vec2i(cord.X / MultiChunkMapComponent.ChunkLen, cord.Y / MultiChunkMapComponent.ChunkLen); Vec2i baseCord = new Vec2i(mcord.X * MultiChunkMapComponent.ChunkLen, mcord.Y * MultiChunkMapComponent.ChunkLen); api.Event.EnqueueMainThreadTask(() => { MultiChunkMapComponent mccomp; if (!loadedMapData.TryGetValue(mcord, out mccomp)) { loadedMapData[mcord] = mccomp = new MultiChunkMapComponent(api as ICoreClientAPI, baseCord); } mccomp.setChunk(cord.X - baseCord.X, cord.Y - baseCord.Y, pixels); }, "chunkmaplayerready"); }