示例#1
0
        private void ExecuteUpdate(long dt)
        {
            _updateScheduled = false;
            if (!_powerObserver.IsPowered)
            {
                return;
            }
            if (Definition.RequiredStates.Count > 0 && _state != null && !Definition.RequiredStates.Contains(_state.CurrentState))
            {
                return;
            }
            using (PoolManager.Get(out List <OrientedBoundingBoxD> boxes))
                using (PoolManager.Get(out List <MyVoxelBase> voxels))
                {
                    GatherWorldVolumes(boxes);
                    if (boxes.Count == 0)
                    {
                        return;
                    }
                    var worldBounds = BoundingBoxD.CreateInvalid();
                    foreach (var box in boxes)
                    {
                        worldBounds.Include(box.GetAABB());
                    }
                    GatherVoxels(worldBounds, voxels);
                    if (voxels.Count == 0)
                    {
                        return;
                    }
                    var availableForDeposit = ComputeDepositAvailability();
                    if (availableForDeposit == 0)
                    {
                        return;
                    }

                    var used = PerformVoxelOp(voxels, boxes, Definition.PlacementDefinition.Material.Index,
                                              availableForDeposit, _miningBuffer, Definition.RemoveFarmingItems);
                    if (used <= 0)
                    {
                        return;
                    }
                    _eventBus?.Invoke(EventDidWork, true);
                    UseDepositMaterials(used);
                    GiftMiningMaterials();
                }
        }
 private void OnSwitchChanged(SwitchableNodeSide self, Node junction, Node destination)
 {
     BeginAnimating();
     _eventBus?.Invoke(EventName);
 }
示例#3
0
 public EquiStateEventTrigger()
 {
     _triggerEvent = (evt) => _eventBus?.Invoke(evt);
 }