public override void OnStart(PartModule.StartState state) { if (state == StartState.Editor) { if (this.HasTechsRequiredToUpgrade()) { isupgraded = true; upgradePartModule(); } return; } if (isupgraded) { upgradePartModule(); } else { if (this.HasTechsRequiredToUpgrade()) { hasrequiredupgrade = true; } } // update gui names Events["BeginResearch"].guiName = beginResearchName; reprocessor = new NuclearFuelReprocessor(); reprocessor.Initialize(part); antimatterGenerator = new AntimatterGenerator(part, 1, PartResourceLibrary.Instance.GetDefinition(InterstellarResourcesConfiguration.Instance.Antimatter)); 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);global_rate_multipliers //anim2.Blend (animName2, 0, 0); play_down = false; } //anim.Play (); //anim2.Play (); } if (IsEnabled && last_active_time != 0) { double 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 { var time_diff = Planetarium.GetUniversalTime() - last_active_time; var altitude_multiplier = Math.Max((vessel.altitude / (vessel.mainBody.Radius)), 1); var kerbalResearchSkillFactor = part.protoModuleCrew.Sum(proto_crew_member => GetKerbalScienceFactor(proto_crew_member) / 2f); double science_to_increment = kerbalResearchSkillFactor * GameConstants.baseScienceRate * time_diff / PluginHelper.SecondsInDay * electrical_power_ratio * global_rate_multipliers * PluginHelper.getScienceMultiplier(vessel) / (Math.Sqrt(altitude_multiplier)); science_to_increment = (double.IsNaN(science_to_increment) || double.IsInfinity(science_to_increment)) ? 0 : science_to_increment; science_to_add += science_to_increment; } else if (active_mode == 2) // Antimatter persistence { var deltaTime = Planetarium.GetUniversalTime() - last_active_time; var electrical_power_provided_in_Megajoules = electrical_power_ratio * global_rate_multipliers * powerReqMult * PluginHelper.BaseAMFPowerConsumption * deltaTime; antimatterGenerator.Produce(electrical_power_provided_in_Megajoules); } } }
public override void OnStart(StartState state) { moduleScienceLab = part.FindModuleImplementing <ModuleScienceLab>(); moduleScienceConverter = part.FindModuleImplementing <ModuleScienceConverter>(); if (moduleScienceConverter != null && moduleScienceLab != null) { DetermineTechLevel(); var scienceCap = GetScienceCap(); moduleScienceLab.dataStorage = scienceCap; moduleScienceConverter.scienceCap = scienceCap; var deminishingScienceModifier = moduleScienceLab.dataStored >= baseDataStorage ? 1 : moduleScienceLab.dataStored / baseDataStorage; dataProcessingMultiplier = moduleScienceLab.dataStored < float.Epsilon ? 0.5f : deminishingScienceModifier * (baseDataStorage / moduleScienceLab.dataStorage) * (moduleScienceLab.dataStorage / moduleScienceLab.dataStored) * 0.5f; moduleScienceConverter.dataProcessingMultiplier = dataProcessingMultiplier; } if (state == StartState.Editor) { if (this.HasTechsRequiredToUpgrade()) { isupgraded = true; upgradePartModule(); } return; } if (isupgraded) { upgradePartModule(); } else { if (this.HasTechsRequiredToUpgrade()) { hasrequiredupgrade = true; } } // update gui names /* * Events["BeginResearch"].guiName = beginResearchName; */ reprocessor = new NuclearFuelReprocessor(); reprocessor.Initialize(part, null); antimatterGenerator = new AntimatterGenerator(part, 1, PartResourceLibrary.Instance.GetDefinition(ResourceSettings.Config.AntiProtium)); Debug.Log("[KSPI]: ScienceModule on " + part.name + " was Force Activated"); part.force_activate(); anim = part.FindModelAnimators(animName1).FirstOrDefault(); anim2 = part.FindModelAnimators(animName2).FirstOrDefault(); if (anim != null && anim2 != null) { 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);global_rate_multipliers //anim2.Blend (animName2, 0, 0); play_down = false; } //anim.Play (); //anim2.Play (); } if (IsEnabled && last_active_time != 0) { double globalRateMultipliers = 1; crew_capacity_ratio = part.protoModuleCrew.Count / (float)part.CrewCapacity; globalRateMultipliers = globalRateMultipliers * crew_capacity_ratio; /* * if (active_mode == 0) // Science persistence * { * var time_diff = Planetarium.GetUniversalTime() - last_active_time; * var altitude_multiplier = Math.Max((vessel.altitude / (vessel.mainBody.Radius)), 1); * var kerbalResearchSkillFactor = part.protoModuleCrew.Sum(proto_crew_member => GetKerbalScienceFactor(proto_crew_member) / 2f); * * double science_to_increment = kerbalResearchSkillFactor * GameConstants.baseScienceRate * time_diff * / PluginHelper.SecondsInDay * electrical_power_ratio * global_rate_multipliers * PluginHelper.getScienceMultiplier(vessel) * / (Math.Sqrt(altitude_multiplier)); * * science_to_increment = (double.IsNaN(science_to_increment) || double.IsInfinity(science_to_increment)) ? 0 : science_to_increment; * science_to_add += science_to_increment; * * } * else */ if (active_mode == 2) // Antimatter persistence { var deltaTime = Planetarium.GetUniversalTime() - last_active_time; var electricalPowerProvidedInMegajoules = electrical_power_ratio * globalRateMultipliers * powerReqMult * PluginSettings.Config.BaseAMFPowerConsumption * deltaTime; antimatterGenerator.Produce(electricalPowerProvidedInMegajoules); } } }