public static MapInfos Deserialize(MapInfosSerializable serializedData, DatabasePreset materialsPreset, List <Player> player, List <Enemy> enemies) { MapInfos mapInfos = new MapInfos(); string path = "MapData/" + serializedData.MapDataType.ToString(); mapInfos.MapData = Resources.Load <ScriptableObject>(path) as MapData; mapInfos.Size = new Vector2(serializedData.SizeX, serializedData.SizeY); mapInfos.Layout = serializedData.Layout; if (serializedData.Map != null) { Dictionary <string, Material> materials = new Dictionary <string, Material>(); Dictionary <string, string> materialsDatabase = DataSerialization.ReadDatabasePathByName(materialsPreset); foreach (string name in serializedData.Materials) { if (materialsDatabase.ContainsKey(name)) { materials.Add(name, Resources.Load <Material>(materialsDatabase[name])); } else { Debug.Log("Material " + name + " not found in DB"); } } Cell[,] newMap = new Cell[serializedData.SizeX, serializedData.SizeY]; for (int x = 0; x < serializedData.SizeX; x++) { for (int y = 0; y < serializedData.SizeY; y++) { newMap[x, y] = new Cell(); if (serializedData.Map[x, y].UnitId != -1) { newMap[x, y].IsTaken = GetUnitById(serializedData.Map[x, y].UnitId, player, enemies); } newMap[x, y].IsWalkable = serializedData.Map[x, y].IsWalkable; newMap[x, y].X = serializedData.Map[x, y].X; newMap[x, y].Y = serializedData.Map[x, y].Y; newMap[x, y].Z = serializedData.Map[x, y].Z; newMap[x, y].RealY = serializedData.Map[x, y].RealY; if (serializedData.Map[x, y].MaterialName != null && serializedData.Map[x, y].MaterialName != "") { if (materials.ContainsKey(serializedData.Map[x, y].MaterialName)) { newMap[x, y].Material = materials[serializedData.Map[x, y].MaterialName]; } else { Debug.Log("Deserialization error, material " + serializedData.Map[x, y].MaterialName + " not found"); } } if (serializedData.Map[x, y].FillerName != null && serializedData.Map[x, y].FillerName != "") { if (materials.ContainsKey(serializedData.Map[x, y].FillerName)) { newMap[x, y].Filler = materials[serializedData.Map[x, y].FillerName]; } else { Debug.Log("Deserialization error, material " + serializedData.Map[x, y].FillerName + " not found"); } } } } mapInfos.Map = newMap; } else { mapInfos.Map = null; } return(mapInfos); }
public static MapInfosSerializable Serialize(MapInfos mapInfos) { MapInfosSerializable serializedData = new MapInfosSerializable(); serializedData.MapDataType = (MapDataType)System.Enum.Parse(typeof(MapDataType), mapInfos.MapData.name); serializedData.SizeX = (int)mapInfos.Size.x; serializedData.SizeY = (int)mapInfos.Size.y; serializedData.Layout = mapInfos.Layout; if (mapInfos.Map != null) { serializedData.Materials = new List <string>(); CellSerializable[,] serializedMap = new CellSerializable[serializedData.SizeX, serializedData.SizeY]; for (int x = 0; x < serializedData.SizeX; x++) { for (int y = 0; y < serializedData.SizeY; y++) { serializedMap[x, y] = new CellSerializable(); if (mapInfos.Map[x, y].IsTaken != null) { serializedMap[x, y].UnitId = mapInfos.Map[x, y].IsTaken.Id; } else { serializedMap[x, y].UnitId = -1; } serializedMap[x, y].IsWalkable = mapInfos.Map[x, y].IsWalkable; serializedMap[x, y].X = mapInfos.Map[x, y].X; serializedMap[x, y].Y = mapInfos.Map[x, y].Y; serializedMap[x, y].Z = mapInfos.Map[x, y].Z; serializedMap[x, y].RealY = mapInfos.Map[x, y].RealY; if (mapInfos.Map[x, y].Material != null) { serializedMap[x, y].MaterialName = mapInfos.Map[x, y].Material.name; if (!serializedData.Materials.Contains(serializedMap[x, y].MaterialName)) { serializedData.Materials.Add(serializedMap[x, y].MaterialName); } } if (mapInfos.Map[x, y].Filler != null) { serializedMap[x, y].FillerName = mapInfos.Map[x, y].Filler.name; if (!serializedData.Materials.Contains(serializedMap[x, y].FillerName)) { serializedData.Materials.Add(serializedMap[x, y].FillerName); } } } } serializedData.Map = serializedMap; } else { serializedData.Map = null; } return(serializedData); }