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); }