public void AddItemInputRule(ItemInputRule itemInputRule)
        {
            foreach (var inputRule in _itemInputRules)
            {
                if (inputRule.Item.Compare(itemInputRule.Item))
                {
                    return;
                }
            }

            _itemInputRules.Add(itemInputRule);
            MarkDirtyDelayed();
        }
 public void ReduceItemInputRuleLimit(ItemInputRule itemInputRule)
 {
     foreach (var inputRule in _itemInputRules)
     {
         if (inputRule.Item.Compare(itemInputRule.Item))
         {
             inputRule.MaxInput -= DefaultInputRuleStep;
             if (inputRule.MaxInput < DefaultInputRuleStep)
             {
                 inputRule.MaxInput = DefaultInputRuleStep;
             }
         }
     }
     MarkDirtyDelayed();
 }
 public void IncreaseItemInputRuleLimit(ItemInputRule itemInputRule)
 {
     foreach (var inputRule in _itemInputRules)
     {
         if (inputRule.Item.Compare(itemInputRule.Item))
         {
             inputRule.MaxInput += DefaultInputRuleStep;
             if (inputRule.MaxInput >= int.MaxValue - DefaultInputRuleStep)
             {
                 inputRule.MaxInput -= DefaultInputRuleStep;
             }
         }
     }
     MarkDirtyDelayed();
 }
        public override void Read(BinaryReader reader, int entityVersion)
        {
            _machinePower.CurrentPower = reader.ReadSingle();
            _inputEnabled  = reader.ReadBoolean();
            _outputEnabled = reader.ReadBoolean();
            var itemInputRulesCount = reader.ReadInt32();

            _itemInputRules = new List <ItemInputRule>();
            for (int index = 0; index < itemInputRulesCount; index++)
            {
                var itemInputRule = new ItemInputRule();
                itemInputRule.MaxInput = reader.ReadInt32();
                itemInputRule.Item     = ItemFile.DeserialiseItem(reader);
                _itemInputRules.Add(itemInputRule);
            }
        }
        public void RemoveItemInputRule(ItemInputRule itemInputRule)
        {
            ItemInputRule itemRuletoRemove = null;

            foreach (var inputRule in _itemInputRules)
            {
                if (inputRule.Item.Compare(itemInputRule.Item))
                {
                    itemRuletoRemove = inputRule;
                }
            }

            if (itemRuletoRemove != null)
            {
                _itemInputRules.Remove(itemRuletoRemove);
            }
            MarkDirtyDelayed();
        }
Beispiel #6
0
        /*public static bool TakeItems(Player player, QuantumStorageControllerMachine quantumStorageController,
         *  ItemBase item)
         * {
         *  if (!player.mbIsLocalPlayer)
         *  {
         *      NetworkRedraw = true;
         *  }
         *
         *  if (quantumStorageController.GetItems().Count > 0)
         *  {
         *      quantumStorageController.TakeItem(ref item);
         *      if (item != null)
         *      {
         *          Debug.Log((object) ("Removing Item from StorageHopper for " + player.mUserName));
         *          if (!player.mInventory.AddItem(itemBase))
         *          {
         *              if (!quantumStorageController.AddItem(itemBase))
         *                  ItemManager.instance.DropItem(itemBase, player.mnWorldX, player.mnWorldY, player.mnWorldZ,
         *                      Vector3.zero);
         *              return false;
         *          }
         *
         *          if (player.mbIsLocalPlayer)
         *          {
         *              Color lCol = Color.green;
         *              if (itemBase.mType == ItemType.ItemCubeStack)
         *              {
         *                  ItemCubeStack itemCubeStack = itemBase as ItemCubeStack;
         *                  if (CubeHelper.IsGarbage(itemCubeStack.mCubeType))
         *                      lCol = Color.red;
         *                  if (CubeHelper.IsSmeltableOre(itemCubeStack.mCubeType))
         *                      lCol = Color.green;
         *              }
         *
         *              if (itemBase.mType == ItemType.ItemStack)
         *                  lCol = Color.cyan;
         *              if (itemBase.mType == ItemType.ItemSingle)
         *                  lCol = Color.white;
         *              if (itemBase.mType == ItemType.ItemCharge)
         *                  lCol = Color.magenta;
         *              if (itemBase.mType == ItemType.ItemDurability)
         *                  lCol = Color.yellow;
         *              if (itemBase.mType == ItemType.ItemLocation)
         *                  lCol = Color.gray;
         *              FloatingCombatTextManager.instance.QueueText(quantumStorageController.mnX,
         *                  quantumStorageController.mnY + 1L, quantumStorageController.mnZ, 1f,
         *                  player.GetItemName(itemBase), lCol, 1.5f, 64f);
         *          }
         *
         *          player.mInventory.VerifySuitUpgrades();
         *          if (!WorldScript.mbIsServer)
         *              NetworkManager.instance.SendInterfaceCommand(nameof(StorageHopperWindowNew), nameof(TakeItems),
         *                  (string) null, itemBase, (SegmentEntity) quantumStorageController, 0.0f);
         *          return true;
         *      }
         *  }
         *
         *  return false;
         * }*/

        public static NetworkInterfaceResponse HandleNetworkCommand(Player player, NetworkInterfaceCommand nic)
        {
            if (!(nic.target is QuantumStorageControllerMachine target))
            {
                return(null);
            }

            var command = nic.command;

            if (command != null)
            {
                var dictionary = new Dictionary <string, int>(2);
                dictionary.Add("ToggleInput", 1);
                dictionary.Add("ToggleOutput", 2);
                dictionary.Add("AddItemRule", 3);
                dictionary.Add("RemoveItemRule", 4);
                dictionary.Add("ReduceItemRule", 5);
                dictionary.Add("IncreaseItemRule", 6);

                if (dictionary.TryGetValue(command, out var num))
                {
                    switch (num)
                    {
                    case 1:
                        target.ToggleInput();
                        break;

                    case 2:
                        target.ToggleOutput();
                        break;

                    case 3:
                        var itemInputRule = new ItemInputRule();
                        itemInputRule.Item     = nic.itemContext;
                        itemInputRule.MaxInput = int.Parse(nic.payload);
                        target.AddItemInputRule(itemInputRule);
                        break;

                    case 4:
                        var itemInputRuleToRemove = new ItemInputRule();
                        itemInputRuleToRemove.Item     = nic.itemContext;
                        itemInputRuleToRemove.MaxInput = int.Parse(nic.payload);
                        target.RemoveItemInputRule(itemInputRuleToRemove);
                        break;

                    case 5:
                        var itemInputRuleToReduce = new ItemInputRule();
                        itemInputRuleToReduce.Item = nic.itemContext;
                        target.ReduceItemInputRuleLimit(itemInputRuleToReduce);
                        break;

                    case 6:
                        var itemInputRuleToIncrease = new ItemInputRule();
                        itemInputRuleToIncrease.Item = nic.itemContext;
                        target.IncreaseItemInputRuleLimit(itemInputRuleToIncrease);
                        break;
                    }
                }
            }

            var interfaceResponse = new NetworkInterfaceResponse();

            interfaceResponse.entity    = target;
            interfaceResponse.inventory = player.mInventory;
            return(interfaceResponse);
        }
Beispiel #7
0
        public override bool ButtonClicked(string name, SegmentEntity targetEntity)
        {
            var controller = targetEntity as QuantumStorageControllerMachine;

            if (controller == null || !controller.IsOperating())
            {
                return(false);
            }

            if (name.Equals(InputStatusButton))
            {
                controller.ToggleInput();

                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "ToggleInput",
                                                                 null, null, controller, 0.0f);
                }
                Dirty = true;
                return(true);
            }

            if (name.Equals(OutputStatusButton))
            {
                controller.ToggleOutput();

                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "ToggleOutput",
                                                                 null, null, controller, 0.0f);
                }
                Dirty = true;
                return(true);
            }

            if (name.Contains(InputRuleIncreaseButton))
            {
                int.TryParse(name.Replace(InputRuleIncreaseButton, string.Empty), out var itemSlot);

                if (itemSlot == -1)
                {
                    return(false);
                }

                controller.IncreaseItemInputRuleLimit(controller.GetItemInputRules()[itemSlot]);
                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "IncreaseItemRule",
                                                                 null, controller.GetItemInputRules()[itemSlot].Item, controller, 0.0f);
                }
                Dirty = true;
                return(true);
            }

            if (name.Contains(InputRuleReduceButton))
            {
                int.TryParse(name.Replace(InputRuleReduceButton, string.Empty), out var itemSlot);

                if (itemSlot == -1)
                {
                    return(false);
                }

                controller.ReduceItemInputRuleLimit(controller.GetItemInputRules()[itemSlot]);
                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "ReduceItemRule",
                                                                 null, controller.GetItemInputRules()[itemSlot].Item, controller, 0.0f);
                }
                Dirty = true;
                return(true);
            }

            if (name.Contains(InputRuleRemoveButton))
            {
                int.TryParse(name.Replace(InputRuleRemoveButton, string.Empty), out var itemSlot);

                if (itemSlot == -1)
                {
                    return(false);
                }

                controller.RemoveItemInputRule(controller.GetItemInputRules()[itemSlot]);

                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "RemoveItemRule",
                                                                 controller.GetItemInputRules()[itemSlot].MaxInput.ToString(), controller.GetItemInputRules()[itemSlot].Item, controller, 0.0f);
                }
                Redraw(targetEntity);
            }

            if (name.Equals(InputRuleAddButton))
            {
                _itemSearch = true;
                ItemSearchWindow.SetupUIRules();
                Redraw(targetEntity);
                return(true);
            }

            if (ItemSearchWindow.HandleButtonPress(this, name, out var selectedItem))
            {
                _itemSearch = false;
                manager.RedrawWindow();
            }

            if (selectedItem == null)
            {
                return(false);
            }
            else
            {
                var itemInputRule = new ItemInputRule();
                itemInputRule.MaxInput = QuantumStorageControllerMachine.DefaultInputRuleStep;
                itemInputRule.Item     = selectedItem;
                controller.AddItemInputRule(itemInputRule);
                if (!WorldScript.mbIsServer)
                {
                    NetworkManager.instance.SendInterfaceCommand(QuantumStorageMod.QuantumStorageControllerWindowKey,
                                                                 "AddItemRule",
                                                                 itemInputRule.MaxInput.ToString(), selectedItem, controller, 0.0f);
                }
                Redraw(targetEntity);
            }

            return(false);
        }