示例#1
0
        // 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;
         }
     }
 }
示例#3
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];
            }
        }