public void ExposeData() { Scribe_Values.Look <int>(ref mapId, "mapid", -1); if (map != null) { numCells = map.cellIndices.NumGridCells; } Scribe_Values.Look <int>(ref numCells, "numCells", 0); if (Scribe.mode == LoadSaveMode.Saving) { MapExposeUtility.ExposeUshort(map, (IntVec3 c) => priorityGrid[map.cellIndices.CellToIndex(c)], delegate(IntVec3 c, ushort val) { priorityGrid[map.cellIndices.CellToIndex(c)] = val; }, "priorityGrid"); } else if (Scribe.mode == LoadSaveMode.LoadingVars) { priorityGrid = new ushort[numCells]; DataExposeUtility.ByteArray(ref griddata, "priorityGrid"); DataSerializeUtility.LoadUshort(griddata, numCells, delegate(int c, ushort val) { priorityGrid[c] = val; }); griddata = null; } }
public void ExposeData() { Scribe_Collections.Look <WorldFeature>(ref this.features, "features", LookMode.Deep, new object[0]); if (Scribe.mode == LoadSaveMode.PostLoadInit) { WorldGrid grid = Find.WorldGrid; if (grid.tileFeature != null && grid.tileFeature.Length != 0) { DataSerializeUtility.LoadUshort(grid.tileFeature, grid.TilesCount, delegate(int i, ushort data) { grid[i].feature = ((data != ushort.MaxValue) ? this.GetFeatureWithID((int)data) : null); }); } this.textsCreated = false; } }
public void ExposeData() { Scribe_Collections.Look(ref features, "features", LookMode.Deep); if (Scribe.mode == LoadSaveMode.PostLoadInit) { WorldGrid grid = Find.WorldGrid; if (grid.tileFeature != null && grid.tileFeature.Length != 0) { DataSerializeUtility.LoadUshort(grid.tileFeature, grid.TilesCount, delegate(int i, ushort data) { grid[i].feature = ((data != 65535) ? GetFeatureWithID(data) : null); }); } textsCreated = false; } }
public override void ExposeData() { byte[] arr = null; if (Scribe.mode == LoadSaveMode.Saving) { if (priorityGrid == null || priorityGrid.Length != map.cellIndices.NumGridCells) { Log.Error("PriorityMapGrid : Invalid priorityGrid. fixing.."); InitGrid(); } arr = DataSerializeUtility.SerializeInt(priorityGrid); } DataExposeUtility.ByteArray(ref arr, "priorityGrid"); if (Scribe.mode == LoadSaveMode.LoadingVars) { priorityGrid = DataSerializeUtility.DeserializeInt(arr); } }
private void RawDataToTiles() { if (this.tiles.Count != this.TilesCount) { this.tiles.Clear(); for (int m = 0; m < this.TilesCount; m++) { this.tiles.Add(new Tile()); } } else { for (int j = 0; j < this.TilesCount; j++) { this.tiles[j].potentialRoads = null; this.tiles[j].potentialRivers = null; } } DataSerializeUtility.LoadUshort(this.tileBiome, this.TilesCount, delegate(int i, ushort data) { this.tiles[i].biome = (DefDatabase <BiomeDef> .GetByShortHash(data) ?? BiomeDefOf.TemperateForest); }); DataSerializeUtility.LoadUshort(this.tileElevation, this.TilesCount, delegate(int i, ushort data) { this.tiles[i].elevation = (float)(data - 8192); }); DataSerializeUtility.LoadByte(this.tileHilliness, this.TilesCount, delegate(int i, byte data) { this.tiles[i].hilliness = (Hilliness)data; }); DataSerializeUtility.LoadUshort(this.tileTemperature, this.TilesCount, delegate(int i, ushort data) { this.tiles[i].temperature = (float)data / 10f - 300f; }); DataSerializeUtility.LoadUshort(this.tileRainfall, this.TilesCount, delegate(int i, ushort data) { this.tiles[i].rainfall = (float)data; }); DataSerializeUtility.LoadByte(this.tileSwampiness, this.TilesCount, delegate(int i, byte data) { this.tiles[i].swampiness = (float)data / 255f; }); int[] array = DataSerializeUtility.DeserializeInt(this.tileRoadOrigins); byte[] array2 = DataSerializeUtility.DeserializeByte(this.tileRoadAdjacency); ushort[] array3 = DataSerializeUtility.DeserializeUshort(this.tileRoadDef); for (int k = 0; k < array.Length; k++) { int num = array[k]; int tileNeighbor = this.GetTileNeighbor(num, (int)array2[k]); RoadDef byShortHash = DefDatabase <RoadDef> .GetByShortHash(array3[k]); if (byShortHash != null) { if (this.tiles[num].potentialRoads == null) { this.tiles[num].potentialRoads = new List <Tile.RoadLink>(); } if (this.tiles[tileNeighbor].potentialRoads == null) { this.tiles[tileNeighbor].potentialRoads = new List <Tile.RoadLink>(); } this.tiles[num].potentialRoads.Add(new Tile.RoadLink { neighbor = tileNeighbor, road = byShortHash }); this.tiles[tileNeighbor].potentialRoads.Add(new Tile.RoadLink { neighbor = num, road = byShortHash }); } } int[] array4 = DataSerializeUtility.DeserializeInt(this.tileRiverOrigins); byte[] array5 = DataSerializeUtility.DeserializeByte(this.tileRiverAdjacency); ushort[] array6 = DataSerializeUtility.DeserializeUshort(this.tileRiverDef); for (int l = 0; l < array4.Length; l++) { int num2 = array4[l]; int tileNeighbor2 = this.GetTileNeighbor(num2, (int)array5[l]); RiverDef byShortHash2 = DefDatabase <RiverDef> .GetByShortHash(array6[l]); if (byShortHash2 != null) { if (this.tiles[num2].potentialRivers == null) { this.tiles[num2].potentialRivers = new List <Tile.RiverLink>(); } if (this.tiles[tileNeighbor2].potentialRivers == null) { this.tiles[tileNeighbor2].potentialRivers = new List <Tile.RiverLink>(); } this.tiles[num2].potentialRivers.Add(new Tile.RiverLink { neighbor = tileNeighbor2, river = byShortHash2 }); this.tiles[tileNeighbor2].potentialRivers.Add(new Tile.RiverLink { neighbor = num2, river = byShortHash2 }); } } }
private void TilesToRawData() { this.tileBiome = DataSerializeUtility.SerializeUshort(this.TilesCount, (int i) => this.tiles[i].biome.shortHash); this.tileElevation = DataSerializeUtility.SerializeUshort(this.TilesCount, (int i) => (ushort)Mathf.Clamp(Mathf.RoundToInt(((!this.tiles[i].WaterCovered) ? Mathf.Max(this.tiles[i].elevation, 1f) : this.tiles[i].elevation) + 8192f), 0, 65535)); this.tileHilliness = DataSerializeUtility.SerializeByte(this.TilesCount, (int i) => (byte)this.tiles[i].hilliness); this.tileTemperature = DataSerializeUtility.SerializeUshort(this.TilesCount, (int i) => (ushort)Mathf.Clamp(Mathf.RoundToInt((this.tiles[i].temperature + 300f) * 10f), 0, 65535)); this.tileRainfall = DataSerializeUtility.SerializeUshort(this.TilesCount, (int i) => (ushort)Mathf.Clamp(Mathf.RoundToInt(this.tiles[i].rainfall), 0, 65535)); this.tileSwampiness = DataSerializeUtility.SerializeByte(this.TilesCount, (int i) => (byte)Mathf.Clamp(Mathf.RoundToInt(this.tiles[i].swampiness * 255f), 0, 255)); this.tileFeature = DataSerializeUtility.SerializeUshort(this.TilesCount, (int i) => (this.tiles[i].feature != null) ? ((ushort)this.tiles[i].feature.uniqueID) : ushort.MaxValue); List <int> list = new List <int>(); List <byte> list2 = new List <byte>(); List <ushort> list3 = new List <ushort>(); for (int m = 0; m < this.TilesCount; m++) { List <Tile.RoadLink> potentialRoads = this.tiles[m].potentialRoads; if (potentialRoads != null) { for (int j = 0; j < potentialRoads.Count; j++) { Tile.RoadLink roadLink = potentialRoads[j]; if (roadLink.neighbor >= m) { byte b = (byte)this.GetNeighborId(m, roadLink.neighbor); if (b < 0) { Log.ErrorOnce("Couldn't find valid neighbor for road piece", 81637014, false); } else { list.Add(m); list2.Add(b); list3.Add(roadLink.road.shortHash); } } } } } this.tileRoadOrigins = DataSerializeUtility.SerializeInt(list.ToArray()); this.tileRoadAdjacency = DataSerializeUtility.SerializeByte(list2.ToArray()); this.tileRoadDef = DataSerializeUtility.SerializeUshort(list3.ToArray()); List <int> list4 = new List <int>(); List <byte> list5 = new List <byte>(); List <ushort> list6 = new List <ushort>(); for (int k = 0; k < this.TilesCount; k++) { List <Tile.RiverLink> potentialRivers = this.tiles[k].potentialRivers; if (potentialRivers != null) { for (int l = 0; l < potentialRivers.Count; l++) { Tile.RiverLink riverLink = potentialRivers[l]; if (riverLink.neighbor >= k) { byte b2 = (byte)this.GetNeighborId(k, riverLink.neighbor); if (b2 < 0) { Log.ErrorOnce("Couldn't find valid neighbor for river piece", 81637014, false); } else { list4.Add(k); list5.Add(b2); list6.Add(riverLink.river.shortHash); } } } } } this.tileRiverOrigins = DataSerializeUtility.SerializeInt(list4.ToArray()); this.tileRiverAdjacency = DataSerializeUtility.SerializeByte(list5.ToArray()); this.tileRiverDef = DataSerializeUtility.SerializeUshort(list6.ToArray()); }