Example #1
0
        public override void Dispose()
        {
            if (loadedMapData != null)
            {
                foreach (MultiChunkMapComponent cmp in loadedMapData.Values)
                {
                    cmp?.ActuallyDispose();
                }
            }

            MultiChunkMapComponent.DisposeStatic();

            base.Dispose();
        }
Example #2
0
        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;
            }
        }
Example #3
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");
        }