Пример #1
0
        /// <summary>
        /// calculate current heading from plane normal vector
        /// </summary>
        public static double CalculateTargetHeading(Vector3 direction, AsstVesselModule avm)
        {
            var    fwd     = Vector3.Cross(direction, avm.vesselData.planetUp);
            double heading = Vector3.Angle(fwd, avm.Vessel.north) * Math.Sign(Vector3.Dot(fwd, avm.Vessel.east));

            return(heading.HeadingClamp(360));
        }
Пример #2
0
        /// <summary>
        /// calculate current heading from plane rotation
        /// </summary>
        public static double calculateTargetHeading(Quaternion rotation, AsstVesselModule avm)
        {
            Vector3 fwd     = Vector3.Cross(getPlaneNormal(rotation, avm), avm.vesselData.planetUp);
            double  heading = Vector3.Angle(fwd, avm.vesselData.planetNorth) * Math.Sign(Vector3.Dot(fwd, avm.vesselData.planetEast));

            return(heading.headingClamp(360));
        }
Пример #3
0
 public void removeVessel(AsstVesselModule avm)
 {
     if (avm.vesselRef != controlledVessels[selectedVesselIndex].vesselRef)
     {
         Vessel ves = controlledVessels[selectedVesselIndex].vesselRef;
         controlledVessels.Remove(avm);
         selectedVesselIndex = controlledVessels.FindIndex(vm => vm.vesselRef == ves);
     }
     else
     {
         controlledVessels.RemoveAt(selectedVesselIndex);
         selectedVesselIndex = 0;
     }
 }
Пример #4
0
        public static double SpeedTransform(SpeedRef refMode, AsstVesselModule avm)
        {
            switch (refMode)
            {
            case SpeedRef.Indicated:
                double stagnationPres = Math.Pow(((avm.vesselRef.mainBody.atmosphereAdiabaticIndex - 1) * avm.vesselRef.mach * avm.vesselRef.mach * 0.5) + 1, avm.vesselRef.mainBody.atmosphereAdiabaticIndex / (avm.vesselRef.mainBody.atmosphereAdiabaticIndex - 1));
                return(Math.Sqrt(avm.vesselRef.atmDensity / 1.225) * stagnationPres);

            case SpeedRef.Equivalent:
                return(Math.Sqrt(avm.vesselRef.atmDensity / 1.225));

            case SpeedRef.True:
            default:
                return(1);
            }
        }
        public void RemoveVessel(AsstVesselModule avm)
        {
            if (selectedVesselIndex >= controlledVessels.Count)
            {
                return;
            }

            if (avm.Vessel != controlledVessels[selectedVesselIndex].Vessel)
            {
                Vessel ves = controlledVessels[selectedVesselIndex].Vessel;
                controlledVessels.Remove(avm);
                selectedVesselIndex = controlledVessels.FindIndex(vm => vm.Vessel == ves);
            }
            else
            {
                controlledVessels.RemoveAt(selectedVesselIndex);
                selectedVesselIndex = 0;
            }
        }
 public void addVessel(AsstVesselModule avm)
 {
     controlledVessels.Add(avm);
 }
 public void removeVessel(AsstVesselModule avm)
 {
     if (selectedVesselIndex >= controlledVessels.Count)
         return;
     if (avm.Vessel != controlledVessels[selectedVesselIndex].Vessel)
     {
         Vessel ves = controlledVessels[selectedVesselIndex].Vessel;
         controlledVessels.Remove(avm);
         selectedVesselIndex = controlledVessels.FindIndex(vm => vm.Vessel == ves);
     }
     else
     {
         controlledVessels.RemoveAt(selectedVesselIndex);
         selectedVesselIndex = 0;
     }
 }
Пример #8
0
 public void addVessel(AsstVesselModule avm)
 {
     controlledVessels.Add(avm);
 }
Пример #9
0
        /// <summary>
        /// Plane normal vector from a given heading (surface right vector)
        /// </summary>
        public static Vector3 vecHeading(double target, AsstVesselModule avm)
        {
            double angleDiff = target - avm.vesselData.heading;

            return(Quaternion.AngleAxis((float)(angleDiff + 90), (Vector3)avm.vesselData.planetUp) * avm.vesselData.surfVesForward);
        }
Пример #10
0
 public static Vector3 getPlaneNormal(Quaternion rotation, AsstVesselModule avm)
 {
     return(rotation * avm.vesselRef.mainBody.transform.right);
 }
Пример #11
0
        public static Quaternion getPlaneRotation(double heading, AsstVesselModule avm)
        {
            Vector3 planeNormal = vecHeading(heading, avm);

            return(getPlaneRotation(planeNormal, avm));
        }
Пример #12
0
 /// <summary>
 /// calculate the planet relative rotation from the plane normal vector
 /// </summary>
 public static Quaternion getPlaneRotation(Vector3 planeNormal, AsstVesselModule avm)
 {
     return(Quaternion.FromToRotation(avm.vesselRef.mainBody.transform.right, planeNormal));
 }
 public void removeVessel(AsstVesselModule avm)
 {
     if (avm.vesselRef != controlledVessels[selectedVesselIndex].vesselRef)
     {
         Vessel ves = controlledVessels[selectedVesselIndex].vesselRef;
         controlledVessels.Remove(avm);
         selectedVesselIndex = controlledVessels.FindIndex(vm => vm.vesselRef == ves);
     }
     else
     {
         controlledVessels.RemoveAt(selectedVesselIndex);
         selectedVesselIndex = 0;
     }
 }