// Changes envelope buoyancy targets public void updateTargetSpecificVolumeFraction(float fraction, HLEnvelopePartModule envelope) { // Difference between specific volume and target specific volume float delta = fraction - envelope.specificVolumeFractionEnvelope; // Clamp the change to compress and expand rates delta = Mathf.Clamp(delta, -compressRate, expandRate); envelope.specificVolumeFractionEnvelope += delta * Time.deltaTime; }
private void OnShipModified(ShipConstruct sc) { if (HLBuildAidWindow.Instance != null && sc.Parts != null) { if (sc.Parts.Count > 0) { float treeVolume = 0; TotalMass = HLEnvelopePartModule.FindTotalMass(sc.Parts[0], out treeVolume); HLBuildAidWindow.Instance.TotalEnvelopeVolume = treeVolume; } else { TotalMass = 0; TotalEnvelopeVolume = 0; } } }
// Gathers information on the envelopes public void findEnvelopes() { Envelopes.Clear(); totalBuoyancy = 0; totalBuoyancyMax = 0; // More info: http://www.grc.nasa.gov/WWW/k-12/WindTunnel/Activities/balance_of_forces.html foreach (Part part in this.vessel.parts) { if (part.isAttached) { // Skip if not an envelope if (part.Modules.OfType <HLEnvelopePartModule>().FirstOrDefault() == null) { // Debug.Log("Did not find an envelope on " + part.name); continue; } envelope = part.Modules.OfType <HLEnvelopePartModule>().FirstOrDefault(); // Envelopes have to be active to work. if (part.State != PartStates.ACTIVE) { part.force_activate(); } Envelopes.Add(envelope); totalBuoyancy += envelope.buoyantForce.magnitude; totalBuoyancyMax += envelope.maxBuoyancy.magnitude; } // If this is the lead envelope... if (leadEnvelope == envelope.part) { // Debug.Log("Adding GUI!"); envelope.isLeadEnvelope = true; } // If not, then check to see if this envelope should be promoted to lead envelope else if (!vessel.parts.Contains(leadEnvelope)) { leadEnvelope = envelope.part; } else { envelope.isLeadEnvelope = false; } } if (HLEnvelopeControlWindow.Instance) { HLEnvelopeControlWindow.Instance.Envelopes = Envelopes; if (FlightGlobals.ActiveVessel != HLEnvelopeControlWindow.Instance.CurrentVessel) { InitControlUIValues(); } SyncControlUIValues(); } if (torques == null || torques.Length != Envelopes.Count) { torques = new Vector3[Envelopes.Count]; torqueArms = new Vector3[Envelopes.Count]; percent = new float[Envelopes.Count]; } }