public bool ForEachItem <T>(MyVoxelMiningDefinition def, T arg, DelForEachItem <T> lambda)
        {
            var modified = false;

            foreach (var entry in def.MiningEntries)
            {
                ref var bufferedVoxel = ref _harvestVolumeBuffer[entry.Key];
                var     count         = bufferedVoxel / entry.Value.Volume;
                if (count <= 0)
                {
                    continue;
                }
                foreach (var item in entry.Value.MinedItems)
                {
                    var amount = item.Value * count;
                    if (amount <= 0)
                    {
                        continue;
                    }
                    var consumed = lambda(arg, item.Key, amount);
                    if (consumed <= 0)
                    {
                        continue;
                    }
                    modified       = true;
                    bufferedVoxel -= consumed * entry.Value.Volume;
                }
            }
Beispiel #2
0
        public override void Init(MyEntity holder, MyHandItem item, MyHandItemBehaviorDefinition definition)
        {
            base.Init(holder, item, definition);

            var def = (MrzVoxelPainterBehaviorDefinition)definition;

            _mining = MyDefinitionManager.Get <MyVoxelMiningDefinition>(def.Mining);
            for (var i = 0; i < _filter.Length; i++)
            {
                _filter[i] = _mining.MiningEntries.ContainsKey(i);
            }

            var material = MyDefinitionManager.Get <MyVoxelMaterialDefinition>(def.PaintMaterial);

            _fillMaterial = material?.Index ?? (byte)0;

            _inventory        = holder.Get <MyInventoryBase>(MyCharacterConstants.MainInventory);
            _wrongToolMessage = MrzUtils.CreateNotification(string.Format(def.WrongToolMessage, Item.GetDefinition().DisplayNameText), MrzUtils.NotificationType.Error);
        }