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();
        }