public static unsafe void GetItemsInAabb(this MyEnvironmentSector sector, ref BoundingBoxD aabb, List <int> itemsInBox) { if (sector.DataView == null) { return; } aabb.Translate(-sector.SectorCenter); for (int sectorInd = 0; sectorInd < sector.DataView.LogicalSectors.Count; sectorInd++) { var logicalSector = sector.DataView.LogicalSectors[sectorInd]; var logicalItems = logicalSector.Items; var cnt = logicalItems.Count; fixed(ItemInfo *items = logicalItems.GetInternalArray()) for (int i = 0; i < cnt; ++i) { if (items[i].DefinitionIndex >= 0 && aabb.Contains(items[i].Position) != ContainmentType.Disjoint) { itemsInBox.Add(i); } } } }
public static unsafe void DisableItemsInShape(this MyEnvironmentSector sector, MyShape shape) { if (sector.DataView == null) { return; } for (int sectorInd = 0; sectorInd < sector.DataView.LogicalSectors.Count; sectorInd++) { var logicalSector = sector.DataView.LogicalSectors[sectorInd]; var logicalItems = logicalSector.Items; var cnt = logicalItems.Count; fixed(ItemInfo *items = logicalItems.GetInternalArray()) for (int i = 0; i < cnt; ++i) { var worldPos = sector.SectorCenter + items[i].Position; if (shape.GetVolume(ref worldPos) > 0f) { logicalSector.EnableItem(i, false); } } } }
public static unsafe void DisableItemsInObb(this MyEnvironmentSector sector, ref MyOrientedBoundingBoxD obb) { if (sector.DataView == null) { return; } obb.Center -= sector.SectorCenter; for (int sectorInd = 0; sectorInd < sector.DataView.LogicalSectors.Count; sectorInd++) { var logicalSector = sector.DataView.LogicalSectors[sectorInd]; var logicalItems = logicalSector.Items; var cnt = logicalItems.Count; fixed(ItemInfo *items = logicalItems.GetInternalArray()) for (int i = 0; i < cnt; ++i) { if (items[i].DefinitionIndex >= 0 && obb.Contains(ref items[i].Position)) { logicalSector.EnableItem(i, false); } } } }
public void DetachEnvironment(MyEnvironmentSector myEnvironmentSector) { Close(); }
public static bool HasWorkPending(this MyEnvironmentSector self) { return(self.HasSerialWorkPending || self.HasParallelWorkPending); }