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); }
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; }