コード例 #1
0
        internal static void PerformCraft()
        {
            for (int i = Crafts.Count - 1; i > -1; i--)
            {
                var craft = Crafts[i];
                if (craft.TechType != TechType.None && craft.Manager != null)
                {
                    if (!craft.IsCraftable)
                    {
                        continue;
                    }

                    var techData = DSSHelpers.CheckIfTechDataAvailable(craft, out var pass);

                    if (pass)
                    {
                        if (craft.Manager.RemoveItems(techData.Ingredients))
                        {
                            foreach (TechType item in techData.LinkedItems)
                            {
                                craft.Manager.AddItemToContainer(item.ToInventoryItem());
                            }

                            for (int j = 0; j < techData.craftAmount; j++)
                            {
                                craft.Manager.AddItemToContainer(craft.TechType.ToInventoryItem());
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        private void PerformTakeOperation(TechType techType)
        {
            QuickLogger.Debug("Perform Take Operation", true);
            foreach (DSSRackController baseUnit in BaseRacks)
            {
                if (baseUnit.HasItem(techType))
                {
                    var data = baseUnit.GetItemDataFromServer(techType);
                    QuickLogger.Debug("Calling Take", true);
                    var result = baseUnit.GivePlayerItem(techType, data);
                    if (!result)
                    {
                        return;
                        //TODO Add Message
                    }
                    return;
                }
            }

            //Check connectables
            foreach (KeyValuePair <string, FCSConnectableDevice> fcsConnectable in FCSConnectables)
            {
                Vector2int itemSize = CraftData.GetItemSize(techType);
                if (fcsConnectable.Value.ContainsItem(techType) && Inventory.main.HasRoomFor(itemSize.x, itemSize.y))
                {
                    var item = fcsConnectable.Value.RemoveItemFromContainer(techType, 1);
                    if (item == null)
                    {
                        continue;
                    }
                    DSSHelpers.GivePlayerItem(item);
                    break;
                }
            }
        }
コード例 #3
0
        private void UpdateDockedVehicles()
        {
            _vehiclesSnapshot = new List <Vehicle>(Vehicles);
            Vehicles.Clear();
            ItemsTracker.Clear();
            foreach (var dockingBay in DockingBays)
            {
                var vehicle = dockingBay.GetDockedVehicle();
                if (vehicle != null)
                {
                    vehicle.modules.onRemoveItem += ModulesOnRemoveItem;
                    var vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle);
                    ItemsTracker.Add(vehicle, GetItems(vehicleContainers));
                    _trackedContainers.AddRange(vehicleContainers);
                    Vehicles.Add(vehicle);
                    UpdateSubscription(vehicleContainers, true, vehicle);
                }
            }

            if (_prevContainerAmount != _trackedContainers.Count)
            {
                _manager.OnContainerUpdate?.Invoke(_manager);
            }

            _prevContainerAmount = _trackedContainers.Count;
            _trackedContainers.Clear();
        }
        public void GivePlayerItem()
        {
            var result = DSSHelpers.GivePlayerItem(QPatch.Server.TechType, new ObjectDataTransferData {
                data = _items, Filters = _filters, IsServer = true
            }, null);

            if (result)
            {
                _items = null;
            }

            QuickLogger.Debug($"Items result: {_items} || Result = {result}");
        }
コード例 #5
0
        internal bool IsAllowedToAdd(Vehicle vehicle, Pickupable pickupable)
        {
            var containers = DSSHelpers.GetVehicleContainers(vehicle);

            foreach (ItemsContainer container in containers)
            {
                if (container.HasRoomFor(pickupable))
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #6
0
        internal ItemsContainer AddItem(Vehicle vehicle, InventoryItem item)
        {
            var containers = DSSHelpers.GetVehicleContainers(vehicle);

            foreach (ItemsContainer container in containers)
            {
                if (container.HasRoomFor(item.width, item.height))
                {
                    return(container);
                }
            }

            return(null);
        }
コード例 #7
0
        internal void OpenContainer(Vehicle vehicle, ItemsContainer container)
        {
            var containers = DSSHelpers.GetVehicleContainers(vehicle);

            foreach (ItemsContainer currentContainer in containers)
            {
                if (container != currentContainer)
                {
                    continue;
                }

                Player main = Player.main;
                PDA    pda  = main.GetPDA();
                Inventory.main.SetUsedStorage(container, false);
                pda.Open(PDATab.Inventory, null, null, 4f);
                break;
            }
        }
コード例 #8
0
        private void OnDockedVehicleChanged()
        {
            UpdateDockedVehicles();

            _newlyDockedVehicle = Vehicles.Except(_vehiclesSnapshot);

            _tryExtractItems = StartCoroutine(TryExtractItems());

            var list3 = _vehiclesSnapshot.Except(Vehicles);

            // Un-subscribe all undocked vehicles
            foreach (Vehicle vehicle in list3)
            {
                var vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle);
                UpdateSubscription(vehicleContainers, false, vehicle);
            }

            _manager.OnVehicleUpdate?.Invoke(Vehicles, _manager);
        }
コード例 #9
0
        public static void PerformCraft(FCSOperation craft)
        {
            var techData = DSSHelpers.CheckIfTechDataAvailable(craft, out var pass);

            if (pass)
            {
                if (craft.Manager.RemoveItems(techData.Ingredients))
                {
                    foreach (TechType item in techData.LinkedItems)
                    {
                        craft.Manager.AddItemToContainer(item.ToInventoryItem());
                    }

                    for (int j = 0; j < techData.craftAmount; j++)
                    {
                        craft.Manager.AddItemToContainer(craft.TechType.ToInventoryItem());
                    }
                }
            }
        }
コード例 #10
0
        private void OnLoadVehicleContainersGrid(DisplayData data)
        {
            try
            {
                if (_isBeingDestroyed)
                {
                    return;
                }
                _vehicleContainersGrid?.ClearPage();

                var grouped = DSSHelpers.GetVehicleContainers(_currentVehicle);

                if (grouped == null)
                {
                    return;
                }

                QuickLogger.Debug($"Vehicle Count to process: {grouped.Count}");

                if (data.EndPosition > grouped.Count)
                {
                    data.EndPosition = grouped.Count;
                }

                if (data.ItemsGrid?.transform == null)
                {
                    return;
                }

                QuickLogger.Debug($"Adding Vehicles");


                for (int i = data.StartPosition; i < data.EndPosition; i++)
                {
                    if (grouped[i] == null)
                    {
                        continue;
                    }

                    GameObject buttonPrefab = Instantiate(data.ItemsPrefab);

                    if (buttonPrefab == null || data.ItemsGrid == null)
                    {
                        if (buttonPrefab != null)
                        {
                            QuickLogger.Debug("Destroying Tab", true);
                            Destroy(buttonPrefab);
                        }
                        return;
                    }

                    CreateButton(data, buttonPrefab, new ButtonData {
                        Container = grouped[i]
                    }, ButtonType.Container, i.ToString(), "VehicleContainerBTN");
                }

                _vehicleContainersGrid?.UpdaterPaginator(grouped.Count);
            }
            catch (Exception e)
            {
                QuickLogger.Error("Error Caught");
                QuickLogger.Error($"Error Message: {e.Message}");
                QuickLogger.Error($"Error StackTrace: {e.StackTrace}");
            }
        }
コード例 #11
0
        private Pickupable PerformTakeOperation(TechType techType)
        {
            QuickLogger.Debug("Perform Take Operation", true);
            foreach (DSSRackController baseUnit in BaseRacks)
            {
                if (baseUnit.HasItem(techType))
                {
                    var data = baseUnit.GetItemDataFromServer(techType, out RackSlot slot);
                    QuickLogger.Debug("Calling Take", true);

                    if (GivePlayerItem)
                    {
                        var result = baseUnit.GivePlayerItem(techType, data);
                        if (!result)
                        {
                            return(null);
                            //TODO Add Message
                        }
                    }
                    else
                    {
                        slot.Remove((ObjectData)data.data);
                        GivePlayerItem = true;
                    }

                    return(data.ToPickable(techType));
                }
            }

            if (!TakeFromConnectables)
            {
                TakeFromConnectables = true;
                return(null);
            }
            //Check connectables
            foreach (KeyValuePair <string, FCSConnectableDevice> fcsConnectable in FCSConnectables)
            {
                Vector2int itemSize = CraftData.GetItemSize(techType);
                if (fcsConnectable.Value.ContainsItem(techType) && fcsConnectable.Value.IsVisible && !fcsConnectable.Value.IsBase() &&
                    fcsConnectable.Value.IsOperational())
                {
                    var item = fcsConnectable.Value.RemoveItemFromContainer(techType, 1);

                    if (item == null)
                    {
                        continue;
                    }

                    if (GivePlayerItem)
                    {
                        DSSHelpers.GivePlayerItem(item);
                    }

                    GivePlayerItem = true;
                    Mod.OnBaseUpdate?.Invoke();
                    return(item);
                }
            }

            return(null);
        }
コード例 #12
0
        private IEnumerator TryExtractItems()
        {
            if (!_isToggled)
            {
                yield break;
            }

            if (_extractingItems)
            {
                yield break;
            }
            if (!QPatch.Configuration.Config.PullFromDockedVehicles)
            {
                yield break;
            }

            Dictionary <string, int> extractionResults = new Dictionary <string, int>();

            List <Vehicle> localVehicles = _newlyDockedVehicle?.ToList(); //Vehicles.ToList();

            if (localVehicles == null)
            {
                yield break;
            }

            foreach (var vehicle in localVehicles)
            {
                var vehicleName = vehicle.GetName();
                extractionResults[vehicleName] = 0;
                var  vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle);
                bool couldNotAdd       = false;
                foreach (var vehicleContainer in vehicleContainers)
                {
                    foreach (var item in vehicleContainer.ToList())
                    {
                        if (!QPatch.Configuration.Config.PullFromDockedVehicles)
                        {
                            break;
                        }

                        if (ValidateCheck(item))
                        {
                            continue;
                        }

                        if (_manager.CanBeStored(1, item.item.GetTechType()))
                        {
                            var success = _manager.AddItemToContainer(item);
                            if (success)
                            {
                                extractionResults[vehicleName]++;
                                if (_extractingItems == false)
                                {
                                    ErrorMessage.AddDebug("Extracting items from vehicle storage...");
                                }
                                _extractingItems = true;
                                yield return(new WaitForSeconds(QPatch.Configuration.Config.ExtractInterval));
                            }
                            else
                            {
                                couldNotAdd = true;
                                break;
                            }
                        }
                        else
                        {
                            couldNotAdd = true;
                            break;
                        }
                    }

                    if (couldNotAdd || !QPatch.Configuration.Config.PullFromDockedVehicles)
                    {
                        break;
                    }
                }
            }

            _extractingItems    = false;
            _newlyDockedVehicle = null;
        }
コード例 #13
0
        private void OnLoadAutoCraftItemsGrid(DisplayData data)
        {
            if (_isBeingDestroyed || _mono == null || _mono?.Manager == null)
            {
                return;
            }

            _autocraftItemTechTypeGrid.ClearPage();
            _autoCraftItemTechTypeList.Clear();

            var grouped = Mod.AllTechTypes.Where(DSSHelpers.CheckIfTechDataAvailable).ToList();

            if (!string.IsNullOrEmpty(_autocraftItemSearchString?.Trim()))
            {
                grouped = grouped.Where(p => Language.main.Get(p).StartsWith(_autocraftItemSearchString.Trim(), StringComparison.OrdinalIgnoreCase)).ToList();
            }

            if (data.EndPosition > grouped.Count)
            {
                data.EndPosition = grouped.Count;
            }

            if (data.ItemsGrid?.transform == null)
            {
                QuickLogger.Debug("Grid returned null canceling operation");
                return;
            }

            for (int i = data.StartPosition; i < data.EndPosition; i++)
            {
                GameObject buttonPrefab = GameObject.Instantiate(DSSModelPrefab.OperatorItemPrefab);

                if (buttonPrefab == null || data.ItemsGrid == null)
                {
                    if (buttonPrefab != null)
                    {
                        QuickLogger.Debug("Destroying Tab", true);
                        Destroy(buttonPrefab);
                    }
                    return;
                }

                var button = buttonPrefab.AddComponent <OperationInterfaceButton>();
                if (grouped[i] == _craftTechType)
                {
                    button.SetCheck(true);
                }
                buttonPrefab.transform.SetParent(data.ItemsGrid.transform, false);
                button.BtnName        = "AutoCraftItemTechBTN";
                button.OnButtonClick  = OnButtonClick;
                button.STARTING_COLOR = _startColor;
                button.HOVER_COLOR    = _hoverColor;
                button.Tag            = new OperatorButtonData {
                    Button = button, TechType = grouped[i]
                };
                button.TextLineOne = DSSHelpers.GetTechDataString(grouped[i]);
                //buttonPrefab.GetComponentInChildren<Text>().text = Language.main.Get(grouped[i]);
                uGUI_Icon icon = InterfaceHelpers.FindGameObject(buttonPrefab, "Icon").AddComponent <uGUI_Icon>();
                icon.sprite = SpriteManager.Get(grouped[i]);
                _autoCraftItemTechTypeList.Add(button);
            }

            _autocraftItemTechTypeGrid.UpdaterPaginator(grouped.Count);
        }