public void ReadFrom(Stream stream)
        {
            int numMaterials = stream.ReadInt32();

            Layers = new MyMaterialLayer[numMaterials];
            for (int i = 0; i < numMaterials; ++i)
            {
                Layers[i]                      = new MyMaterialLayer();
                Layers[i].StartHeight          = stream.ReadFloat();
                Layers[i].EndHeight            = stream.ReadFloat();
                Layers[i].StartAngle           = stream.ReadFloat();
                Layers[i].EndAngle             = stream.ReadFloat();
                Layers[i].HeightStartDeviation = stream.ReadFloat();
                Layers[i].AngleStartDeviation  = stream.ReadFloat();
                Layers[i].HeightEndDeviation   = stream.ReadFloat();
                Layers[i].AngleEndDeviation    = stream.ReadFloat();
                Layers[i].MaterialDefinition   = MyDefinitionManager.Static.GetVoxelMaterialDefinition(stream.ReadString());
            }

            int numOreProbabilities = stream.ReadInt32();

            OreProbabilities = new MyOreProbability[numOreProbabilities];
            for (int i = 0; i < numOreProbabilities; ++i)
            {
                OreProbabilities[i] = new MyOreProbability();
                OreProbabilities[i].CummulativeProbability = stream.ReadFloat();
                OreProbabilities[i].OreName = stream.ReadString();
            }

            OreStartDepth = stream.ReadFloat();
            OreEndDepth   = stream.ReadFloat();
        }
        public void ReadFrom(Stream stream)
        {
            int numOreProbabilities = stream.ReadInt32();

            OreProbabilities = new MyOreProbability[numOreProbabilities];
            for (int i = 0; i < numOreProbabilities; ++i)
            {
                OreProbabilities[i] = new MyOreProbability();
                OreProbabilities[i].CummulativeProbability = stream.ReadFloat();
                OreProbabilities[i].OreName = stream.ReadString();
            }

            OreStartDepth = stream.ReadFloat();
            OreEndDepth   = stream.ReadFloat();
        }
        private static void BuildOreProbabilities(MyPlanetGeneratorDefinition planetDefinition)
        {
            m_oreCummulativeProbability = 0.0f;
            if (planetDefinition.MetalsOreProbability != null)
            {
                foreach (var oreProbability in planetDefinition.MetalsOreProbability)
                {
                    MyOreProbability probability = new MyOreProbability();

                    m_oreCummulativeProbability       += MyRandom.Instance.NextFloat(oreProbability.Min, oreProbability.Max);
                    probability.CummulativeProbability = m_oreCummulativeProbability;
                    probability.OreName = oreProbability.OreName;
                    m_oreProbalities.Add(probability);
                }
            }
        }