/// <summary> /// Stores or retrieves a resource to the facility. Deletes the resource if nothing is left /// </summary> /// <param name="resource"></param> /// <param name="amount"></param> internal static void StoreResource(PartResourceDefinition resource, double amount) { StoredResource myStoredResource = selectedFacility.storedResources.Where(r => r.resource == resource).FirstOrDefault(); if (myStoredResource == null) { myStoredResource = new StoredResource { resource = resource, amount = (float)amount }; selectedFacility.storedResources.Add(myStoredResource); } else { myStoredResource.amount += (float)amount; } if (Math.Round(myStoredResource.amount, 4) == 0f) { selectedFacility.storedResources.Remove(myStoredResource); } }
/// <summary> /// SubSub windows components. The actual scroll view /// </summary> internal static void ShowRetrieveGUI() { foreach (PartResourceDefinition resource in allResources) { if (blackListedResources.Contains(resource.name)) { continue; } storedResource = selectedFacility.storedResources.Where(r => r.resource == resource).FirstOrDefault(); if (storedResource == null) { storedAmount = 0f; } else { storedAmount = storedResource.amount; } GUILayout.Box(UIMain.tHorizontalSep, UIMain.BoxNoBorderW, GUILayout.Height(4)); GUILayout.BeginHorizontal(); { GUILayout.Label(resource.name, GUILayout.Height(23)); GUILayout.FlexibleSpace(); GUILayout.Label("Stored: ", GUILayout.Height(23)); GUILayout.Label((storedAmount).ToString(), UIMain.LabelInfo, GUILayout.Height(23)); GUILayout.FlexibleSpace(); GUILayout.Label("Volume: ", GUILayout.Height(23)); GUILayout.Label((resource.volume * storedAmount).ToString() + "/" + selectedFacility.maxVolume.ToString(), UIMain.LabelInfo, GUILayout.Height(23)); //GUILayout.Space(10); } GUILayout.EndHorizontal(); foreach (PartSet xFeedSet in currentVessel.crossfeedSets) { xFeedSet.GetConnectedResourceTotals(resource.id, out double xfeedAmount, out double xfeedMax, true); GUILayout.BeginHorizontal(); { GUILayout.Label(Math.Round(xfeedAmount, 1).ToString() + " of " + Math.Round(xfeedMax, 1).ToString(), UIMain.LabelInfo, GUILayout.Height(18)); GUILayout.FlexibleSpace(); maxSpaceLeft = selectedFacility.maxVolume - selectedFacility.currentVolume; storableUnits = Math.Min(increment, maxSpaceLeft / resource.volume); GUI.enabled = (storableUnits > 0f); if (GUILayout.Button("+", GUILayout.Height(18), GUILayout.Width(32))) { double transferred = xFeedSet.RequestResource(xFeedSet.GetParts().ToList().First(), resource.id, storableUnits, true); StoreResource(resource, transferred); } if (GUILayout.RepeatButton("++", GUILayout.Height(18), GUILayout.Width(32))) { double transferred = xFeedSet.RequestResource(xFeedSet.GetParts().ToList().First(), resource.id, storableUnits, true); StoreResource(resource, transferred); } GUI.enabled = true; GUILayout.FlexibleSpace(); // check if we have enough space to retrieve the resource and if there is anything to retrieve GUI.enabled = ((xfeedMax > 0) && (storedAmount > 0f)); if (GUILayout.Button("-", GUILayout.Height(18), GUILayout.Width(32))) { double transferred = xFeedSet.RequestResource(xFeedSet.GetParts().ToList().First(), resource.id, -Math.Min(increment, storedAmount), true); StoreResource(resource, transferred); } if (GUILayout.RepeatButton("--", GUILayout.Height(18), GUILayout.Width(32))) { double transferred = xFeedSet.RequestResource(xFeedSet.GetParts().ToList().First(), resource.id, -Math.Min(increment, storedAmount), true); StoreResource(resource, transferred); } GUILayout.Space(10); GUI.enabled = true; } GUILayout.EndHorizontal(); } //GUILayout.Space(4); } }
public StorageItem(Storage storage, StoredResource storedResource, RMResourceInfo vesselResource) { this.storage = storage; this.storedResource = storedResource; this.vesselResource = vesselResource; }