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