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(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);global_rate_multipliers //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 time_diff = Planetarium.GetUniversalTime() - last_active_time; float altitude_multiplier = Math.Max((float)(vessel.altitude / (vessel.mainBody.Radius)), 1); float kerbalResearchSkillFactor = part.protoModuleCrew.Sum(proto_crew_member => GetKerbalScienceFactor(proto_crew_member) / 2f); double science_to_increment = kerbalResearchSkillFactor * GameConstants.baseScienceRate * time_diff / GameConstants.EARH_DAY_SECONDS * electrical_power_ratio * global_rate_multipliers * PluginHelper.getScienceMultiplier(vessel) //PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex, vessel.LandedOrSplashed) / ((float)Math.Sqrt(altitude_multiplier)); science_to_increment = (double.IsNaN(science_to_increment) || double.IsInfinity(science_to_increment)) ? 0 : science_to_increment; science_to_add += (float)science_to_increment; } else if (active_mode == 2) // Antimatter persistence { double time_diff = Planetarium.GetUniversalTime() - last_active_time; List<PartResource> antimatter_resources = part.GetConnectedResources(InterstellarResourcesConfiguration.Instance.Antimatter).ToList(); float currentAntimatter_missing = (float) antimatter_resources.Sum(ar => ar.maxAmount-ar.amount); float total_electrical_power_provided = (float)(electrical_power_ratio * (PluginHelper.BaseAMFPowerConsumption + PluginHelper.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); } } }
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); antimatterGenerator = new AntimatterGenerator(part, 1, PartResourceLibrary.Instance.GetDefinition(KITResourceSettings.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 (); } }