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