public override void OnFixedUpdate() { if (!isupgraded) { float power_returned = consumeFNResource(megajouleRate * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); } else { if (ResearchAndDevelopment.Instance != null) { if (!double.IsNaN(science_awaiting_addition) && !double.IsInfinity(science_awaiting_addition) && science_awaiting_addition > 0) { ResearchAndDevelopment.Instance.Science = ResearchAndDevelopment.Instance.Science + (float)science_awaiting_addition; ScreenMessages.PostScreenMessage(science_awaiting_addition.ToString("0") + " science has been added to the R&D centre.", 2.5f, ScreenMessageStyle.UPPER_CENTER); science_awaiting_addition = 0; } } float power_returned = consumeFNResource(upgradedMegajouleRate * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES) / TimeWarp.fixedDeltaTime; electrical_power_ratio = power_returned / upgradedMegajouleRate; float altitude_multiplier = (float)(vessel.altitude / (vessel.mainBody.Radius)); altitude_multiplier = Math.Max(altitude_multiplier, 1); science_rate_f = baseScienceRate * PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed) / 86400 * power_returned / upgradedMegajouleRate / ((float)Math.Sqrt(altitude_multiplier)); //part.RequestResource("Science", -science_rate_f * TimeWarp.fixedDeltaTime); if (ResearchAndDevelopment.Instance != null) { ResearchAndDevelopment.Instance.Science = ResearchAndDevelopment.Instance.Science + science_rate_f * TimeWarp.fixedDeltaTime; } } last_active_time = (float)Planetarium.GetUniversalTime(); }
public override void OnStart(PartModule.StartState state) { if (state == StartState.Editor) { return; } bool manual_upgrade = false; if (HighLogic.CurrentGame.Mode == Game.Modes.CAREER | HighLogic.CurrentGame.Mode == Game.Modes.SCIENCE_SANDBOX) { if (upgradeTechReq != null) { if (PluginHelper.hasTech(upgradeTechReq)) { hasrequiredupgrade = true; } else if (upgradeTechReq == "none") { manual_upgrade = true; } } else { manual_upgrade = true; } } else { hasrequiredupgrade = true; } if (coreInit == false) { coreInit = true; if (hasrequiredupgrade) { isupgraded = true; } } if (manual_upgrade) { hasrequiredupgrade = true; } if (isupgraded) { computercoreType = upgradedName; if (nameStr == "") { ConfigNode[] namelist = ComputerCore.getNames(); Random rands = new Random(); ConfigNode myName = namelist[rands.Next(0, namelist.Length)]; nameStr = myName.GetValue("name"); } double now = Planetarium.GetUniversalTime(); double time_diff = now - last_active_time; float altitude_multiplier = (float)(vessel.altitude / (vessel.mainBody.Radius)); altitude_multiplier = Math.Max(altitude_multiplier, 1); double science_to_add = baseScienceRate * time_diff / 86400 * electrical_power_ratio * PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed) / ((float)Math.Sqrt(altitude_multiplier)); science_awaiting_addition = science_to_add; var curReaction = this.part.Modules["ModuleReactionWheel"] as ModuleReactionWheel; curReaction.PitchTorque = 5; curReaction.RollTorque = 5; curReaction.YawTorque = 5; } else { computercoreType = originalName; } this.part.force_activate(); }
public override void OnFixedUpdate() { float global_rate_multipliers = 1; crew_capacity_ratio = ((float)part.protoModuleCrew.Count) / ((float)part.CrewCapacity); global_rate_multipliers = global_rate_multipliers * crew_capacity_ratio; if (ResearchAndDevelopment.Instance != null) { if (!double.IsNaN(science_awaiting_addition) && !double.IsInfinity(science_awaiting_addition) && science_awaiting_addition > 0) { ResearchAndDevelopment.Instance.Science = ResearchAndDevelopment.Instance.Science + (float)science_awaiting_addition; ScreenMessages.PostScreenMessage(science_awaiting_addition.ToString("0") + " science has been added to the R&D centre.", 2.5f, ScreenMessageStyle.UPPER_CENTER); science_awaiting_addition = 0; } } if (IsEnabled) { if (active_mode == 0) { // Research double electrical_power_provided = consumeFNResource(GameConstants.basePowerConsumption * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); electrical_power_ratio = (float)(electrical_power_provided / TimeWarp.fixedDeltaTime / GameConstants.basePowerConsumption); global_rate_multipliers = global_rate_multipliers * electrical_power_ratio; float stupidity = 0; foreach (ProtoCrewMember proto_crew_member in part.protoModuleCrew) { stupidity += proto_crew_member.stupidity; } stupidity = 1.5f - stupidity / 2.0f; float altitude_multiplier = (float)(vessel.altitude / (vessel.mainBody.Radius)); altitude_multiplier = Math.Max(altitude_multiplier, 1); science_rate_f = (float)(GameConstants.baseScienceRate * PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed) / 86400.0f * global_rate_multipliers * stupidity / (Mathf.Sqrt(altitude_multiplier))); if (ResearchAndDevelopment.Instance != null) { if (!double.IsNaN(science_rate_f) && !double.IsInfinity(science_rate_f)) { ResearchAndDevelopment.Instance.Science = ResearchAndDevelopment.Instance.Science + science_rate_f * TimeWarp.fixedDeltaTime; } } } else if (active_mode == 1) { // Fuel Reprocessing double electrical_power_provided = consumeFNResource(GameConstants.basePowerConsumption * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); electrical_power_ratio = (float)(electrical_power_provided / TimeWarp.fixedDeltaTime / GameConstants.basePowerConsumption); global_rate_multipliers = global_rate_multipliers * electrical_power_ratio; reprocessor.performReprocessingFrame(global_rate_multipliers); if (reprocessor.getActinidesRemovedPerHour() > 0) { reprocessing_rate_f = (float)(reprocessor.getRemainingAmountToReprocess() / reprocessor.getActinidesRemovedPerHour()); } else { IsEnabled = false; } } else if (active_mode == 2) { //Antimatter double electrical_power_provided = consumeFNResource(GameConstants.baseAMFPowerConsumption * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); electrical_power_ratio = (float)(electrical_power_provided / TimeWarp.fixedDeltaTime / GameConstants.baseAMFPowerConsumption); global_rate_multipliers = crew_capacity_ratio * electrical_power_ratio; anti_factory.produceAntimatterFrame(global_rate_multipliers); antimatter_rate_f = (float)anti_factory.getAntimatterProductionRate(); } else if (active_mode == 3) { IsEnabled = false; } else if (active_mode == 4) { // Centrifuge if (vessel.Splashed) { float electrical_power_provided = consumeFNResource(GameConstants.baseCentriPowerConsumption * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); electrical_power_ratio = (float)(electrical_power_provided / TimeWarp.fixedDeltaTime / GameConstants.baseCentriPowerConsumption); global_rate_multipliers = global_rate_multipliers * electrical_power_ratio; float deut_produced = (float)(global_rate_multipliers * GameConstants.deuterium_timescale * GameConstants.deuterium_abudance * 1000.0f); deut_rate_f = -ORSHelper.fixedRequestResource(part, "Deuterium", -deut_produced * TimeWarp.fixedDeltaTime) / TimeWarp.fixedDeltaTime; } else { ScreenMessages.PostScreenMessage("You must be splashed down to perform this activity.", 5.0f, ScreenMessageStyle.UPPER_CENTER); IsEnabled = false; } } if (electrical_power_ratio <= 0) { deut_rate_f = 0; electrolysis_rate_f = 0; science_rate_f = 0; antimatter_rate_f = 0; reprocessing_rate_f = 0; } last_active_time = (float)Planetarium.GetUniversalTime(); } else { } }
public override void OnStart(PartModule.StartState state) { if (state == StartState.Editor) { return; } reprocessor = new FuelReprocessor(part); anti_factory = new AntimatterFactory(part); ConfigNode config = PluginHelper.getPluginSaveFile(); part.force_activate(); anim = part.FindModelAnimators(animName1).FirstOrDefault(); anim2 = part.FindModelAnimators(animName2).FirstOrDefault(); if (anim != null && anim2 != null) { anim[animName1].layer = 1; anim2[animName2].layer = 1; if (IsEnabled) { //anim [animName1].normalizedTime = 1f; //anim2 [animName2].normalizedTime = 1f; //anim [animName1].speed = -1f; //anim2 [animName2].speed = -1f; anim.Blend(animName1, 1, 0); anim2.Blend(animName2, 1, 0); } else { //anim [animName1].normalizedTime = 0f; //anim2 [animName2].normalizedTime = 0f; //anim [animName1].speed = 1f; //anim2 [animName2].speed = 1f; //anim.Blend (animName1, 0, 0); //anim2.Blend (animName2, 0, 0); play_down = false; } //anim.Play (); //anim2.Play (); } if (IsEnabled && last_active_time != 0) { float global_rate_multipliers = 1; crew_capacity_ratio = ((float)part.protoModuleCrew.Count) / ((float)part.CrewCapacity); global_rate_multipliers = global_rate_multipliers * crew_capacity_ratio; if (active_mode == 0) { // Science persistence double now = Planetarium.GetUniversalTime(); double time_diff = now - last_active_time; float altitude_multiplier = (float)(vessel.altitude / (vessel.mainBody.Radius)); altitude_multiplier = Math.Max(altitude_multiplier, 1); float stupidity = 0; foreach (ProtoCrewMember proto_crew_member in part.protoModuleCrew) { stupidity += proto_crew_member.stupidity; } stupidity = 1.5f - stupidity / 2.0f; double science_to_add = GameConstants.baseScienceRate * time_diff / 86400 * electrical_power_ratio * stupidity * global_rate_multipliers * PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed) / ((float)Math.Sqrt(altitude_multiplier)); //Debug.Log(science_to_add); //Debug.Log(GameConstants.baseScienceRate); //Debug.Log(time_diff); //Debug.Log(electrical_power_ratio); //Debug.Log(stupidity); //Debug.Log(global_rate_multipliers); //Debug.Log(PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed)); //Debug.Log(altitude_multiplier); //part.RequestResource ("Science", -science_to_add); science_awaiting_addition = science_to_add; } else if (active_mode == 2) { // Antimatter persistence double now = Planetarium.GetUniversalTime(); double time_diff = now - last_active_time; List <PartResource> partresources = new List <PartResource>(); part.GetConnectedResources(PartResourceLibrary.Instance.GetDefinition("Antimatter").id, PartResourceLibrary.Instance.GetDefinition("Antimatter").resourceFlowMode, partresources); float currentAntimatter_missing = 0; foreach (PartResource partresource in partresources) { currentAntimatter_missing += (float)(partresource.maxAmount - partresource.amount); } float total_electrical_power_provided = (float)(electrical_power_ratio * (GameConstants.baseAMFPowerConsumption + GameConstants.basePowerConsumption) * 1E6); double antimatter_mass = total_electrical_power_provided / GameConstants.warpspeed / GameConstants.warpspeed * 1E6 / 20000.0; float antimatter_peristence_to_add = (float)-Math.Min(currentAntimatter_missing, antimatter_mass * time_diff); part.RequestResource("Antimatter", antimatter_peristence_to_add); } } }