コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
        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);
                    }
                }
            }
        }
コード例 #4
0
 public void DetachEnvironment(MyEnvironmentSector myEnvironmentSector)
 {
     Close();
 }
コード例 #5
0
 public static bool HasWorkPending(this MyEnvironmentSector self)
 {
     return(self.HasSerialWorkPending || self.HasParallelWorkPending);
 }