private State UpdateControlState()
        {
            if (!RTCore.Instance)
            {
                IsRTPowered = true;
                return(State.Operational);
            }
            if (IsRTBroken)
            {
                IsRTPowered = false;
                return(State.Malfunction);
            }
            if (!IsRTActive)
            {
                IsRTPowered = false;
                return(State.Off);
            }
            ModuleResource request         = new ModuleResource();
            float          resourceRequest = Consumption * TimeWarp.fixedDeltaTime;
            float          resourceAmount  = part.RequestResource("ElectricCharge", resourceRequest);

            if (resourceAmount < resourceRequest * 0.9)
            {
                IsRTPowered = false;
                return(State.NoResources);
            }
            IsRTPowered = true;
            return(State.Operational);
        }
Example #2
0
        private State UpdateControlState()
        {
            if (RTCore.Instance == null)
            {
                return(State.Operational);
            }

            if (IsRTBroken)
            {
                return(State.Malfunction);
            }

            if (!IsRTActive)
            {
                return(State.Off);
            }

            ModuleResource request         = new ModuleResource();
            float          resourceRequest = Consumption * (TimeWarp.fixedDeltaTime / TimeWarp.CurrentRate);
            float          resourceAmount  = part.RequestResource("ElectricCharge", resourceRequest);

            if (resourceAmount < resourceRequest * 0.9)
            {
                return(State.NoResources);
            }

            return(State.Operational);
        }
        public override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);

            // load ignition resources
            if (node.HasNode("IGNITOR_RESOURCE"))
            {
                ignitionResources.Clear();
            }
            foreach (ConfigNode n in node.GetNodes("IGNITOR_RESOURCE"))
            {
                ModuleResource res = new ModuleResource();
                res.Load(n);
                ignitionResources.Add(res);
            }

            // Determine thrustAxis when creating prefab
            if (HighLogic.LoadedScene == GameScenes.LOADING)
            {
                thrustAxis = Vector3.zero;
                foreach (Transform t in part.FindModelTransforms(thrustVectorTransformName))
                {
                    thrustAxis -= t.forward;
                }
                thrustAxis = thrustAxis.normalized;
            }

            node.TryGetNode("Ullage", ref ullageNode);
        }
Example #4
0
        protected double ResourceRate()
        {
            ModuleCommand mC = part.FindModuleImplementing <ModuleCommand>();

            if (mC != null)
            {
                foreach (ModuleResource r in mC.resHandler.inputResources)
                {
                    if (r.id == PartResourceLibrary.ElectricityHashcode)
                    {
                        commandChargeResource = r;
                        if (GetEnabledkW() < 0)
                        {
                            enabledkW = (float)r.rate;
                        }
                        else
                        {
                            r.rate = GetEnabledkW();
                        }
                        return(r.rate);
                    }
                }
            }
            return(-1);
        }
Example #5
0
        public override void OnLoad(ConfigNode node)
        {
            if (node.HasNode("RESOURCE"))
            {
                resources = new List <ModuleResource>();

                ConfigNode[] resourceNodes = node.GetNodes("RESOURCE");

                int r = resourceNodes.Length;

                for (int j = 0; j < r; j++)
                {
                    ConfigNode     resource = resourceNodes[j];
                    ModuleResource mod      = new ModuleResource();
                    mod.Load(resource);
                    resources.Add(mod);
                }
            }

            if (resources.Count > 0)
            {
                usingEC = true;
            }

            StartCoroutine(delayedLoad(node));
        }
Example #6
0
 private void SetGeneratorInfo()
 {
     moduleGenerator = selectedPart.GetModule <ModuleGenerator>();
     if (moduleGenerator != null)
     {
         if (moduleGenerator.resHandler.inputResources.Count > 0)
         {
             infoItems.Add(PartInfoItem.Create("Generator Input"));
             for (int i = 0; i < moduleGenerator.resHandler.inputResources.Count; ++i)
             {
                 generatorResource = moduleGenerator.resHandler.inputResources[i];
                 infoItems.Add(PartInfoItem.Create("\t" + generatorResource.name, generatorResource.rate.ToRate()));
             }
         }
         if (moduleGenerator.resHandler.outputResources.Count > 0)
         {
             infoItems.Add(PartInfoItem.Create("Generator Output"));
             for (int i = 0; i < moduleGenerator.resHandler.outputResources.Count; ++i)
             {
                 generatorResource = moduleGenerator.resHandler.outputResources[i];
                 infoItems.Add(PartInfoItem.Create("\t" + generatorResource.name, generatorResource.rate.ToRate()));
             }
         }
         if (moduleGenerator.isAlwaysActive)
         {
             infoItems.Add(PartInfoItem.Create("Generator is Always Active"));
         }
     }
 }
        private void ApplyLateSpecifics(PartModule module, bool enable)
        {
            // Update staging icon visibility
            if (disableModule && module.IsStageable())
            {
                module.stagingEnabled = !enable;
                module.part.UpdateStageability(false, true);
            }

            if (!(disableModule && enable))
            {
                // Unfortunatly ModuleDataTransmitter OnLoad create the reshandler on the prefab
                // and never again because it checks for part.partInfo == null
                if (module is ModuleDataTransmitter && module.resHandler.inputResources.Count == 0)
                {
                    string value = "ElectricCharge";
                    if (modifiersNode != null && !modifiersNode.TryGetValue("requiredResource", ref value))
                    {
                        moduleNode.TryGetValue("requiredResource", ref value);
                    }
                    ModuleResource moduleResource = new ModuleResource();
                    moduleResource.name  = value;
                    moduleResource.title = KSPUtil.PrintModuleName(value);
                    moduleResource.id    = value.GetHashCode();
                    moduleResource.rate  = 1.0;
                    module.resHandler.inputResources.Add(moduleResource);
                }
                else if (module is ModuleEngines && HighLogic.LoadedSceneIsFlight)
                {
                    FixEnginesFX((ModuleEngines)module);
                }
            }
        }
Example #8
0
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                moduleGenerator = part.FindModuleImplementing <ModuleGenerator>();

                if (moduleGenerator == null)
                {
                    return;
                }

                String[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
                this.resources_to_supply = resources_to_supply;
                base.OnStart(state);


                resourceBuffers = new ResourceBuffers();
                outputType      = resourceType.other;
                foreach (ModuleResource moduleResource in moduleGenerator.resHandler.outputResources)
                {
                    // assuming only one of those two is present
                    if (moduleResource.name == ResourceManager.FNRESOURCE_MEGAJOULES)
                    {
                        outputType = resourceType.megajoule;
                        resourceBuffers.AddConfiguration(new ResourceBuffers.MaxAmountConfig(ResourceManager.FNRESOURCE_MEGAJOULES, 50));

                        mockInputResource      = new ModuleResource();
                        mockInputResource.name = moduleResource.name;
                        mockInputResource.id   = moduleResource.name.GetHashCode();
                        moduleGenerator.resHandler.inputResources.Add(mockInputResource);
                        moduleOutputResource = moduleResource;
                        break;
                    }
                    if (moduleResource.name == ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE)
                    {
                        outputType = resourceType.electricCharge;
                        resourceBuffers.AddConfiguration(new ResourceBuffers.MaxAmountConfig(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE, 50));

                        mockInputResource      = new ModuleResource();
                        mockInputResource.name = moduleResource.name;
                        mockInputResource.id   = moduleResource.name.GetHashCode();
                        moduleGenerator.resHandler.inputResources.Add(mockInputResource);
                        moduleOutputResource = moduleResource;
                        break;
                    }
                }
                resourceBuffers.Init(this.part);
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI] - Exception in FNGeneratorAdapter.OnStart " + e.Message);
                throw;
            }
        }
        public override void OnStart(PartModule.StartState state)
        {
            if (state == StartState.Editor)
            {
                return;
            }

            // calculate Astronomical unit on homeworld semiMajorAxis when missing
            if (astronomicalUnit == 0)
            {
                astronomicalUnit = FlightGlobals.GetHomeBody().orbit.semiMajorAxis;
            }

            _microwavePowerReceiver = part.FindModuleImplementing <BeamedPowerReceiver>();

            _solarPanel = (ModuleDeployableSolarPanel)this.part.FindModuleImplementing <ModuleDeployableSolarPanel>();
            if (_solarPanel == null)
            {
                return;
            }

            part.force_activate();

            String[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
            this.resources_to_supply = resources_to_supply;
            base.OnStart(state);

            if (_solarPanel.resourceName == ResourceManager.FNRESOURCE_MEGAJOULES)
            {
                outputType = ResourceType.megajoule;
            }
            else if (_solarPanel.resourceName == ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE)
            {
                outputType = ResourceType.electricCharge;
            }
            else
            {
                outputType = ResourceType.other;
            }

            mockInputResource      = new ModuleResource();
            mockInputResource.name = _solarPanel.resourceName;
            mockInputResource.id   = _solarPanel.resourceName.GetHashCode();
            _solarPanel.resHandler.inputResources.Add(mockInputResource);

            // only manager power buffer when microwave receiver is not available
            if (outputType != ResourceType.other && _microwavePowerReceiver == null)
            {
                _resourceBuffers = new ResourceBuffers();
                _resourceBuffers.AddConfiguration(new ResourceBuffers.TimeBasedConfig(ResourceManager.FNRESOURCE_MEGAJOULES));
                _resourceBuffers.AddConfiguration(new ResourceBuffers.TimeBasedConfig(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE));
                _resourceBuffers.UpdateVariable(ResourceManager.FNRESOURCE_MEGAJOULES, (double)(decimal)(outputType == ResourceType.electricCharge ? _solarPanel.chargeRate * 0.001f : _solarPanel.chargeRate));
                _resourceBuffers.UpdateVariable(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE, (double)(decimal)(outputType == ResourceType.electricCharge ? _solarPanel.chargeRate : _solarPanel.chargeRate * 1000));
                _resourceBuffers.Init(this.part);
            }

            stars = KopernicusHelper.Stars;
        }
Example #10
0
 public override void OnLoad(ConfigNode node)
 {
     if (resHandler.inputResources.Count == 0)
     {
         ModuleResource moduleResource = new ModuleResource();
         moduleResource.name  = resourceName;
         moduleResource.title = KSPUtil.PrintModuleName(resourceName);
         moduleResource.id    = resourceName.GetHashCode();
         moduleResource.rate  = (double)resourceAmount;
         resHandler.inputResources.Add(moduleResource);
     }
 }
 private void SetAlternatorInfo()
 {
     moduleAlternator = selectedPart.GetModule <ModuleAlternator>();
     if (moduleAlternator != null)
     {
         infoItems.Add(PartInfoItem.Create("Alternator"));
         for (int i = 0; i < moduleAlternator.outputResources.Count; ++i)
         {
             moduleResource = moduleAlternator.outputResources[i];
             infoItems.Add(PartInfoItem.Create("\t" + moduleResource.name, moduleResource.rate.ToRate()));
         }
     }
 }
Example #12
0
        static void Main(string[] args)
        {
            OldExampleModule oldExampleModule = new OldExampleModule();

            oldExampleModule.Load();

            // Injeção de dependencia
            IConfigurationResource configurationResource = new ConfigurationResource();
            IModuleResource        moduleResource        = new ModuleResource();

            NewExampleModule newExampleModule = new NewExampleModule(configurationResource, moduleResource);

            newExampleModule.Load();
        }
        void AttachCollector(Part toPart) {
            toPart.AddModule("ModuleExhaustCapture");

            ModuleExhaustCapture newModule = toPart.FindModuleImplementing<ModuleExhaustCapture>();
            ModuleResource outPutRes = new ModuleResource();
            
            if (primaryResourceName != null && primaryResourceRate != 0 && PartResourceLibrary.Instance.resourceDefinitions.Contains(primaryResourceName)) 
            {
           
                outPutRes.name = primaryResourceName;
                outPutRes.id = PartResourceLibrary.Instance.GetDefinition(primaryResourceName).id; //Do I need this       
                outPutRes.rate = primaryResourceRate*thrustMultiplier;
           
                newModule.outputResources.Add(outPutRes);
                print("PZER: Capture " + outPutRes.name + " " + outPutRes.id + " added with a real rate of " + outPutRes.rate * thrustMultiplier);
            }
            else
            {
                 print("PZER: " + part.partName + " has bad primary resource/rate: " + primaryResourceName +" rate: " + primaryResourceRate);
            }

            
            
            if (secondaryResourceName != null && secondaryResourceRate != 0 && PartResourceLibrary.Instance.resourceDefinitions.Contains(secondaryResourceName)) {


                outPutRes.name = secondaryResourceName;
                 
                outPutRes.id = PartResourceLibrary.Instance.GetDefinition(secondaryResourceName).id; //see above       
                outPutRes.rate = secondaryResourceRate * thrustMultiplier;

  
                newModule.outputResources.Add(outPutRes);

                print("PZER: Secondary capture " + outPutRes.name + " " + outPutRes.id + " added with a real rate of " + outPutRes.rate * thrustMultiplier);
            }
            else
            
            {
                print("PZER: " + part.partName + " has bad secondary resource/rate: " + secondaryResourceName + " rate: " + secondaryResourceRate);
            }


            

            newModule.heatIncrease = (float)additionalHeatRate;



        }
Example #14
0
        private void FixedUpdate()
        {
            if (handler == null)
            {
                return;
            }

            if (powerIsProblem)
            {
                if (powerTimer < 30)
                {
                    powerTimer++;
                    return;
                }

                //SEPUtilities.log("Re-deploying SEP Experiment after power out", logLevels.error);

                DeployExperiment();
            }

            if (!handler.experimentRunning)
            {
                return;
            }

            int l = resources.Count;

            for (int i = 0; i < l; i++)
            {
                ModuleResource resource = resources[i];
                resource.currentRequest = resource.rate * TimeWarp.fixedDeltaTime;
                resource.currentAmount  = part.RequestResource(resource.id, resource.currentRequest);

                if (resource.currentAmount < resource.currentRequest * 0.8999)
                {
                    //SEPUtilities.log("Not enough power for SEP Experiment [{0}]", logLevels.error, experimentID);
                    PauseExperiment();
                    Events["DeployExperiment"].active = false;
                    Events["PauseExperiment"].active  = true;
                    experimentRunning = true;
                    powerIsProblem    = true;
                    powerTimer        = 0;
                    break;
                }
                else
                {
                    powerIsProblem = false;
                }
            }
        }
        public override void OnStart(StartState state)
        {
            if (state == StartState.Editor)
            {
                return;
            }

            _mjSolarSupplyField = Fields[nameof(mjSolarSupply)];
            _mjMaxSupplyField   = Fields[nameof(mjMaxSupply)];

            if (part.Modules.Contains("SolarPanelFixer"))
            {
                _solarPanelFixer = part.Modules["SolarPanelFixer"];

                _fieldKerbalismNominalRate = _solarPanelFixer.Fields["nominalRate"];
                _fieldKerbalismPanelStatus = _solarPanelFixer.Fields["panelStatus"];
            }

            // calculate Astronomical unit on homeworld semiMajorAxis when missing
            if (astronomicalUnit <= 0)
            {
                astronomicalUnit = FlightGlobals.GetHomeBody().orbit.semiMajorAxis;
            }

            _microwavePowerReceiver = part.FindModuleImplementing <BeamedPowerReceiver>();

            _solarPanel = part.FindModuleImplementing <ModuleDeployableSolarPanel>();
            if (_solarPanel == null || _solarPanel.chargeRate <= 0)
            {
                return;
            }

            if (part.FindModuleImplementing <ModuleJettison>() == null)
            {
                Debug.Log("[KSPI]: FNSolarPanelWasteHeatModule Force Activated  " + part.name);
                part.force_activate();
            }

            // string[] resourcesToSupply = { ResourceSettings.Config.ElectricPowerInMegawatt };
            //this.resources_to_supply = resourcesToSupply;
            base.OnStart(state);

            _outputResource = _solarPanel.resHandler.outputResources.FirstOrDefault();

            resourceName = _solarPanel.resourceName;

            _stars = KopernicusHelper.Stars;
        }
 private void SetReactionWheelInfo()
 {
     moduleReactionWheel = selectedPart.GetModule <ModuleReactionWheel>();
     if (moduleReactionWheel != null)
     {
         infoItems.Add(PartInfoItem.Create("Reaction Wheel Torque"));
         infoItems.Add(PartInfoItem.Create("\tPitch", moduleReactionWheel.PitchTorque.ToTorque()));
         infoItems.Add(PartInfoItem.Create("\tRoll", moduleReactionWheel.RollTorque.ToTorque()));
         infoItems.Add(PartInfoItem.Create("\tYaw", moduleReactionWheel.YawTorque.ToTorque()));
         for (int i = 0; i < moduleReactionWheel.inputResources.Count; ++i)
         {
             moduleResource = moduleReactionWheel.inputResources[i];
             infoItems.Add(PartInfoItem.Create("\t" + moduleResource.name, moduleResource.rate.ToRate()));
         }
     }
 }
 public override void OnLoad(ConfigNode node)
 {
     if (base.resHandler.inputResources.Count == 0 && (node.HasValue("resourceName") || node.HasValue("powerConsumption") || base.part.partInfo == null || (UnityEngine.Object)base.part.partInfo.partPrefab == (UnityEngine.Object)null))
     {
         string text             = "ElectricCharge";
         float  powerConsumption = 0.0075f;
         node.TryGetValue("resourceName", ref text);
         node.TryGetValue("powerConsumption", ref powerConsumption);
         ModuleResource moduleResource = new ModuleResource();
         moduleResource.name  = text;
         moduleResource.title = KSPUtil.PrintModuleName(text);
         moduleResource.id    = text.GetHashCode();
         moduleResource.rate  = (double)powerConsumption;
         base.resHandler.inputResources.Add(moduleResource);
     }
 }
 public override void OnLoad(ConfigNode node)
 {
     if (RequiredResources == null)
     {
         RequiredResources = new List <ModuleResource>();
     }
     foreach (ConfigNode cn in node.nodes)
     {
         if (!cn.name.Equals("RESOURCE"))
         {
             continue;
         }
         ModuleResource rs = new ModuleResource();
         rs.Load(cn);
         RequiredResources.Add(rs);
     }
 }
Example #19
0
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                if (part.Modules.Contains("FissionGenerator"))
                {
                    moduleGenerator  = part.Modules["FissionGenerator"];
                    _field_status    = moduleGenerator.Fields["Status"];
                    _field_generated = moduleGenerator.Fields["CurrentGeneration"];
                    _field_max       = moduleGenerator.Fields["PowerGeneration"];
                }

                if (moduleGenerator == null)
                {
                    return;
                }

                String[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
                this.resources_to_supply = resources_to_supply;
                base.OnStart(state);

                previousDeltaTime = TimeWarp.fixedDeltaTime;

                electricChargePartResource = part.Resources[ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE];
                if (electricChargePartResource != null)
                {
                    fixedElectricChargeBufferSize = electricChargePartResource.maxAmount * 50;
                }

                mockInputResource      = new ModuleResource();
                mockInputResource.name = ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE;
                mockInputResource.id   = mockInputResource.name.GetHashCode();
                resHandler.inputResources.Add(mockInputResource);
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI] - Exception in FNFissionGeneratorAdapter.OnStart " + e.Message);
                throw;
            }
        }
Example #20
0
        /// <inheritdoc/>
        public override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);

            if (resHandler.inputResources.Count == 0)
            {
                var moduleResource = new ModuleResource();
                moduleResource.name  = StockResourceNames.ElectricCharge;
                moduleResource.title = KSPUtil.PrintModuleName(StockResourceNames.ElectricCharge);
                moduleResource.id    = StockResourceNames.ElectricCharge.GetHashCode();
                moduleResource.rate  = (double)motorPowerDrain;
                resHandler.inputResources.Add(moduleResource);
            }

            sndMotor      = SpatialSounds.Create3dSound(part.gameObject, sndPathMotor, loop: true);
            sndMotorStart = SpatialSounds.Create3dSound(part.gameObject, sndPathMotorStart);
            sndMotorStop  = SpatialSounds.Create3dSound(part.gameObject, sndPathMotorStop);
        }
Example #21
0
 protected double ResourceRate()
 {
     if (part.Modules.Contains("ModuleCommand"))
     {
         ModuleCommand mC = (ModuleCommand)part.Modules["ModuleCommand"];
         foreach(ModuleResource r in mC.inputResources)
         {
             if(r.name.Equals("ElectricCharge"))
             {
                 commandChargeResource = r;
                 if (enabledkW < 0)
                     enabledkW = (float)r.rate;
                 return r.rate;
             }
         }
     }
     return -1;
 }
Example #22
0
        public IEnumerable <StudentResource> StudentsModules()
        {
            var students = _context
                           .Students
                           .Include(item => item.Modules);

            var studentResources = new List <StudentResource>();  //an empty list of student resources


            foreach (var student in students)
            {
                var resource = new StudentResource(); //foreach student in the db, we create a student resource object


                resource.Id        = student.Id;
                resource.FirstName = student.FirstName;
                resource.LastName  = student.LastName;

                /*
                 * Remember that A student can have 0...N modules.
                 * We need to iterate through all the modules that are associated with this each student
                 * Goal of action: Get Student Enrollments
                 *
                 * Each student already has a list of modules,
                 * so we do not need the studentId in modules entity
                 * this is why we make use of a resource
                 */
                foreach (var module in student.Modules)
                {
                    var moduleResource = new ModuleResource
                    {
                        Id   = module.Id,
                        Name = module.Name,
                        Code = module.Code
                    };
                    resource.ModuleResources.Add(moduleResource);
                }

                studentResources.Add(resource);
            }

            return(studentResources);
        }
Example #23
0
 protected double ResourceRate()
 {
     if (part.Modules.Contains("ModuleCommand"))
     {
         ModuleCommand mC = (ModuleCommand)part.Modules["ModuleCommand"];
         foreach (ModuleResource r in mC.inputResources)
         {
             if (r.name.Equals("ElectricCharge"))
             {
                 commandChargeResource = r;
                 if (enabledkW < 0)
                 {
                     enabledkW = (float)r.rate;
                 }
                 return(r.rate);
             }
         }
     }
     return(-1);
 }
Example #24
0
        /// <inheritdoc/>
        protected override void InitModuleSettings()
        {
            base.InitModuleSettings();
            Destroy(sndMotor);
            sndMotor = SpatialSounds.Create3dSound(part.gameObject, sndPathMotor, loop: true);
            Destroy(sndMotorStart);
            sndMotorStart = SpatialSounds.Create3dSound(part.gameObject, sndPathMotorStart);
            Destroy(sndMotorStop);
            sndMotorStop = SpatialSounds.Create3dSound(part.gameObject, sndPathMotorStop);

            var moduleResource = resHandler.inputResources
                                 .FirstOrDefault(x => x.name == StockResourceNames.ElectricCharge);

            if (moduleResource == null)
            {
                moduleResource      = new ModuleResource();
                moduleResource.name = StockResourceNames.ElectricCharge;
                moduleResource.id   = StockResourceNames.ElectricCharge.GetHashCode();
                resHandler.inputResources.Add(moduleResource);
            }
            moduleResource.title = KSPUtil.PrintModuleName(StockResourceNames.ElectricCharge);
            moduleResource.rate  = (double)motorPowerDrain;
        }
Example #25
0
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                //InitializePartModule();

                var modules = part.FindModulesImplementing <ModuleGenerator>();

                moduleGenerator = modules.Count > index ? modules[index] : null;

                if (moduleGenerator == null)
                {
                    return;
                }

                string[] resourcesToSupply = { ResourceSettings.Config.ElectricPowerInMegawatt };
                this.resourcesToSupply = resourcesToSupply;
                base.OnStart(state);

                if (maintainsBuffer)
                {
                    resourceBuffers = new ResourceBuffers();
                }

                outputType = ResourceType.other;
                inputType  = ResourceType.other;

                foreach (ModuleResource moduleResource in moduleGenerator.resHandler.inputResources)
                {
                    if (moduleResource.name == ResourceSettings.Config.ElectricPowerInMegawatt)
                    {
                        inputType = ResourceType.megajoule;
                    }
                    else if (moduleResource.name == ResourceSettings.Config.ElectricPowerInKilowatt)
                    {
                        inputType = ResourceType.electricCharge;
                    }

                    if (inputType != ResourceType.other)
                    {
                        moduleInputResource = moduleResource;

                        if (inputRate != 0)
                        {
                            moduleInputResource.rate = inputRate;
                        }

                        initialInputAmount = moduleInputResource.rate;

                        break;
                    }
                }

                if (offlineProcessing && moduleInputResource != null && last_active_time > 0 && powerGeneratorPowerInput > 0)
                {
                    var timePassedSinceLastProcessing = Planetarium.GetUniversalTime() - last_active_time;

                    var consumption = timePassedSinceLastProcessing * powerGeneratorPowerInput;

                    part.RequestResource(moduleInputResource.name, consumption);

                    var message = Localizer.Format("#LOC_KSPIE_FNGeneratorAdapter_msg", timePassedSinceLastProcessing, consumption, moduleInputResource.name);// <<1>> seconds passed durring which <<2>> <<3>> was consumed "

                    Debug.Log("[KSPI]: " + message);
                }

                foreach (ModuleResource moduleResource in moduleGenerator.resHandler.outputResources)
                {
                    // assuming only one of those two is present
                    if (moduleResource.name == ResourceSettings.Config.ElectricPowerInMegawatt)
                    {
                        outputType = ResourceType.megajoule;
                    }
                    else if (moduleResource.name == ResourceSettings.Config.ElectricPowerInKilowatt)
                    {
                        outputType = ResourceType.electricCharge;
                    }

                    if (outputType != ResourceType.other)
                    {
                        if (maintainsBuffer)
                        {
                            var bufferResource = part.Resources[moduleResource.name];
                            if (bufferResource != null)
                            {
                                if (initialMaxBufferSize == 0)
                                {
                                    initialMaxBufferSize = bufferResource.maxAmount;
                                }
                                else
                                {
                                    bufferResource.maxAmount = initialMaxBufferSize;
                                }
                            }

                            resourceBuffers.AddConfiguration(new ResourceBuffers.MaxAmountConfig(moduleResource.name, 50));
                        }

                        mockInputResource      = new ModuleResource();
                        mockInputResource.name = moduleResource.name;
                        mockInputResource.id   = moduleResource.name.GetHashCode();
                        moduleGenerator.resHandler.inputResources.Add(mockInputResource);

                        moduleOutputResource = moduleResource;

                        if (outputRate != 0)
                        {
                            moduleOutputResource.rate = outputRate;
                        }

                        initialOutputAmount = moduleOutputResource.rate;

                        moduleGeneratorEfficienctBaseField = moduleGenerator.Fields["efficiency"];
                        if (moduleGeneratorEfficienctBaseField != null)
                        {
                            moduleGeneratorEfficienctBaseField.guiActive       = false;
                            moduleGeneratorEfficienctBaseField.guiActiveEditor = false;
                        }

                        break;
                    }
                }

                if (maintainsBuffer)
                {
                    resourceBuffers.Init(part);
                }

                efficiencyField    = moduleGenerator.Fields["efficiency"];
                displayStatusField = moduleGenerator.Fields["displayStatus"];

                efficiencyField.guiActive    = showEfficiency;
                displayStatusField.guiActive = showDisplayStatus;

                powerGeneratorPowerInputField  = Fields["powerGeneratorPowerInput"];
                powerGeneratorPowerOutputField = Fields["powerGeneratorPowerOutput"];

                if (index > 0)
                {
                    powerGeneratorPowerInputField.guiName  = powerGeneratorPowerInputField.guiName + " " + (index + 1);
                    powerGeneratorPowerOutputField.guiName = powerGeneratorPowerOutputField.guiName + " " + (index + 1);
                }
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI]: Exception in FNGeneratorAdapter.OnStart " + e.ToString());
                throw;
            }
        }
        public override void OnStart(PartModule.StartState state)
        {
            if (state == StartState.Editor)
            {
                return;
            }

            megaJouleSolarPowerSupplyField = Fields["megaJouleSolarPowerSupply"];
            solarMaxSupplyField            = Fields["solarMaxSupply"];

            if (part.Modules.Contains("SolarPanelFixer"))
            {
                solarPanelFixer = part.Modules["SolarPanelFixer"];

                _field_kerbalism_nominalRate = solarPanelFixer.Fields["nominalRate"];
                _field_kerbalism_panelStatus = solarPanelFixer.Fields["panelStatus"];
            }

            // calculate Astronomical unit on homeworld semiMajorAxis when missing
            if (astronomicalUnit == 0)
            {
                astronomicalUnit = FlightGlobals.GetHomeBody().orbit.semiMajorAxis;
            }

            _microwavePowerReceiver = part.FindModuleImplementing <BeamedPowerReceiver>();

            _solarPanel = (ModuleDeployableSolarPanel)this.part.FindModuleImplementing <ModuleDeployableSolarPanel>();
            if (_solarPanel == null)
            {
                return;
            }

            if (this.part.FindModuleImplementing <ModuleJettison>() == null)
            {
                UnityEngine.Debug.Log("[KSPI]: FNSolarPanelWasteHeatModule Force Activated  " + part.name);
                part.force_activate();
            }

            String[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
            this.resources_to_supply = resources_to_supply;
            base.OnStart(state);

            outputResource = _solarPanel.resHandler.outputResources.FirstOrDefault();
            resourceName   = _solarPanel.resourceName;

            if (resourceName == ResourceManager.FNRESOURCE_MEGAJOULES)
            {
                _outputType = ResourceType.megajoule;
            }
            else if (resourceName == ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE)
            {
                _outputType = ResourceType.electricCharge;
            }
            else
            {
                _outputType = ResourceType.other;
            }

            // only manage power buffer when microwave receiver is not available
            if (_outputType != ResourceType.other && _microwavePowerReceiver == null)
            {
                _resourceBuffers = new ResourceBuffers();
                _resourceBuffers.AddConfiguration(new ResourceBuffers.TimeBasedConfig(ResourceManager.FNRESOURCE_MEGAJOULES));
                _resourceBuffers.AddConfiguration(new ResourceBuffers.TimeBasedConfig(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE));
                _resourceBuffers.UpdateVariable(ResourceManager.FNRESOURCE_MEGAJOULES, _outputType == ResourceType.electricCharge ? _solarPanel.chargeRate * 0.001f : _solarPanel.chargeRate);
                _resourceBuffers.UpdateVariable(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE, _outputType == ResourceType.electricCharge ? _solarPanel.chargeRate : _solarPanel.chargeRate * 1000);
                _resourceBuffers.Init(part);
            }

            _stars = KopernicusHelper.Stars;
        }
 private void SetGeneratorInfo()
 {
     moduleGenerator = selectedPart.GetModule<ModuleGenerator>();
     if (moduleGenerator != null)
     {
         if (moduleGenerator.resHandler.inputResources.Count > 0)
         {
             infoItems.Add(PartInfoItem.Create("Generator Input"));
             for (int i = 0; i < moduleGenerator.resHandler.inputResources.Count; ++i)
             {
                 generatorResource = moduleGenerator.resHandler.inputResources[i];
                 infoItems.Add(PartInfoItem.Create("\t" + generatorResource.name, generatorResource.rate.ToRate()));
             }
         }
         if (moduleGenerator.resHandler.outputResources.Count > 0)
         {
             infoItems.Add(PartInfoItem.Create("Generator Output"));
             for (int i = 0; i < moduleGenerator.resHandler.outputResources.Count; ++i)
             {
                 generatorResource = moduleGenerator.resHandler.outputResources[i];
                 infoItems.Add(PartInfoItem.Create("\t" + generatorResource.name, generatorResource.rate.ToRate()));
             }
         }
         if (moduleGenerator.isAlwaysActive)
         {
             infoItems.Add(PartInfoItem.Create("Generator is Always Active"));
         }
     }
 }
 private void SetReactionWheelInfo()
 {
     moduleReactionWheel = selectedPart.GetModule<ModuleReactionWheel>();
     if (moduleReactionWheel != null)
     {
         infoItems.Add(PartInfoItem.Create("Reaction Wheel Torque"));
         infoItems.Add(PartInfoItem.Create("\tPitch", moduleReactionWheel.PitchTorque.ToTorque()));
         infoItems.Add(PartInfoItem.Create("\tRoll", moduleReactionWheel.RollTorque.ToTorque()));
         infoItems.Add(PartInfoItem.Create("\tYaw", moduleReactionWheel.YawTorque.ToTorque()));
         for (int i = 0; i < moduleReactionWheel.resHandler.inputResources.Count; ++i)
         {
             moduleResource = moduleReactionWheel.resHandler.inputResources[i];
             infoItems.Add(PartInfoItem.Create("\t" + moduleResource.name, moduleResource.rate.ToRate()));
         }
     }
 }
Example #29
0
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                var beamedPowerReceiver = part.FindModuleImplementing <BeamedPowerReceiver>();
                if (beamedPowerReceiver != null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, found BeamedPowerReceiver");
                    return;
                }

                var generator = part.FindModuleImplementing <FNGenerator>();
                if (generator != null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, found FNGenerator");
                    return;
                }

                var modules = part.FindModulesImplementing <ModuleGenerator>();

                moduleGenerator = modules.Count > index ? modules[index] : null;

                if (moduleGenerator == null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, failed to find ModuleGenerator");
                    return;
                }

                string[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
                this.resources_to_supply = resources_to_supply;
                base.OnStart(state);

                if (maintainsBuffer)
                {
                    resourceBuffers = new ResourceBuffers();
                }

                outputType = ResourceType.other;
                foreach (ModuleResource moduleResource in moduleGenerator.resHandler.outputResources)
                {
                    if (moduleResource.name != ResourceManager.FNRESOURCE_MEGAJOULES && (moduleResource.name != ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE))
                    {
                        continue;
                    }

                    // assuming only one of those two is present
                    if (moduleResource.name == ResourceManager.FNRESOURCE_MEGAJOULES)
                    {
                        outputType = ResourceType.megajoule;
                    }
                    else
                    {
                        outputType = ResourceType.electricCharge;
                    }

                    if (maintainsBuffer)
                    {
                        resourceBuffers.AddConfiguration(new ResourceBuffers.MaxAmountConfig(moduleResource.name, 50));
                    }

                    mockInputResource      = new ModuleResource();
                    mockInputResource.name = moduleResource.name;
                    mockInputResource.id   = moduleResource.name.GetHashCode();
                    moduleGenerator.resHandler.inputResources.Add(mockInputResource);
                    moduleOutputResource = moduleResource;
                    break;
                }

                if (maintainsBuffer)
                {
                    resourceBuffers.Init(this.part);
                }

                efficiencyField    = moduleGenerator.Fields["efficiency"];
                displayStatusField = moduleGenerator.Fields["displayStatus"];

                efficiencyField.guiActive    = showEfficiency;
                displayStatusField.guiActive = showDisplayStatus;
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI]: Exception in FNGeneratorAdapter.OnStart " + e.Message);
                throw;
            }
        }
 private void SetAlternatorInfo()
 {
     moduleAlternator = selectedPart.GetModule<ModuleAlternator>();
     if (moduleAlternator != null)
     {
         infoItems.Add(PartInfoItem.Create("Alternator"));
         for (int i = 0; i < moduleAlternator.resHandler.outputResources.Count; ++i)
         {
             moduleResource = moduleAlternator.resHandler.outputResources[i];
             infoItems.Add(PartInfoItem.Create("\t" + moduleResource.name, moduleResource.rate.ToRate()));
         }
     }
 }
 public override void OnLoad(ConfigNode node)
 {
     if (RequiredResources == null) {
         RequiredResources = new List<ModuleResource>();
     }
     foreach (ConfigNode cn in node.nodes) {
         if(!cn.name.Equals("RESOURCE")) continue;
         ModuleResource rs = new ModuleResource();
         rs.Load(cn);
         RequiredResources.Add(rs);
     }
 }
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                var beamedPowerReceiver = part.FindModuleImplementing <BeamedPowerReceiver>();
                if (beamedPowerReceiver != null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, found BeamedPowerReceiver");
                    return;
                }

                var generator = part.FindModuleImplementing <FNGenerator>();
                if (generator != null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, found FNGenerator");
                    return;
                }

                var modules = part.FindModulesImplementing <ModuleGenerator>();

                _moduleGenerator = modules.Count > index ? modules[index] : null;

                if (_moduleGenerator == null)
                {
                    Debug.LogWarning("[KSPI]: disabling FNGeneratorAdapter, failed to find ModuleGenerator");
                    return;
                }

                string[] resourcesToSupply = { ResourceSettings.Config.ElectricPowerInMegawatt };
                this.resources_to_supply = resourcesToSupply;
                base.OnStart(state);

                if (maintainsBuffer)
                {
                    _resourceBuffers = new ResourceBuffers();
                }

                _outputType = ResourceType.other;
                foreach (ModuleResource moduleResource in _moduleGenerator.resHandler.outputResources)
                {
                    if (moduleResource.name != ResourceSettings.Config.ElectricPowerInMegawatt && (moduleResource.name != ResourceSettings.Config.ElectricPowerInKilowatt))
                    {
                        continue;
                    }

                    // assuming only one of those two is present
                    _outputType = moduleResource.name == ResourceSettings.Config.ElectricPowerInMegawatt ? ResourceType.megajoule : ResourceType.electricCharge;

                    if (maintainsBuffer)
                    {
                        _resourceBuffers.AddConfiguration(new ResourceBuffers.MaxAmountConfig(moduleResource.name, 50));
                    }

                    _mockInputResource = new ModuleResource
                    {
                        name = moduleResource.name,
                        id   = moduleResource.name.GetHashCode()
                    };

                    _moduleGenerator.resHandler.inputResources.Add(_mockInputResource);
                    _moduleOutputResource = moduleResource;
                    break;
                }

                if (maintainsBuffer)
                {
                    _resourceBuffers.Init(part);
                }

                _efficiencyField    = _moduleGenerator.Fields[nameof(ModuleGenerator.efficiency)];
                _displayStatusField = _moduleGenerator.Fields[nameof(ModuleGenerator.displayStatus)];

                _efficiencyField.guiActive    = showEfficiency;
                _displayStatusField.guiActive = showDisplayStatus;
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI]: Exception in FNGeneratorAdapter.OnStart " + e.ToString());
                throw;
            }
        }
        public override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);

            // Manually reload ignitions if not in editor
            if (!HighLogic.LoadedSceneIsEditor)
            {
                node.TryGetValue("ignited", ref ignited);
            }
            int pCount = propellants.Count;

            // thrust curve
            useThrustCurve = false;
            if (node.HasNode("thrustCurve") && node.HasValue("curveResource"))
            {
                if (node.GetValue("curveResource") != curveResource)
                {
                    Debug.LogError("*RFE* ERROR: curveResource doesn't match node's!");
                    curveResource = node.GetValue("curveResource");
                }
                if (thrustCurve == null)
                {
                    Debug.LogError("*RFE* ERROR: have curve node but thrustCurve is null!");
                    thrustCurve = new FloatCurve();
                    thrustCurve.Load(node.GetNode("thrustCurve"));
                }

                if (curveResource != string.Empty)
                {
                    for (int i = 0; i < pCount; ++i)
                    {
                        if (propellants[i].name.Equals(curveResource))
                        {
                            curveProp = i;
                            break;
                        }
                    }
                    if (curveProp != -1)
                    {
                        useThrustCurve = true;
                    }
                }

                Fields["thrustPercentage"].guiActive = Fields["thrustPercentage"].guiActiveEditor = (minFuelFlow != maxFuelFlow);
            }

            // Set from propellants
            bool instantThrottle = false;

            for (int i = 0; i < pCount; ++i)
            {
                if (RFSettings.Instance.instantThrottleProps.Contains(propellants[i].name))
                {
                    instantThrottle = true;
                }
                // any other stuff
            }

            // FIXME calculating throttle change rate
            if (!instantThrottle)
            {
                if (throttleResponseRate <= 0f)
                {
                    throttleResponseRate = (float)(RFSettings.Instance.throttlingRate / Math.Log(Math.Max(RFSettings.Instance.throttlingClamp, Math.Sqrt(part.mass * maxThrust * maxThrust))));
                }
            }
            else
            {
                throttleResponseRate = 1000000f;
            }

            minThrottle = minFuelFlow / maxFuelFlow;

            // set fields
            Fields["thrustCurveDisplay"].guiActive = useThrustCurve;
            CreateEngine();

            if (ullageSet == null)
            {
                ullageSet = new Ullage.UllageSet(this);
            }

            // Get thrust axis (only on create prefabs)
            if (part.partInfo == null || part.partInfo.partPrefab == null)
            {
                thrustAxis = Vector3.zero;
                foreach (Transform t in part.FindModelTransforms(thrustVectorTransformName))
                {
                    thrustAxis -= t.forward;
                }
                thrustAxis = thrustAxis.normalized;
            }
            ullageSet.SetThrustAxis(thrustAxis);

            // ullage
            if (node.HasNode("Ullage"))
            {
                ullageSet.Load(node.GetNode("Ullage"));
            }
            if (node.HasValue("pressureFed"))
            {
                bool.TryParse(node.GetValue("pressureFed"), out pressureFed);
                Debug.Log(this.name + ".pressureFed = " + this.pressureFed);
            }
            ullageSet.SetUllageEnabled(ullage);

            // load ignition resources
            if (node.HasNode("IGNITOR_RESOURCE"))
            {
                ignitionResources.Clear();
            }
            foreach (ConfigNode n in node.GetNodes("IGNITOR_RESOURCE"))
            {
                ModuleResource res = new ModuleResource();
                res.Load(n);
                ignitionResources.Add(res);
            }
        }
Example #34
0
        public override void OnLoad(ConfigNode node)
        {
            if (thrustCurve == null)
                thrustCurve = new FloatCurve();

            base.OnLoad(node);
            // Manually reload ignitions if not in editor
            if(!HighLogic.LoadedSceneIsEditor)
                node.TryGetValue("ignited", ref ignited);
            int pCount = propellants.Count;
            // thrust curve
            useThrustCurve = false;
            if (node.HasNode("thrustCurve") && node.HasValue("curveResource"))
            {
                if (node.GetValue("curveResource") != curveResource)
                {
                    Debug.Log("*RFE* ERROR: curveResource doesn't match node's!");
                    curveResource = node.GetValue("curveResource");
                }
                if (thrustCurve == null)
                {
                    Debug.Log("*RFE* ERROR: have curve node but thrustCurve is null!");
                    thrustCurve = new FloatCurve();
                    thrustCurve.Load(node.GetNode("thrustCurve"));
                }

                if (curveResource != "")
                {
                    for (int i = 0; i < pCount; ++i)
                    {
                        if (propellants[i].name.Equals(curveResource))
                        {
                            curveProp = i;
                            break;
                        }
                    }
                    if (curveProp != -1)
                    {
                        useThrustCurve = true;
                    }
                }
            }

            // Set from propellants
            bool instantThrottle = true;
            for (int i = 0; i < pCount; ++i)
            {
                if (RFSettings.Instance.instantThrottleProps.Contains(propellants[i].name))
                {
                    instantThrottle = false;
                }
                // any other stuff
            }

            // FIXME calculating throttle change rate
            if (!instantThrottle)
                throttleResponseRate = (float)(10d / Math.Sqrt(Math.Sqrt(part.mass * maxThrust)));
            else
                throttleResponseRate = 1000000f;

            // set fields
            Fields["thrustCurveDisplay"].guiActive = useThrustCurve;
            CreateEngine();

            if (ullageSet == null)
                ullageSet = new Ullage.UllageSet(this);

            // Get thrust axis (only on create prefabs)
            if (part.partInfo == null || part.partInfo.partPrefab == null)
            {
                thrustAxis = Vector3.zero;
                foreach(Transform t in part.FindModelTransforms(thrustVectorTransformName))
                {
                    thrustAxis -= t.forward;
                }
                thrustAxis = thrustAxis.normalized;
            }
            ullageSet.SetThrustAxis(thrustAxis);

            // ullage
            if (node.HasNode("Ullage"))
            {
                ullageSet.Load(node.GetNode("Ullage"));
            }
            ullageSet.SetUllageEnabled(ullage);

            // load ignition resources
            if (node.HasNode("IGNITOR_RESOURCE"))
                ignitionResources.Clear();
            foreach (ConfigNode n in node.GetNodes("IGNITOR_RESOURCE"))
            {
                ModuleResource res = new ModuleResource();
                res.Load(n);
                ignitionResources.Add(res);
            }
        }
Example #35
0
        public override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);
            if (node.HasValue("RTAntennaTarget"))
            {
                try
                {
                    Target = new Guid(node.GetValue("RTAntennaTarget"));
                }
                catch (FormatException)
                {
                    Target = Guid.Empty;
                }
            }
            // Have RTDishRadians as a fallback to avoid corrupting save games
            if (node.HasValue("RTDishRadians"))
            {
                double temp_double;
                RTDishCosAngle = Double.TryParse(node.GetValue("RTDishRadians"), out temp_double) ? temp_double : 1.0;
            }
            if (node.HasValue("DishAngle"))
            {
                RTDishCosAngle = Math.Cos(DishAngle / 2 * Math.PI / 180);
            }
            if (node.HasValue("DeployFxModules"))
            {
                mDeployFxModuleIndices = KSPUtil.ParseArray <Int32>(node.GetValue("DeployFxModules"), new ParserMethod <Int32>(Int32.Parse));
            }
            if (node.HasValue("ProgressFxModules"))
            {
                mProgressFxModuleIndices = KSPUtil.ParseArray <Int32>(node.GetValue("ProgressFxModules"), new ParserMethod <Int32>(Int32.Parse));
            }
            if (node.HasNode("TRANSMITTER"))
            {
                RTLog.Notify("ModuleRTAntenna: Found TRANSMITTER block.");
                mTransmitterConfig = node.GetNode("TRANSMITTER");
                mTransmitterConfig.AddValue("name", "ModuleRTDataTransmitter");

                // workarround for ksp 1.0
                if (mTransmitterConfig.HasValue("PacketInterval"))
                {
                    RTPacketInterval = float.Parse(mTransmitterConfig.GetValue("PacketInterval"));
                }

                if (mTransmitterConfig.HasValue("PacketSize"))
                {
                    RTPacketSize = float.Parse(mTransmitterConfig.GetValue("PacketSize"));
                }

                if (mTransmitterConfig.HasValue("PacketResourceCost"))
                {
                    RTPacketResourceCost = float.Parse(mTransmitterConfig.GetValue("PacketResourceCost"));
                }
            }
            if (this.resHandler.inputResources.Count == 0)
            {
                ModuleResource moduleResource = new ModuleResource();
                moduleResource.name  = this.resourceName;
                moduleResource.title = KSPUtil.PrintModuleName(this.resourceName);
                moduleResource.id    = this.resourceName.GetHashCode();
                moduleResource.rate  = EnergyCost * ConsumptionMultiplier;
                this.resHandler.inputResources.Add(moduleResource);
            }

            //apply the consumption multiplier
            this.resHandler.inputResources.Find(x => x.name == this.resourceName).rate = EnergyCost * ConsumptionMultiplier;
        }
 private State UpdateControlState()
 {
     if (!RTCore.Instance) {
         IsRTPowered = true;
         return State.Operational;
     }
     if (IsRTBroken) {
         IsRTPowered = false;
         return State.Malfunction;
     }
     if (!IsRTActive) {
         IsRTPowered = false;
         return State.Off;
     }
     ModuleResource request = new ModuleResource();
     float resourceRequest = Consumption * TimeWarp.fixedDeltaTime;
     float resourceAmount = part.RequestResource("ElectricCharge", resourceRequest);
     if (resourceAmount < resourceRequest * 0.9) {
         IsRTPowered = false;
         return State.NoResources;
     }
     IsRTPowered = true;
     return State.Operational;
 }
Example #37
0
        public AntennaInfoRT(Vessel v, bool powered, bool storm)
        {
            RemoteTech.SetPoweredDown(v.id, !powered);
            RemoteTech.SetCommsBlackout(v.id, storm);

            // if vessel is loaded, don't calculate ec, RT already handle it.
            if (v.loaded)
            {
                // find transmitters
                foreach (Part p in v.parts)
                {
                    foreach (PartModule m in p.Modules)
                    {
                        // calculate internal (passive) transmitter ec usage @ 0.5W each
                        if (m.moduleName == "ModuleRTAntennaPassive")
                        {
                            ec += 0.0005;
                        }
                        // calculate external transmitters
                        else if (m.moduleName == "ModuleRTAntenna")
                        {
                            // only include data rate and ec cost if transmitter is active
                            if (Lib.ReflectionValue <bool>(m, "IsRTActive"))
                            {
                                rate += (Lib.ReflectionValue <float>(m, "RTPacketSize") / Lib.ReflectionValue <float>(m, "RTPacketInterval"));
                            }
                        }
                    }
                }
            }
            // if vessel is not loaded
            else
            {
                // find proto transmitters
                foreach (ProtoPartSnapshot p in v.protoVessel.protoPartSnapshots)
                {
                    // get part prefab (required for module properties)
                    Part part_prefab = PartLoader.getPartInfoByName(p.partName).partPrefab;
                    foreach (ProtoPartModuleSnapshot m in p.modules)
                    {
                        // calculate internal (passive) transmitter ec usage @ 0.5W each
                        if (m.moduleName == "ModuleRTAntennaPassive")
                        {
                            ec += 0.0005;
                        }
                        // calculate external transmitters
                        else if (m.moduleName == "ModuleRTAntenna")
                        {
                            // only include data rate and ec cost if transmitter is active
                            if (Lib.Proto.GetBool(m, "IsRTActive"))
                            {
                                bool mFound = false;
                                // get all modules in prefab
                                foreach (PartModule pm in part_prefab.Modules)
                                {
                                    if (pm.moduleName == m.moduleName)
                                    {
                                        mFound = true;
                                        ModuleResource mResource       = pm.resHandler.inputResources.Find(r => r.name == "ElectricCharge");
                                        float?         packet_size     = Lib.SafeReflectionValue <float>(pm, "RTPacketSize");
                                        float?         packet_Interval = Lib.SafeReflectionValue <float>(pm, "RTPacketInterval");

                                        // workaround for old savegames
                                        if (mResource == null || packet_size == null || packet_Interval == null)
                                        {
                                            Lib.LogDebugStack("Old SaveGame PartModule ModuleRTAntenna for part '{0}' on unloaded vessel '{1}', using default values as a workaround", Lib.LogLevel.Message, p.partName, v.vesselName);
                                            Lib.LogDebugStack("ElectricCharge isNull: '{0}', RTPacketSize isNull: '{1}', RTPacketInterval isNull: '{2}'", Lib.LogLevel.Message, mResource == null, packet_size == null, packet_Interval == null);
                                            rate += 6.6666;                                                      // 6.67 Mb/s in 100% factor
                                            ec   += 0.025;                                                       // 25 W/s
                                        }
                                        else
                                        {
                                            rate += (float)packet_size / (float)packet_Interval;
                                            ec   += mResource.rate;
                                        }
                                    }
                                }
                                if (!mFound)
                                {
                                    Lib.LogDebugStack("Could not find PartModule ModuleRTAntenna for part {0} on unloaded vessel {1}, using default values as a workaround", Lib.LogLevel.Message, p.partName, v.vesselName);
                                    rate += 6.6666;                                              // 6.67 Mb/s in 100% factor
                                    ec   += 0.025;                                               // 25 W/s
                                }
                            }
                        }
                    }
                }
            }

            Init(v, powered, storm);
        }
Example #38
0
        public override void OnStart(StartState state)
        {
            try
            {
                if (state == StartState.Editor)
                {
                    return;
                }

                moduleGenerator = part.FindModuleImplementing <ModuleGenerator>();

                if (moduleGenerator == null)
                {
                    return;
                }

                String[] resources_to_supply = { ResourceManager.FNRESOURCE_MEGAJOULES };
                this.resources_to_supply = resources_to_supply;
                base.OnStart(state);

                previousDeltaTime = TimeWarp.fixedDeltaTime;

                megajoulePartResource = part.Resources[ResourceManager.FNRESOURCE_MEGAJOULES];
                if (megajoulePartResource != null)
                {
                    fixedMegajouleBufferSize = megajoulePartResource.maxAmount * 50;
                }

                electricChargePartResource = part.Resources[ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE];
                if (electricChargePartResource != null)
                {
                    fixedElectricChargeBufferSize = electricChargePartResource.maxAmount * 50;
                }

                outputType = resourceType.other;
                foreach (ModuleResource moduleResource in moduleGenerator.resHandler.outputResources)
                {
                    // assuming only one of those two is present
                    if (moduleResource.name == ResourceManager.FNRESOURCE_MEGAJOULES)
                    {
                        outputType = resourceType.megajoule;

                        mockInputResource      = new ModuleResource();
                        mockInputResource.name = moduleResource.name;
                        mockInputResource.id   = moduleResource.name.GetHashCode();
                        moduleGenerator.resHandler.inputResources.Add(mockInputResource);
                        moduleOutputResource = moduleResource;
                        break;
                    }
                    if (moduleResource.name == ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE)
                    {
                        outputType = resourceType.electricCharge;

                        mockInputResource      = new ModuleResource();
                        mockInputResource.name = moduleResource.name;
                        mockInputResource.id   = moduleResource.name.GetHashCode();
                        moduleGenerator.resHandler.inputResources.Add(mockInputResource);
                        moduleOutputResource = moduleResource;
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogError("[KSPI] - Exception in FNGeneratorAdapter.OnStart " + e.Message);
                throw;
            }
        }
Example #39
0
        private State UpdateControlState()
        {
            if (RTCore.Instance == null) return State.Operational;

            if (IsRTBroken) return State.Malfunction;

            if (!IsRTActive) return State.Off;

            ModuleResource request = new ModuleResource();
            float resourceRequest = Consumption * (TimeWarp.fixedDeltaTime / TimeWarp.CurrentRate);
            float resourceAmount = part.RequestResource("ElectricCharge", resourceRequest);
            if (resourceAmount < resourceRequest * 0.9) return State.NoResources;

            return State.Operational;
        }