public SetMaterialAssets ( IList |
||
materialsList | IList |
|
Résultat | void |
public void SetMaterialAssets(IList<byte> materialsList)
{
var materialsIndex = 0;
Vector3I cellCoord;
for (cellCoord.X = 0; cellCoord.X < _dataCellsCount.X; cellCoord.X++)
{
for (cellCoord.Y = 0; cellCoord.Y < _dataCellsCount.Y; cellCoord.Y++)
{
for (cellCoord.Z = 0; cellCoord.Z < _dataCellsCount.Z; cellCoord.Z++)
{
var voxelCell = _voxelContentCells[cellCoord.X][cellCoord.Y][cellCoord.Z];
var matCell = _voxelMaterialCells[cellCoord.X][cellCoord.Y][cellCoord.Z];
// A mixed cell, with mixed materials.
Vector3I voxelCoordInCell;
for (voxelCoordInCell.X = 0; voxelCoordInCell.X < MyVoxelConstants.VOXEL_DATA_CELL_SIZE_IN_VOXELS; voxelCoordInCell.X++)
{
for (voxelCoordInCell.Y = 0; voxelCoordInCell.Y < MyVoxelConstants.VOXEL_DATA_CELL_SIZE_IN_VOXELS; voxelCoordInCell.Y++)
{
for (voxelCoordInCell.Z = 0; voxelCoordInCell.Z < MyVoxelConstants.VOXEL_DATA_CELL_SIZE_IN_VOXELS; voxelCoordInCell.Z++)
{
if (voxelCell == null) // Cell is FULL.
{
matCell.SetMaterialAndIndestructibleContent(materialsList[materialsIndex++], 0xff, ref voxelCoordInCell);
}
else
{
// Cell is Mixed.
var content = voxelCell.GetVoxelContent(ref voxelCoordInCell);
if (content != MyVoxelConstants.VOXEL_CONTENT_EMPTY) // Only working with cells that aren't empty.
{
matCell.SetMaterialAndIndestructibleContent(materialsList[materialsIndex++], 0xff, ref voxelCoordInCell);
}
}
}
}
}
}
}
}
}
public void VoxelMaterialAssetsGenerateFixed() { SpaceEngineersCore.LoadDefinitions(); var materials = SpaceEngineersCore.Resources.GetMaterialList(); Assert.IsTrue(materials.Count > 0, "Materials should exist. Has the developer got Space Engineers installed?"); var files = new[] { @".\TestAssets\Arabian_Border_7.vx2", @".\TestAssets\cube_52x52x52.vx2" }; foreach (var fileOriginal in files) { foreach (var material in materials) { var fileNewVoxel = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(fileOriginal)), Path.GetFileNameWithoutExtension(fileOriginal) + "_" + material.Id.SubtypeId + ".vx2").ToLower(); var voxelMap = new MyVoxelMap(); voxelMap.Load(fileOriginal, materials[0].Id.SubtypeId); IList<byte> materialAssets; Dictionary<byte, long> materialVoxelCells; voxelMap.CalculateMaterialCellAssets(out materialAssets, out materialVoxelCells); var distribution = new[] { Double.NaN, .99, }; var materialSelection = new byte[] { 0, SpaceEngineersCore.Resources.GetMaterialIndex(material.Id.SubtypeId) }; var newDistributiuon = new List<byte>(); int count; for (var i = 1; i < distribution.Count(); i++) { count = (int)Math.Floor(distribution[i] * materialAssets.Count); // Round down. for (var j = 0; j < count; j++) { newDistributiuon.Add(materialSelection[i]); } } count = materialAssets.Count - newDistributiuon.Count; for (var j = 0; j < count; j++) { newDistributiuon.Add(materialSelection[0]); } newDistributiuon.Shuffle(); voxelMap.SetMaterialAssets(newDistributiuon); voxelMap.Save(fileNewVoxel); } } }