Ejemplo n.º 1
0
        // 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);
        }
Ejemplo n.º 2
0
        // ####################################
        // 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);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        // ####################################
        // 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);
                }
            }
        }