public void OnAfterDeserialize() { if (_serializedBiomeWeights != null && _serializedBiomes != null) { WeightedBiomeSet = _serializedBiomes.ToList(); WeightedMap = new KeyValuePair <BiomeData[], float[]> [_resolution, _resolution]; for (int x = 0; x < _resolution; x++) { for (int z = 0; z < _resolution; z++) { BiomeIndexWeightPair biomeWeightPair = _serializedBiomeWeights[x + z * _resolution]; BiomeData[] reconstructedBiomes = new BiomeData[biomeWeightPair.BiomeIndicies.Length]; for (int i = 0; i < biomeWeightPair.BiomeIndicies.Length; i++) { int index = biomeWeightPair.BiomeIndicies[i]; reconstructedBiomes[i] = _serializedBiomes[index]; } var pair = new KeyValuePair <BiomeData[], float[]>(reconstructedBiomes, biomeWeightPair.Weights); WeightedMap[x, z] = pair; } } } }
public void OnBeforeSerialize() { //Biome map //TODO Write test for biome serialization if (WeightedMap == null || WeightedMap.Length <= 0) { return; } _serializedBiomeWeights = new BiomeIndexWeightPair[WeightedMap.Length]; for (int x = 0; x < _resolution; x++) { for (int z = 0; z < _resolution; z++) { KeyValuePair <BiomeData[], float[]> weightedBiomes = WeightedMap[x, z]; int[] indices = new int[weightedBiomes.Key.Length]; //Serialize each biome by referencing some index within WeightedBiomeSet for (int i = 0; i < indices.Length; i++) { int existIdx = WeightedBiomeSet.FindIndex(p => ReferenceEquals(p, weightedBiomes.Key[i])); if (existIdx == -1) //Does not exist, add { WeightedBiomeSet.Add(weightedBiomes.Key[i]); existIdx = WeightedBiomeSet.Count - 1; } indices[i] = existIdx; } var pair = new BiomeIndexWeightPair(indices, weightedBiomes.Value); _serializedBiomeWeights[x + z * _resolution] = pair; } } _serializedBiomes = WeightedBiomeSet.ToArray(); }