Esempio n. 1
0
        public override MyVoxelMaterialDefinition GetMaterialForPosition(ref Vector3 pos, float lodSize)
        {
            Vector3 localPosition  = pos - Shape.Center();
            float   lenghtToCenter = localPosition.Length();

            if (lenghtToCenter < 0.01)
            {
                return(null);
            }

            float distance = m_planetShape.SampleField(ref pos);

            if (distance <= MyCsgPrecomputedHelpres.FROZEN_OCEAN_LEVEL && MyFakes.ENABLE_PLANET_FROZEN_SEA)
            {
                return(MyDefinitionManager.Static.GetVoxelMaterialDefinition("Ice_01"));
            }

            float originalDistance = m_planetShape.SignedDistanceUnchecked(ref pos, lodSize, null, null);


            if (lenghtToCenter <= m_oreDeposits.MinDepth)
            {
                MyVoxelMaterialDefinition definiton = m_oreDeposits.GetMaterialForPosition(ref pos, lodSize);
                if (definiton != null)
                {
                    return(definiton);
                }
            }

            if (originalDistance < -2.0f)
            {
                return(MyDefinitionManager.Static.GetVoxelMaterialDefinition("Stone_01"));
            }

            Vector3I samplePos;
            Vector2  positon = Vector2.Zero;

            MyCsgPrecomputedHelpres.CalculateSamplePosition(ref localPosition, out samplePos, ref positon, m_resolution);

            byte materialData;

            m_reader[samplePos.X].Read(sizeof(int) + samplePos.Z * m_resolution + samplePos.Y, out materialData);

            byte material      = (byte)(materialData & 127);
            byte spawns        = (byte)(materialData & 128);
            var  voxelMaterial = MyDefinitionManager.Static.GetVoxelMaterialDefinition(material);

            if (voxelMaterial != null)
            {
                voxelMaterial.SpawnsFlora = spawns == 0 ? false : true;
            }
            return(voxelMaterial);
        }
Esempio n. 2
0
        public MyCompositePrecomputedOreDeposit(MyCsgShapeBase shape, string path, MyCompositeOrePlanetDeposit oresDeposits, MyCsgShapePrecomputed planetShape) :
            base(shape, null)
        {
            m_planetShape = planetShape;
            m_oreDeposits = oresDeposits;
            m_file        = new MemoryMappedFile[MyCsgPrecomputedHelpres.NUM_MAPS];
            m_reader      = new MemoryMappedViewAccessor[MyCsgPrecomputedHelpres.NUM_MAPS];

            for (int i = 0; i < MyCsgPrecomputedHelpres.NUM_MAPS; ++i)
            {
                string name = null;
                MyCsgPrecomputedHelpres.GetNameForFace(i, ref name);

                name = Path.Combine(path, name + "_material.bin");
                FileInfo fi     = new FileInfo(name);
                int      length = (int)fi.Length;
                m_file[i]   = MemoryMappedFile.CreateFromFile(name, FileMode.Open);
                m_reader[i] = m_file[i].CreateViewAccessor(0, length);
                m_reader[i].Read(0, out m_resolution);
            }
        }