コード例 #1
0
        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;
            }
        }
コード例 #2
0
 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;
     }
 }
コード例 #3
0
 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;
     }
 }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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
                    });
                }
            }
        }
コード例 #6
0
        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());
        }