internal void OnMapGenerated(Map map, MapGeneratorDef usedMapGenerator) { RerollToolbox.StoreGeneratedThingIdsInMapState(map); var mapState = RerollToolbox.GetStateForMap(map); mapState.UsedMapGenerator = usedMapGenerator; if (!rerollInProgress) { mapState.ResourceBalance = MaxResourceBalance; } }
public void DoReroll() { var map = Find.CurrentMap; var logger = MapRerollController.Instance.Logger; if (RerollInProgress) { logger.Error("Cannot reroll geysers- reroll already in progress"); return; } if (map == null) { logger.Error("No visible map- cannot reroll geysers"); return; } var state = RerollToolbox.GetStateForMap(map); if (state.UsedMapGenerator == null) { logger.Error($"Cannot reroll geysers: map {map} does not have a recorded MapGeneratorDef"); return; } var geyserDef = ThingDefOf.SteamGeyser; var genStepDef = state.UsedMapGenerator.genSteps.FirstOrDefault(g => g.genStep is GenStep_ScatterThings && (g.genStep as GenStep_ScatterThings).thingDef == geyserDef); if (genStepDef == null) { logger.Error($"Cannot reroll geysers: map generator {state.UsedMapGenerator} does not have a geyser GenStep"); return; } drawnArrows.Clear(); activeSteamEffects.Clear(); var geysersOnMap = map.listerThings.AllThings.Where(t => t.def == geyserDef); var oldGeysers = new HashSet <Thing>(geysersOnMap); genStepDef.genStep.Generate(map, new GenStepParams()); var newGeysers = map.listerThings.AllThings.Where(t => t.def == geyserDef).Except(oldGeysers); BeginGeyserSpawning(oldGeysers, newGeysers, map); }