示例#1
0
        public ItemBase TakeAnyItem(SegmentEntity entity)
        {
            var hopper = entity.As <StorageHopper>();

            if (hopper.mPermissions == eHopperPermissions.Locked || !hopper.mbAllowLogistics)
            {
                return(null);
            }
            ItemBase ret = null;

            if (hopper.mnStorageUsed >= 1)
            {
                ushort cubeType;
                ushort cubeValue;
                hopper.GetSpecificCubeRoundRobin(eHopperRequestType.eAny, out cubeType, out cubeValue);
                if (cubeType != 0)
                {
                    ret = ItemManager.SpawnCubeStack(cubeType, cubeValue, 1);
                }
                else
                {
                    ret = hopper.RemoveSingleSpecificItemOrCubeRoundRobin(eHopperRequestType.eAny);
                }
            }

            if (ret != null)
            {
                hopper.LogisticsOperation();
                hopper.RequestImmediateNetworkUpdate();
            }
            return(ret);
        }
示例#2
0
        public int GetFreeSpace(SegmentEntity entity)
        {
            var conveyor = entity.As <ConveyorEntity>();

            if (conveyor.mbReadyToConvey)
            {
                return(1);
            }
            return(0);
        }
示例#3
0
 public bool GiveItem(SegmentEntity entity, ItemBase item)
 {
     if (GetFreeSpace(entity) == 1)
     {
         var conveyor = entity.As <ConveyorEntity>();
         if (item.mType == ItemType.ItemCubeStack)
         {
             ItemCubeStack cube = item as ItemCubeStack;
             conveyor.AddCube(cube.mCubeType, cube.mCubeValue, 1);
             return(true);
         }
         conveyor.AddItem(item);
         return(true);
     }
     return(false);
 }
        public Boolean HasItems(SegmentEntity entity, ItemBase item, out Int32 amount)
        {
            var hopper = entity.As <StorageHopper>();

            var           isCube = item.mType == ItemType.ItemCubeStack;
            ItemCubeStack cube   = null;

            if (isCube)
            {
                cube = item.As <ItemCubeStack>();
            }

            amount = !isCube?hopper.CountHowManyOfItem(item.mnItemID)
                         : hopper.CountHowManyOfType(cube.mCubeType, cube.mCubeValue);

            return(amount > 0);
        }
        public ItemBase TakeItem(SegmentEntity entity, ItemBase item)
        {
            var hopper = entity.As <StorageHopper>();

            var           isCube = item.mType == ItemType.ItemCubeStack;
            ItemCubeStack cube   = null;

            if (isCube)
            {
                cube = item.As <ItemCubeStack>();
            }

            if (!isCube)
            {
                return(hopper.RemoveSingleSpecificItemByID(item.mnItemID));
            }
            return(hopper.RemoveSingleSpecificCubeStack(cube));
        }
示例#6
0
        public bool HasItem(SegmentEntity entity, ItemBase item)
        {
            if (GetFreeSpace(entity) == 1)
            {
                return(false);
            }
            var conveyor = entity.As <ConveyorEntity>();

            if (item.mType == ItemType.ItemCubeStack)
            {
                ItemCubeStack cube = item as ItemCubeStack;
                if (conveyor.mCarriedCube == cube.mCubeType && conveyor.mCarriedValue == cube.mCubeValue)
                {
                    return(true);
                }
                return(false);
            }
            return(item.CompareDeep(conveyor.mCarriedItem));
        }
        public Boolean GiveItem(SegmentEntity entity, ItemBase item)
        {
            var hopper = entity.As <StorageHopper>();

            var           isCube = item.mType == ItemType.ItemCubeStack;
            ItemCubeStack cube   = null;

            if (isCube)
            {
                cube = item.As <ItemCubeStack>();
            }

            if (!isCube)
            {
                return(hopper.AddItem(item));
            }

            // Might be possible to replace with ^ as universal for Item/Cubes
            var currentStorage = hopper.mnStorageFree;

            hopper.AddCube(cube.mCubeType, cube.mCubeValue);
            return(currentStorage != hopper.mnStorageFree);
        }
        public Int32 GetCapcity(SegmentEntity entity)
        {
            var hopper = entity.As <StorageHopper>();

            return(hopper.mnStorageFree);
        }
        public Boolean HasCapcity(SegmentEntity entity, UInt32 amount)
        {
            var hopper = entity.As <StorageHopper>();

            return(hopper.mnStorageFree >= amount);
        }
        public Boolean HasItems(SegmentEntity entity)
        {
            var hopper = entity.As <StorageHopper>();

            return(hopper?.mnStorageUsed > 0);
        }