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();
        }
        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);
        }
        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);
        }
        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;
            }
        }
        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);
        }
Exemple #6
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}");
            }
        }
        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;
        }