// Finds a list of all fission containers List <FissionContainer> FindFissionContainers() { List <FissionContainer> fissionContainers = new List <FissionContainer>(); List <Part> allParts = this.vessel.parts; foreach (Part pt in allParts) { PartModuleList pml = pt.Modules; for (int i = 0; i < pml.Count; i++) { PartModule curModule = pml.GetModule(i); FissionContainer candidate = curModule.GetComponent <FissionContainer>(); if (candidate != null) { fissionContainers.Add(candidate); } } } if (fissionContainers.Count == 0) { ScreenMessages.PostScreenMessage(new ScreenMessage("No nuclear fuel containers attached to this ship.", 4f, ScreenMessageStyle.UPPER_CENTER)); } return(fissionContainers); }
// #################################### // Refuelling // #################################### // Tries to refeul the reactor void TryRefuel() { if (Enabled || CurrentCoreTemperature > 0f) { ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot refuel while reactor is running or hot!", 4f, ScreenMessageStyle.UPPER_CENTER)); return; } else { int engLevel = KerbalEngineerLevel(); if (engLevel < KerbalRefuelLevelNeeded) { ScreenMessages.PostScreenMessage(new ScreenMessage("A level " + KerbalRefuelLevelNeeded.ToString() + " Engineer is required for reactor fuelling", 4f, ScreenMessageStyle.UPPER_CENTER)); } else { Utils.Log("Fission Reactor: Searching for valid containers..."); FissionContainer from = FindValidFissionContainer(); if (from != null) { Utils.Log("Fission Reactor: Refuelling valid container..."); from.RefuelReactorFromContainer(this, this.part.Resources.Get(PartResourceLibrary.Instance.GetDefinition(depletedName).id).amount); } } } }
public override void OnFixedUpdate() { if (Enabled) { if (workContainer == null) { // try to get a container, turn us off if we can't find any workContainer = FindValidFissionContainer(); if (workContainer == null) { StopReprocessing(); Status = "No waste found"; return; } } else { // consume power double power = this.part.RequestResource("ElectricCharge", EnergyCost * TimeWarp.fixedDeltaTime); if (power <= EnergyCost * Time.fixedDeltaTime) { Status = "Not enough Electric Charge!"; StopReprocessing(); } else { Status = String.Format("Processing at: {0:F2} DU/s", ReprocessRate); double wasteRefined = workContainer.part.RequestResource(depletedName, ReprocessRate * TimeWarp.fixedDeltaTime); if (wasteRefined >= 0d) { workContainer.part.RequestResource(fuelName, -wasteRefined * RecycleEfficiency); if (workContainer.Expended && (workContainer.part.Resources.Get(PartResourceLibrary.Instance.GetDefinition(fuelName).id).maxAmount - workContainer.part.Resources.Get(PartResourceLibrary.Instance.GetDefinition(fuelName).id).amount) > 0.0d) { workContainer.Expended = false; } } else { StopReprocessing(); workContainer = null; } } } } }
// #################################### // Refuelling // #################################### // Tries to refeul the reactor void TryRefuel() { if (Enabled || CurrentCoreTemperature > 0f) { ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot refuel while reactor is running or hot!", 4f, ScreenMessageStyle.UPPER_CENTER)); return; } else { Debug.Log("NFT: Fission Reactor: Searching for valid containers..."); FissionContainer from = FindValidFissionContainer(); if (from != null) { Debug.Log("NFT: Fission Reactor: Refuelling valid container..."); from.RefuelReactorFromContainer(this, this.part.Resources.Get(PartResourceLibrary.Instance.GetDefinition(depletedName).id).amount); } } }