public override void OnStart(StartState state) { base.OnStart(state); if (!HighLogic.LoadedSceneIsFlight) { return; } // Get the part modules moduleAsteroid = part.vessel.FindPartModuleImplementing <ModuleAsteroid>(); moduleComet = part.vessel.FindPartModuleImplementing <ModuleComet>(); if (moduleAsteroid != null) { spaceObjectInfo = moduleAsteroid.part.FindModuleImplementing <ModuleSpaceObjectInfo>(); } else if (moduleComet != null) { spaceObjectInfo = moduleComet.part.FindModuleImplementing <ModuleSpaceObjectInfo>(); } if (spaceObjectInfo != null && originalMass < 0) { originalMass = spaceObjectInfo.currentMassVal; previousMass = originalMass; } // Setup storage capacity if (currentStorageCapacity > 0) { adjustedVolume = currentStorageCapacity; } else { currentStorageCapacity = adjustedVolume; previousMass = spaceObjectInfo.currentMassVal; } getAbundances(); // If we have no resources in the part and we have storage capacity then show the initial resources button. Events["SetObjectResources"].guiActive = part.Resources.Count == 0 || debugMode; GameEvents.OnResourceConverterOutput.Add(OnResourceConverterOutput); if (part.Resources.Count > 0) { ResourceScenario.Instance.gameSettings.MaxDeltaTime = 3600; } }
private static bool MineAsteroidComet(IResourceManager resMan, ModuleSpaceObjectInfo spaceObjectInfo, List <ModuleSpaceObjectResource> asteroidCometResources, double drillSize, double effectiveness, double percentPower) { // TODO - can we add a bonus multiplier here? Perhaps based on asteroid mass? double bonusMultiplier = 0.05; // 0.0005 double minedAmount = bonusMultiplier * drillSize * effectiveness * percentPower; minedAmount = Math.Min(minedAmount, (spaceObjectInfo.currentMassVal - spaceObjectInfo.massThresholdVal)); if (minedAmount < 1e-6) { spaceObjectInfo.currentMassVal = spaceObjectInfo.massThresholdVal; return(false); } foreach (var resource in asteroidCometResources) { var def = PartResourceLibrary.Instance.GetDefinition(resource.resourceName); if (def == null) { continue; } var amount = (minedAmount * resource.abundance) * def.density; if (amount == 0) { continue; } var resId = KITResourceSettings.NameToResource(resource.resourceName); resMan.Produce(resId, amount); } spaceObjectInfo.currentMassVal = Math.Max(spaceObjectInfo.massThresholdVal, spaceObjectInfo.currentMassVal - (minedAmount * resMan.FixedDeltaTime())); return(true); }