public void IncreaseLevel(CPos cell, int level, int max_level)
        {
            // Initialize, on fresh impact.
            if (!tiles.ContainsKey(cell))
            {
                tiles[cell] = new TintedCell(this, cell, world.Map.CenterOfCell(cell));
            }

            tiles[cell].Ticks = Info.UpdateDelay;
            var new_level = tiles[cell].Level + level;

            if (new_level > max_level)
            {
                new_level = max_level;
            }

            // the given weapon can't saturate the cell anymore.
            if (tiles[cell].Level > new_level)
            {
                return;
            }

            tiles[cell].SetLevel(new_level);

            dirty.Add(cell);
        }
        void ITickRender.TickRender(WorldRenderer wr, Actor self)
        {
            var remove = new List <CPos>();

            foreach (var c in dirty)
            {
                if (self.World.FogObscures(c))
                {
                    continue;
                }

                if (renderedTiles.ContainsKey(c))
                {
                    world.Remove(renderedTiles[c]);
                    renderedTiles.Remove(c);
                }

                // synchronize observations with true value.
                if (tiles.ContainsKey(c))
                {
                    renderedTiles[c] = new TintedCell(tiles[c]);
                    world.Add(renderedTiles[c]);
                }

                remove.Add(c);
            }

            foreach (var r in remove)
            {
                dirty.Remove(r);
            }
        }
        // Returns true when it decays.
        public bool Decay(TintedCell tc, int updateDelay)
        {
            tc.Ticks--;
            if (tc.Ticks > 0)
            {
                return(false);
            }

            tc.Ticks = updateDelay;

            int dlevel = FalloutScale * tc.Level / 1000;

            // has to be decreased by at least 1 so that it disappears eventually.
            if (dlevel < 1)
            {
                dlevel = 1;
            }

            tc.SetLevel(tc.Level - dlevel);
            return(true);
        }