Example #1
0
 private void GetNavball()
 {
     if (HighLogic.LoadedSceneIsFlight)
     {
         _navball = FlightUIController.fetch.GetComponentInChildren <NavBall>();
     }
 }
        static NavBall nav = FindObjectOfType <KSP.UI.Screens.Flight.NavBall>(); // cache somewhere
        private void LateUpdate()
        {
            if (!FlightGlobals.ActiveVessel.isEVA || !settings.evaNavballFollowsKerbal)
            {
                return;
            }
            if (nav == null)
            {
                nav = FindObjectOfType <KSP.UI.Screens.Flight.NavBall>();
            }

            currentMainBody = FlightGlobals.currentMainBody;
            // FlightGlobals.ActiveVessel.SetReferenceTransform(FlightGlobals.ActiveVessel.Parts.First());
            target = FlightGlobals.ActiveVessel.vesselTransform;
            if (currentMainBody == null || target == null)
            {
                return;
            }

            attitudeGimbal = Quaternion.Euler(rotationOffset) * Quaternion.Inverse(target.rotation);

            nav.navBall.rotation = attitudeGimbal * Quaternion.LookRotation(Vector3.ProjectOnPlane(currentMainBody.position + (currentMainBody.transform.up * (float)currentMainBody.Radius) - target.position, (target.position - currentMainBody.position).normalized).normalized, (target.position - currentMainBody.position).normalized);

            if (FlightGlobals.ActiveVessel.isEVA && settings.evaHideNavballMarkers)
            {
                nav.progradeVector.gameObject.SetActive(false);
                nav.retrogradeVector.gameObject.SetActive(false);
                nav.normalVector.gameObject.SetActive(false);
                nav.antiNormalVector.gameObject.SetActive(false);
                nav.radialInVector.gameObject.SetActive(false);
                nav.radialOutVector.gameObject.SetActive(false);
                nav.progradeWaypoint.gameObject.SetActive(false);
                nav.retrogradeWaypoint.gameObject.SetActive(false);
            }
        }
Example #3
0
        /// <summary>
        /// Create a new navball
        /// </summary>
        void createNavBall()
        {
            if (NavBallCreated == false && FlightGlobals.ActiveVessel != null)
            {
                NavBall = GameObject.Find("NavBall").GetComponent <NavBall>();
                var NavBallMesh = NavBall.navBall.GetComponent <MeshFilter>().mesh;

                NewNavBall = new GameObject("NewNavBall");
                GameObject.DontDestroyOnLoad(NewNavBall);

                NewNavBallGimball = new GameObject("NewNavBallGimball");
                GameObject.DontDestroyOnLoad(NewNavBallGimball);

                NewNavBallGimball.transform.position = NavBall.transform.position;

                var NewNavBallMF = NewNavBall.AddComponent <MeshFilter>();
                var NewNavBallMR = NewNavBall.AddComponent <MeshRenderer>();
                NewNavBall.renderer.material = NavBall.navBall.renderer.material;
                NewNavBall.renderer.enabled  = false;
                NewNavBallMF.mesh            = NavBallMesh;

                NewNavBall.transform.parent     = NewNavBallGimball.transform;
                NewNavBall.layer                = 12;
                NewNavBall.transform.position   = NavBall.navBall.position;
                NewNavBall.transform.localScale = new Vector3(2.1f, 2.1f, 2.1f);

                NavBallCreated = true;
            }
        }
Example #4
0
        public References()
        {
            _screenSafeUi       = ScreenSafeUI.fetch;
            _flightUiController = _screenSafeUi.GetComponent <FlightUIController>();

            GameObject navballGameObject = GameObject.Find("NavBall");

            _navball               = navballGameObject.GetComponent <NavBall>();
            _navBallTexture        = _navball.navBall.renderer.sharedMaterial;
            _vectorsPivotTransform = navballGameObject.transform.FindChild("vectorsPivot");

            _antiNormalVector = _navball.antiNormalVector.gameObject;
            _normalVector     = _navball.normalVector.gameObject;
            _radialInVector   = _navball.radialInVector.gameObject;
            _radialOutVector  = _navball.radialOutVector.gameObject;

            ManeuverGizmo maneuverGizmo = MapView.ManeuverNodePrefab.GetComponent <ManeuverGizmo>();

            _maneuverTexture = maneuverGizmo.handleNormal.flag.renderer.sharedMaterial;

            var maneuverVector = GameObject.Find("maneuverVector");

            _navBallBurnVector = maneuverVector.GetComponent <NavBallBurnVector>();

            _manueverIndicationarrow = GameObject.Find("Indicationarrow");
        }
Example #5
0
    public void Start()
    {
        _calculationStore = new CalculationStore();

        NavBallGameObject = GameObject.Find("NavBall");

        if (_vectorsPivotTransform == null)
        {
            _vectorsPivotTransform = NavBallGameObject.transform.FindChild("vectorsPivot");
        }

        if (_vectorsPivotTransform == null)
        {
            return;
        }

        if (_navBallBehaviour == null)
        {
            _navBallBehaviour = NavBallGameObject.GetComponent <NavBall>();
        }

        LoadTexture();
        BuildEnhancedNavBall();
        CreateManueverPlane();
        BuildGhostingLayer();


        //TestPlane();
    }
 private void GetNavball()
 {
     if (HighLogic.LoadedSceneIsFlight)
     {
         _navball = Object.FindObjectOfType <NavBall>();
     }
 }
Example #7
0
        /// <summary>
        /// Create a new navball
        /// </summary>
        void createNavBall()
        {
            if (NavBallCreated == false && FlightGlobals.ActiveVessel != null)
            {
                NavBall = GameObject.Find("NavBall").GetComponent<NavBall>();
                var NavBallMesh = NavBall.navBall.GetComponent<MeshFilter>().mesh;

                NewNavBall = new GameObject("NewNavBall");
                GameObject.DontDestroyOnLoad(NewNavBall);

                NewNavBallGimball = new GameObject("NewNavBallGimball");
                GameObject.DontDestroyOnLoad(NewNavBallGimball);

                NewNavBallGimball.transform.position = NavBall.transform.position;

                var NewNavBallMF = NewNavBall.AddComponent<MeshFilter>();
                var NewNavBallMR = NewNavBall.AddComponent<MeshRenderer>();
                NewNavBall.renderer.material = NavBall.navBall.renderer.material;
                NewNavBall.renderer.enabled = false;
                NewNavBallMF.mesh = NavBallMesh;

                NewNavBall.transform.parent = NewNavBallGimball.transform;
                NewNavBall.layer = 12;
                NewNavBall.transform.position = NavBall.navBall.position;
                NewNavBall.transform.localScale = new Vector3(2.1f, 2.1f, 2.1f);

                NavBallCreated = true;
            }
        }
        internal static void DestroyTransforms()
        {
            navball = null;

            if (guide_renderer != null)
            {
                UnityEngine.Object.Destroy(guide_renderer);
            }
            if (reference_renderer != null)
            {
                UnityEngine.Object.Destroy(reference_renderer);
            }
            guide_renderer     = null;
            reference_renderer = null;

            if (guide_transform != null)
            {
                guide_transform.gameObject.DestroyGameObject();
            }
            if (reference_transform != null)
            {
                reference_transform.gameObject.DestroyGameObject();
            }
            guide_transform     = null;
            reference_transform = null;
        }
    public void Start()
    {
        PluginConfiguration cfg = KSP.IO.PluginConfiguration.CreateForType<NavBallDockingAlignmentIndicator>();
        cfg.load();
        Vector3 tmp = cfg.GetValue<Vector3>("alignmentmarkercolor", new Vector3(1f, 0f, 0f)); // default: red
        Color alignmentmarkercolor = new Color(tmp.x, tmp.y, tmp.z);
        Vector2 alignmentmarkertexture = cfg.GetValue<Vector2>("alignmentmarkertexture", new Vector2(0f, 2f)); // default: prograde marker
        cfg.save();
        float texturescalefactor = 1f / 3f;

        // get navball object
        GameObject navBall = GameObject.Find("NavBall");
        Transform navBallVectorsPivotTransform = navBall.transform.FindChild("vectorsPivot");
        navBallBehaviour = navBall.GetComponent<NavBall>();

        // get indicator texture (use the prograde marker, since it has a clear 'upwards' direction)
        ManeuverGizmo maneuverGizmo = MapView.ManeuverNodePrefab.GetComponent<ManeuverGizmo>();
        ManeuverGizmoHandle maneuverGizmoHandle = maneuverGizmo.handleNormal;
        Transform transform = maneuverGizmoHandle.flag;
        Renderer renderer = transform.renderer;
        Material maneuverTexture = renderer.sharedMaterial;

        // create alignment indicator game object
        indicator = Create2DObject(
            name: "navballalignmentindicator",
            size: 0.025f, // the same size as all other markers
            col: alignmentmarkercolor,
            texture: maneuverTexture,
            textureScale: Vector2.one * texturescalefactor,
            textureOffset: alignmentmarkertexture * texturescalefactor,
            parentTransform: navBallVectorsPivotTransform,
            layer: 12 // the navball layer
        );
    }
 internal void Update()
 {
     if (navBall == null)
     {
         // Get a pointer to the navball
         navBall = GameObject.Find("NavBall");
         ball = navBall.GetComponent<NavBall>();
     }
 }
Example #11
0
 public void Start()
 {
     if (HighLogic.LoadedSceneIsEditor)
     {
         return;
     }
     stockNavball   = FindObjectOfType <NavBall>();
     myNavballTrans = part.transform.FindRecursive(NavBallName);
 }
Example #12
0
 internal void Update()
 {
     if (navBall == null)
     {
         // Get a pointer to the navball
         navBall = GameObject.Find("NavBall");
         ball    = navBall.GetComponent <NavBall>();
     }
 }
Example #13
0
    void LateUpdate()
    {
        if (this.navBall == null)
        {
            this.navBall = FindObjectOfType <NavBall>();
        }
        if (FlightGlobals.fetch != null &&
            FlightGlobals.ready &&
            FlightGlobals.fetch.activeVessel != null &&
            FlightGlobals.fetch.VesselTarget != null &&
            FlightGlobals.fetch.VesselTarget.GetTargetingMode() == VesselTargetModes.DirectionVelocityAndOrientation)
        {
            /// Targeted a Port if I am not mistaken o__o

            if (this.indicator == null)
            {
                SetupIndicator();
            }


            #region "legacy" Code
            ITargetable targetPort      = FlightGlobals.fetch.VesselTarget;
            Transform   targetTransform = targetPort.GetTransform();
            Transform   selfTransform   = FlightGlobals.ActiveVessel.ReferenceTransform;

            // Position
            Vector3 targetPortOutVector       = targetTransform.forward.normalized;
            Vector3 rotatedTargetPortInVector = navBall.attitudeGymbal * -targetPortOutVector;
            this.indicator.transform.localPosition = rotatedTargetPortInVector * navBall.progradeVector.localPosition.magnitude;

            // Rotation
            Vector3 v1  = Vector3.Cross(selfTransform.up, -targetTransform.up);
            Vector3 v2  = Vector3.Cross(selfTransform.up, selfTransform.forward);
            float   ang = Vector3.Angle(v1, v2);
            if (Vector3.Dot(selfTransform.up, Vector3.Cross(v1, v2)) < 0)
            {
                ang = -ang;
            }
            this.indicator.transform.rotation = Quaternion.Euler(90 + ang, 90, 270);
            #endregion

            // Set opacity
            float value = Vector3.Dot(indicator.transform.localPosition.normalized, Vector3.forward);
            value = Mathf.Clamp01(value);
            this.indicator.GetComponent <MeshRenderer>().materials[0].SetFloat("_Opacity", value);

            this.indicator.SetActive(indicator.transform.localPosition.z > 0.0d);
            return;
        }

        if (this.indicator != null)
        {
            this.indicator.SetActive(false);
        }
    }
Example #14
0
        /// <summary>
        /// Initialize some fields to safe values (or expected unchanging values).
        /// The vessel fields of VesselComputer doesn't have good values yet, so this
        /// step is only good for non-specific initial values.
        /// </summary>
        public void Awake()
        {
            if (HighLogic.LoadedSceneIsFlight == false)
            {
                Utility.LogWarning(this, "Someone is creating a vessel computer outside of flight!");
            }

            vessel = gameObject.GetComponent <Vessel>();
            if (vessel == null)
            {
                throw new ArgumentNullException("[MASVesselComputer] Awake(): Could not find the vessel!");
            }
            //Utility.LogMessage(this, "Awake() for {0}", vessel.id);

            navBall = UnityEngine.Object.FindObjectOfType <KSP.UI.Screens.Flight.NavBall>();
            if (navBall == null)
            {
                Utility.LogError(this, "navBall was null!");
            }
            LinearAtmosphereGauge linearAtmosGauge = UnityEngine.Object.FindObjectOfType <KSP.UI.Screens.Flight.LinearAtmosphereGauge>();

            if (linearAtmosGauge == null)
            {
                Utility.LogError(this, "linearAtmosGauge was null!");
                atmosphereDepthGauge = new KSP.UI.Screens.LinearGauge();
            }
            else
            {
                atmosphereDepthGauge = linearAtmosGauge.gauge;
            }

            mainBody = vessel.mainBody;
            vesselId = vessel.id;
            orbit    = vessel.orbit;

            universalTime = Planetarium.GetUniversalTime();

            InitResourceData();

            UpdateReferenceTransform(vessel.ReferenceTransform, true);
            vesselCrewed = (vessel.GetCrewCount() > 0);
            vesselActive = ActiveVessel(vessel);
            if (vesselCrewed)
            {
                RefreshData();
            }

            PilotInitialize();

            GameEvents.OnCameraChange.Add(onCameraChange);
            GameEvents.onStageActivate.Add(onStageActivate);
            GameEvents.onVesselChange.Add(onVesselChange);
            GameEvents.onVesselSOIChanged.Add(onVesselSOIChanged);
            GameEvents.onVesselWasModified.Add(onVesselWasModified);
        }
        internal NavBallOverlay(Trajectory trajectory)
        {
            Util.DebugLog(constructed ? "Resetting" : "Constructing");

            _trajectory = trajectory;

            guide_texture ??= new Texture2D(36, 36);
            reference_texture ??= new Texture2D(36, 36);

            if (TexturesAllocated)
            {
                if (!constructed)
                {
                    string TrajTexturePath = KSPUtil.ApplicationRootPath + "GameData/Trajectories/Textures/";
                    guide_texture.LoadImage(File.ReadAllBytes(TrajTexturePath + "GuideNavMarker.png"));
                    reference_texture.LoadImage(File.ReadAllBytes(TrajTexturePath + "RefNavMarker.png"));
                    constructed = true;
                }

                navball = Object.FindObjectOfType <NavBall>();

                if (navball != null)
                {
                    // green circle for target
                    guide_transform = Object.Instantiate(navball.progradeVector, navball.progradeVector.parent);
                    if (guide_transform != null)
                    {
                        guide_transform.gameObject.transform.localScale = guide_transform.gameObject.transform.localScale * SCALE;
                        guide_renderer = guide_transform.GetComponent <Renderer>();
                        if (guide_renderer != null)
                        {
                            //Util.DebugLog("Scale {0}", guide_renderer.material.GetTextureScale("_MainTexture").ToString());
                            guide_renderer.material.SetTexture(MainTexture, guide_texture);
                            guide_renderer.material.SetTextureOffset(MainTexture, Vector2.zero);
                            guide_renderer.material.SetTextureScale(MainTexture, Vector2.one);
                        }
                    }

                    // red square for crash site
                    reference_transform = Object.Instantiate(navball.progradeVector, navball.progradeVector.parent);
                    if (reference_transform != null)
                    {
                        reference_transform.gameObject.transform.localScale = reference_transform.gameObject.transform.localScale * SCALE;
                        reference_renderer = reference_transform.GetComponent <Renderer>();
                        if (reference_renderer != null)
                        {
                            reference_renderer.material.SetTexture(MainTexture, reference_texture);
                            reference_renderer.material.SetTextureOffset(MainTexture, Vector2.zero);
                            reference_renderer.material.SetTextureScale(MainTexture, Vector2.one);
                        }
                    }
                }
            }
        }
Example #16
0
        public void Start()
        {
            if (HighLogic.LoadedSceneIsEditor)
            {
                return;
            }
            //NavBall
            stockNavball   = FindObjectOfType <NavBall>();
            myNavballTrans = part.transform.FindRecursive(NavBallName);
            //myProgradeTrans = part.transform.FindRecursive(ProgradeName);

            //RCS
            SASstat  = vessel.ActionGroups[KSPActionGroup.SAS];
            SASglass = part.transform.FindRecursive(SAS_Name);

            //SAS
            RCSstat  = vessel.ActionGroups[KSPActionGroup.RCS];
            RCSglass = part.transform.FindRecursive(RCS_Name);

            //Set initial state for altitude pointers
            altpointer    = 1;
            altpointerold = altpointer;

            //Set initial state for speed pointers
            speedpointer    = 1;
            speedpointerold = speedpointer;

            //Set initial state for comm pointers
            commpointer    = 0;
            commpointerold = commpointer;

            //Throttle
            Throttle_Dial_L = part.transform.FindRecursive(Throttle_Dial_Left_Name);
            Throttle_Dial_R = part.transform.FindRecursive(Throttle_Dial_Right_Name);
            Throttle_L      = part.transform.FindRecursive(Throttle_Left_Name);
            Throttle_R      = part.transform.FindRecursive(Throttle_Right_Name);

            //Speed Dials
            Speed_Dial_10_L   = part.transform.FindRecursive(Speed_Dial_10_Left_Name);
            Speed_Dial_100_L  = part.transform.FindRecursive(Speed_Dial_100_Left_Name);
            Speed_Dial_1000_L = part.transform.FindRecursive(Speed_Dial_1000_Left_Name);
            Speed_Dial_10_R   = part.transform.FindRecursive(Speed_Dial_10_Right_Name);
            Speed_Dial_100_R  = part.transform.FindRecursive(Speed_Dial_100_Right_Name);
            Speed_Dial_1000_R = part.transform.FindRecursive(Speed_Dial_1000_Right_Name);

            //Altitude Dials
            Alt_Dial_10_L   = part.transform.FindRecursive(Alt_Dial_10_Left_Name);
            Alt_Dial_100_L  = part.transform.FindRecursive(Alt_Dial_100_Left_Name);
            Alt_Dial_1000_L = part.transform.FindRecursive(Alt_Dial_1000_Left_Name);
            Alt_Dial_10_R   = part.transform.FindRecursive(Alt_Dial_10_Right_Name);
            Alt_Dial_100_R  = part.transform.FindRecursive(Alt_Dial_100_Right_Name);
            Alt_Dial_1000_R = part.transform.FindRecursive(Alt_Dial_1000_Right_Name);
        }
 void highjackPurpleWaypoint()
 {
     //highjack the purple navball waypoint
     if (navball == null)
     {
         navball = (NavBall)GameObject.FindObjectOfType(typeof(NavBall));
     }
     if (navball != null)
     {
         if (navball.target != waypoint.transform)
         {
             defaultPurpleWaypoint = navball.target; //save the usual waypoint
             navball.target        = waypoint.transform;
         }
     }
 }
Example #18
0
 /// <summary>
 /// Activate new navball when in interstellar space
 /// </summary>
 void activeNavBall()
 {
     if (NavBallCreated == true && NewNavBallEnabled == false && FlightGlobals.ActiveVessel != null)
     {
         if (FlightGlobals.ActiveVessel.mainBody.name == StarSystem.CBDict["Sun"].name)
         {
             if (NavBall == null)
             {
                 NavBall = GameObject.Find("NavBall").GetComponent<NavBall>();
             }
             NewNavBall.renderer.enabled = true;
             NavBall.navBall.renderer.enabled = false;
             NewNavBallEnabled = true;
         }
     }
 }
Example #19
0
 /// <summary>
 /// Activate new navball when in interstellar space
 /// </summary>
 void activeNavBall()
 {
     if (NavBallCreated == true && NewNavBallEnabled == false && FlightGlobals.ActiveVessel != null)
     {
         if (FlightGlobals.ActiveVessel.mainBody.name == StarSystem.CBDict["Sun"].name)
         {
             if (NavBall == null)
             {
                 NavBall = GameObject.Find("NavBall").GetComponent <NavBall>();
             }
             NewNavBall.renderer.enabled      = true;
             NavBall.navBall.renderer.enabled = false;
             NewNavBallEnabled = true;
         }
     }
 }
Example #20
0
        private void Init()
        {
            /*trajectoryGuide = new GameObject();
             * trajectoryGuide.layer = 12;
             * MeshFilter meshFilter = trajectoryGuide.AddComponent<MeshFilter>();
             * trajectoryGuide.AddComponent<MeshRenderer>();
             * Mesh mesh = meshFilter.mesh;
             *
             * float width = 0.25f;
             * float height = 0.5f;
             *
             * var vertices = new Vector3[4];
             * vertices[0] = new Vector3();
             *
             * vertices[0] = new Vector3(-width * 0.5f, 0, height);
             * vertices[1] = new Vector3(width * 0.5f, 0, height);
             * vertices[2] = new Vector3(-width * 0.5f, 0, 0);
             * vertices[3] = new Vector3(width * 0.5f, 0, 0);
             *
             * mesh.vertices = vertices;
             *
             * mesh.triangles = new[]
             * {
             *  0, 1, 2,
             *  3, 4, 5
             * };
             *
             * mesh.RecalculateBounds();
             * mesh.Optimize();*/



            GameObject navballGameObject     = FlightUIModeController.Instance.navBall.gameObject;
            Transform  vectorsPivotTransform = navballGameObject.transform.FindChild("vectorsPivot");

            navball = navballGameObject.GetComponentInChildren <NavBall>();

            trajectoryGuide                      = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            trajectoryGuide.layer                = 12;
            trajectoryGuide.transform.parent     = navball.transform.FindChild("vectorsPivot");
            trajectoryGuide.transform.localScale = Vector3.one * 0.004f;

            trajectoryReference                      = GameObject.CreatePrimitive(PrimitiveType.Cube);
            trajectoryReference.layer                = 12;
            trajectoryReference.transform.parent     = navball.transform.FindChild("vectorsPivot");
            trajectoryReference.transform.localScale = Vector3.one * 0.004f;
        }
Example #21
0
        private void Init()
        {
            /*trajectoryGuide = new GameObject();
            trajectoryGuide.layer = 12;
            MeshFilter meshFilter = trajectoryGuide.AddComponent<MeshFilter>();
            trajectoryGuide.AddComponent<MeshRenderer>();
            Mesh mesh = meshFilter.mesh;

            float width = 0.25f;
            float height = 0.5f;

            var vertices = new Vector3[4];
            vertices[0] = new Vector3();

            vertices[0] = new Vector3(-width * 0.5f, 0, height);
            vertices[1] = new Vector3(width * 0.5f, 0, height);
            vertices[2] = new Vector3(-width * 0.5f, 0, 0);
            vertices[3] = new Vector3(width * 0.5f, 0, 0);

            mesh.vertices = vertices;

            mesh.triangles = new[]
            {
                0, 1, 2,
                3, 4, 5
            };

            mesh.RecalculateBounds();
            mesh.Optimize();*/

            
            
            GameObject navballGameObject = GameObject.Find("NavBall");
            Transform vectorsPivotTransform = navballGameObject.transform.FindChild("vectorsPivot");
            navball = navballGameObject.GetComponent<NavBall>();

            trajectoryGuide = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            trajectoryGuide.layer = 12;
            trajectoryGuide.transform.parent = navball.transform.FindChild("vectorsPivot");
            trajectoryGuide.transform.localScale = Vector3.one * 0.004f;

            trajectoryReference = GameObject.CreatePrimitive(PrimitiveType.Cube);
            trajectoryReference.layer = 12;
            trajectoryReference.transform.parent = navball.transform.FindChild("vectorsPivot");
            trajectoryReference.transform.localScale = Vector3.one * 0.004f;
        }
 internal void Update()
 {
     if (navBall == null)
     {
         // Get a pointer to the navball
         navBall = GameObject.Find("NavBall");
         ball = navBall.GetComponent<NavBall>();
     }
     if (FlightGlobals.ActiveVessel.isEVA)
     {
         // Change rotation offset so it points in the direction the Kerbal is facing
         ball.rotationOffset = new Vector3(0, 0, 0);
     }
     else
     {
         ball.rotationOffset = new Vector3(90f, 0, 0);
     }
 }
Example #23
0
        public void GetNavBallRect()
        {
            // ScreenSafeUI appears to no longer be used, so lets get out of here
            //if (ScreenSafeUI.referenceCam == null)
            //	return;

            NavBall navball = GameObject.FindObjectOfType <NavBall>();

            if (navball == null)
            {
                Log.error("GetNavBallArea: no navball object found");
            }

            Log.detail("Navball game object: {0}", navball);
            Log.detail("Navball transform: {0}", navball.transform.localToWorldMatrix);
            Log.detail("Navball transform.position: {0}", navball.transform.position);

            // position is (1.0,0.1,0.0) when visible
            // position is (1.0,-0.1,0.0) when not visible
            // Camera camera = ScreenSafeUI.referenceCam;

            Camera camera = UIMasterController.Instance.appCanvas.worldCamera;

            // this looks to be the center of the ball with Y counting up from bottom of screen
            // so 800,85 for 1600x1200 screen.
            Vector3 center = camera.WorldToScreenPoint(navball.transform.position);

            Log.detail("Navball center in screen point: {0}", center);

            // cannot figure out how to get actual size. Just assume that since we have the center
            // and the Y is offset from 0 the size is about twice that.
            // the 200 and 223 come from measuring this in a 1600x1200 frame
            float height = (float)center.y * (200.0f / 85.6f);
            float width  = (float)center.y * (223.0f / 85.6f);

            // this does not work; maybe only valid inside GUI draw calls
            // Vector2 guiCenter = GUIUtility.ScreenToGUIPoint(new Vector2(center.x, center.y));

            // Just assume as is the case currently with unity that the Y reverses direction
            navBallRect =
                new Rect(center.x - width / 2, Screen.height - height, width, height);

            Log.detail("Navball Rect calculated to be: {0}", navBallRect);
        }
Example #24
0
        /// <summary>
        /// This vessel is being scrapped.  Release modules.
        /// </summary>
        private void OnDestroy()
        {
            //Utility.LogMessage(this, "OnDestroy for {0}", vesselId);

            GameEvents.OnCameraChange.Remove(onCameraChange);
            GameEvents.onStageActivate.Remove(onStageActivate);
            GameEvents.onVesselChange.Remove(onVesselChange);
            GameEvents.onVesselSOIChanged.Remove(onVesselSOIChanged);
            GameEvents.onVesselWasModified.Remove(onVesselWasModified);

            TeardownResourceData();

            vesselId             = Guid.Empty;
            orbit                = null;
            atmosphereDepthGauge = null;
            mainBody             = null;
            navBall              = null;
            activeTarget         = null;
        }
Example #25
0
 /// <summary>
 /// Deactivate navball when exiting flight
 /// </summary>
 void deactiveNavBall()
 {
     //Deactivate navball when exiting interstellar space
     if (NavBallCreated == true && NewNavBallEnabled == true && FlightGlobals.ActiveVessel != null)
     {
         if (FlightGlobals.ActiveVessel.mainBody.name != StarSystem.CBDict["Sun"].name)
         {
             if (NavBall == null)
             {
                 NavBall = GameObject.Find("NavBall").GetComponent <NavBall>();
             }
             NewNavBall.renderer.enabled      = false;
             NavBall.navBall.renderer.enabled = true;
             NewNavBallEnabled = false;
         }
     }
     if (NavBallCreated == true && NewNavBallEnabled == true && FlightGlobals.ActiveVessel == null)
     {
         NewNavBall.renderer.enabled = false;
         NewNavBallEnabled           = false;
     }
 }
Example #26
0
        /**
         * Replace NavBalls' textures.
         */

        private void updateNavball(Vessel vessel)
        {
            if (hudNavBallTexture != null)
            {
                NavBall hudNavball = UnityEngine.Object.FindObjectOfType <NavBall>();

                if (hudNavball != null)
                {
                    hudNavball.navBall.GetComponent <Renderer>().sharedMaterial.mainTexture = hudNavBallTexture;
                }
            }

            if (ivaNavBallTexture != null && InternalSpace.Instance != null)
            {
                InternalNavBall ivaNavball = InternalSpace.Instance.GetComponentInChildren <InternalNavBall>();

                if (ivaNavball != null)
                {
                    ivaNavball.navBall.GetComponent <Renderer>().sharedMaterial.mainTexture = ivaNavBallTexture;
                }
            }
        }
Example #27
0
        /// <summary>
        /// Replace NavBalls' textures.
        /// </summary>
        void UpdateNavBall()
        {
            if (navBallTexture != null)
            {
                NavBall hudNavBall = UnityEngine.Object.FindObjectOfType <NavBall>();
                if (hudNavBall != null)
                {
                    Material material = hudNavBall.navBall.GetComponent <Renderer>().sharedMaterial;

                    material.SetTexture(Util.MainTextureProperty, navBallTexture);
                }

                InternalNavBall ivaNavBall = InternalSpace.Instance.GetComponentInChildren <InternalNavBall>();
                if (ivaNavBall != null)
                {
                    Material material = ivaNavBall.navBall.GetComponent <Renderer>().sharedMaterial;

                    material.mainTexture = navBallTexture;
                    material.SetTextureScale(Util.MainTexProperty, NavBallScale);
                }
            }
        }
        public override void onPartFixedUpdate()
        {
            _rendezvousRecalculationTimer += TimeWarp.deltaTime;

            if (((core.targetType == MechJebCore.TargetType.NONE) || (FlightGlobals.activeTarget != part.vessel)) && waypointHijacked)
            {
                navball.target   = defaultPurpleWaypoint;
                waypointHijacked = false;
            }

            if (core.targetType != MechJebCore.TargetType.NONE)
            {
                if (!waypointHijacked)
                {
                    if (navball == null)
                    {
                        navball = (NavBall)GameObject.FindObjectOfType(typeof(NavBall));
                    }
                    defaultPurpleWaypoint = navball.target;

                    waypointHijacked = true;
                }
                navball.target = (core.targetType == MechJebCore.TargetType.VESSEL) ? core.targetVessel.transform : core.targetBody.transform;
            }

            if (Mode == UIMode.SYNC)
            {
                PerformSyncPartLogic();
            }

            UpdateVectors();

            if (_modeChanged)
            {
                windowPos    = new Rect(windowPos.x, windowPos.y, 10, 10);
                _modeChanged = false;
            }
        }
Example #29
0
        public References()
        {
            _screenSafeUi = ScreenSafeUI.fetch;
            _flightUiController = _screenSafeUi.GetComponent<FlightUIController>();

            GameObject navballGameObject = GameObject.Find("NavBall");
            _navball = navballGameObject.GetComponent<NavBall>();
            _navBallTexture = _navball.navBall.renderer.sharedMaterial;
            _vectorsPivotTransform = navballGameObject.transform.FindChild("vectorsPivot");

            _antiNormalVector = _navball.antiNormalVector.gameObject;
            _normalVector = _navball.normalVector.gameObject;
            _radialInVector = _navball.radialInVector.gameObject;
            _radialOutVector = _navball.radialOutVector.gameObject;

            ManeuverGizmo maneuverGizmo = MapView.ManeuverNodePrefab.GetComponent<ManeuverGizmo>();
            _maneuverTexture = maneuverGizmo.handleNormal.flag.renderer.sharedMaterial;

            var maneuverVector = GameObject.Find("maneuverVector");
            _navBallBurnVector = maneuverVector.GetComponent<NavBallBurnVector>();

            _manueverIndicationarrow = GameObject.Find("Indicationarrow");
        }
Example #30
0
    public void Start()
    {
        PluginConfiguration cfg = KSP.IO.PluginConfiguration.CreateForType <NavBallDockingAlignmentIndicator>();

        cfg.load();
        Vector3 tmp = cfg.GetValue <Vector3>("alignmentmarkercolor", new Vector3(1f, 0f, 0f));                  //default: red
        Color   alignmentmarkercolor   = new Color(tmp.x, tmp.y, tmp.z);
        Vector2 alignmentmarkertexture = cfg.GetValue <Vector2>("alignmentmarkertexture", new Vector2(0f, 2f)); //default: prograde marker

        cfg.save();
        float texturescalefactor = 1f / 3f;

        //get navball object
        GameObject navBall = GameObject.Find("NavBall");
        Transform  navBallVectorsPivotTransform = navBall.transform.FindChild("vectorsPivot");

        navBallBehaviour = navBall.GetComponent <NavBall>();

        //get indicator texture (use the prograde marker, since it has a clear 'upwards' direction)
        ManeuverGizmo       maneuverGizmo       = MapView.ManeuverNodePrefab.GetComponent <ManeuverGizmo>();
        ManeuverGizmoHandle maneuverGizmoHandle = maneuverGizmo.handleNormal;
        Transform           transform           = maneuverGizmoHandle.flag;
        Renderer            renderer            = transform.renderer;
        Material            maneuverTexture     = renderer.sharedMaterial;

        //create alignment indicator game object
        indicator = Create2DObject(
            name: "navballalignmentindicator",
            size: 0.025f,             //the same size as all other markers
            col: alignmentmarkercolor,
            texture: maneuverTexture,
            textureScale: Vector2.one * texturescalefactor,
            textureOffset: alignmentmarkertexture * texturescalefactor,
            parentTransform: navBallVectorsPivotTransform,
            layer: 12             //the navball layer
            );
    }
    public void Start()
    {
        _calculationStore = new CalculationStore();

        NavBallGameObject = GameObject.Find("NavBall");

        if (_vectorsPivotTransform == null)
        {
            _vectorsPivotTransform = NavBallGameObject.transform.FindChild("vectorsPivot");
        }

        if (_vectorsPivotTransform == null)
            return;

        if (_navBallBehaviour == null)
        {
            _navBallBehaviour = NavBallGameObject.GetComponent<NavBall>();
        }

        LoadTexture();
        BuildEnhancedNavBall();
        CreateManueverPlane();
        BuildGhostingLayer();

        //TestPlane();
    }
        public void Start()
        {
            if (HighLogic.LoadedSceneIsEditor)
            {
                return;
            }

            try {
                // Parse bloody KSPField colors.
                if (!string.IsNullOrEmpty(backgroundColor))
                {
                    backgroundColorValue = ConfigNode.ParseColor32(backgroundColor);
                }
                if (!string.IsNullOrEmpty(ballColor))
                {
                    ballColorValue = ConfigNode.ParseColor32(ballColor);
                }
                if (!string.IsNullOrEmpty(progradeColor))
                {
                    progradeColorValue = ConfigNode.ParseColor32(progradeColor);
                }
                if (!string.IsNullOrEmpty(maneuverColor))
                {
                    maneuverColorValue = ConfigNode.ParseColor32(maneuverColor);
                }
                if (!string.IsNullOrEmpty(targetColor))
                {
                    targetColorValue = ConfigNode.ParseColor32(targetColor);
                }
                if (!string.IsNullOrEmpty(normalColor))
                {
                    normalColorValue = ConfigNode.ParseColor32(normalColor);
                }
                if (!string.IsNullOrEmpty(radialColor))
                {
                    radialColorValue = ConfigNode.ParseColor32(radialColor);
                }
                if (!string.IsNullOrEmpty(dockingColor))
                {
                    dockingColorValue = ConfigNode.ParseColor32(dockingColor);
                }

                Shader unlit = Shader.Find("KSP/Alpha/Unlit Transparent");
                overlayMaterial             = new Material(unlit);
                overlayMaterial.mainTexture = GameDatabase.Instance.GetTexture(staticOverlay.EnforceSlashes(), false);

                if (!string.IsNullOrEmpty(headingBar))
                {
                    headingMaterial             = new Material(unlit);
                    headingMaterial.mainTexture = GameDatabase.Instance.GetTexture(headingBar.EnforceSlashes(), false);
                }
                horizonTex = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false);

                gizmoTexture = JUtil.GetGizmoTexture();

                // Ahaha, that's clever, does it work?
                stockNavBall = GameObject.Find("NavBall").GetComponent <NavBall>();
                // ...well, it does, but the result is bizarre,
                // apparently, because the stock BALL ITSELF IS MIRRORED.

                navBall = GameDatabase.Instance.GetModel(navBallModel.EnforceSlashes());
                Destroy(navBall.collider);
                navBall.name  = "RPMNB" + navBall.GetInstanceID();
                navBall.layer = drawingLayer;
                navBall.transform.position      = Vector3.zero;
                navBall.transform.rotation      = Quaternion.identity;
                navBall.transform.localRotation = Quaternion.identity;

                if (ballIsEmissive)
                {
                    navBall.renderer.material.shader = Shader.Find("KSP/Emissive/Diffuse");
                    navBall.renderer.material.SetTexture("_MainTex", horizonTex);
                    navBall.renderer.material.SetTextureOffset("_Emissive", navBall.renderer.material.GetTextureOffset("_MainTex"));
                    navBall.renderer.material.SetTexture("_Emissive", horizonTex);
                    navBall.renderer.material.SetColor("_EmissiveColor", ballColorValue);
                }
                else
                {
                    navBall.renderer.material.shader      = Shader.Find("KSP/Unlit");
                    navBall.renderer.material.mainTexture = horizonTex;
                    navBall.renderer.material.color       = ballColorValue;
                }
                navBall.renderer.material.SetFloat("_Opacity", ballOpacity);

                markerPrograde      = BuildMarker(0, 2, progradeColorValue);
                markerRetrograde    = BuildMarker(1, 2, progradeColorValue);
                markerManeuver      = BuildMarker(2, 0, maneuverColorValue);
                markerManeuverMinus = BuildMarker(1, 2, maneuverColorValue);
                markerTarget        = BuildMarker(2, 1, targetColorValue);
                markerTargetMinus   = BuildMarker(2, 2, targetColorValue);
                markerNormal        = BuildMarker(0, 0, normalColorValue);
                markerNormalMinus   = BuildMarker(1, 0, normalColorValue);
                markerRadial        = BuildMarker(1, 1, radialColorValue);
                markerRadialMinus   = BuildMarker(0, 1, radialColorValue);

                markerDockingAlignment = BuildMarker(0, 2, dockingColorValue);

                // Non-moving parts...
                cameraBody                  = new GameObject();
                cameraBody.name             = "RPMPFD" + cameraBody.GetInstanceID();
                cameraBody.layer            = drawingLayer;
                ballCamera                  = cameraBody.AddComponent <Camera>();
                ballCamera.enabled          = false;
                ballCamera.orthographic     = true;
                ballCamera.clearFlags       = CameraClearFlags.Nothing;
                ballCamera.eventMask        = 0;
                ballCamera.farClipPlane     = 3f;
                ballCamera.orthographicSize = cameraSpan;
                ballCamera.cullingMask      = 1 << drawingLayer;
                ballCamera.clearFlags       = CameraClearFlags.Depth;
                // -2,0,0 seems to get the orientation exactly as the ship.
                // But logically, forward is Z+, right?
                // Which means that
                ballCamera.transform.position = new Vector3(0, 0, 2);
                ballCamera.transform.LookAt(Vector3.zero, Vector3.up);
                ballCamera.transform.position = new Vector3(cameraShift.x, cameraShift.y, 2);

                overlay       = CreateSimplePlane("RPMPFDOverlay" + internalProp.propID, 1f, drawingLayer);
                overlay.layer = drawingLayer;
                overlay.transform.position = new Vector3(0, 0, 1.5f);
                overlay.renderer.material  = overlayMaterial;
                overlay.transform.parent   = cameraBody.transform;
                FaceCamera(overlay);

                if (headingMaterial != null)
                {
                    heading       = CreateSimplePlane("RPMPFDHeading" + internalProp.propID, 1f, drawingLayer);
                    heading.layer = drawingLayer;
                    heading.transform.position   = new Vector3(headingBarPosition.x, headingBarPosition.y, headingAboveOverlay ? 1.55f : 1.45f);
                    heading.transform.parent     = cameraBody.transform;
                    heading.transform.localScale = new Vector3(headingBarPosition.z, 0, headingBarPosition.w);
                    heading.renderer.material    = headingMaterial;
                    heading.renderer.material.SetTextureScale("_MainTex", new Vector2(headingSpan, 1f));
                    FaceCamera(heading);
                }

                ShowHide(false, navBall, cameraBody, overlay, heading);
                startupComplete = true;
            } catch {
                JUtil.AnnoyUser(this);
                throw;
            }
        }
		public void Start()
		{

			if (HighLogic.LoadedSceneIsEditor)
				return;

			try {
				// Parse bloody KSPField colors.
				if (!string.IsNullOrEmpty(backgroundColor))
					backgroundColorValue = ConfigNode.ParseColor32(backgroundColor);
				if (!string.IsNullOrEmpty(ballColor))
					ballColorValue = ConfigNode.ParseColor32(ballColor);
				if (!string.IsNullOrEmpty(progradeColor))
					progradeColorValue = ConfigNode.ParseColor32(progradeColor);
				if (!string.IsNullOrEmpty(maneuverColor))
					maneuverColorValue = ConfigNode.ParseColor32(maneuverColor);
				if (!string.IsNullOrEmpty(targetColor))
					targetColorValue = ConfigNode.ParseColor32(targetColor);
				if (!string.IsNullOrEmpty(normalColor))
					normalColorValue = ConfigNode.ParseColor32(normalColor);
				if (!string.IsNullOrEmpty(radialColor))
					radialColorValue = ConfigNode.ParseColor32(radialColor);
				if (!string.IsNullOrEmpty(dockingColor))
					dockingColorValue = ConfigNode.ParseColor32(dockingColor);

				Shader unlit = Shader.Find("KSP/Alpha/Unlit Transparent");
				overlayMaterial = new Material(unlit);
				overlayMaterial.mainTexture = GameDatabase.Instance.GetTexture(staticOverlay.EnforceSlashes(), false);

				if (!string.IsNullOrEmpty(headingBar)) {
					headingMaterial = new Material(unlit);
					headingMaterial.mainTexture = GameDatabase.Instance.GetTexture(headingBar.EnforceSlashes(), false);
				}
				horizonTex = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false);

				gizmoTexture = JUtil.GetGizmoTexture();

				// Ahaha, that's clever, does it work?
				stockNavBall = GameObject.Find("NavBall").GetComponent<NavBall>();
				// ...well, it does, but the result is bizarre,
				// apparently, because the stock BALL ITSELF IS MIRRORED.

				navBall = GameDatabase.Instance.GetModel(navBallModel.EnforceSlashes());
				Destroy(navBall.collider);
				navBall.name = "RPMNB" + navBall.GetInstanceID();
				navBall.layer = drawingLayer;
				navBall.transform.position = Vector3.zero;
				navBall.transform.rotation = Quaternion.identity;
				navBall.transform.localRotation = Quaternion.identity;

				if (ballIsEmissive) {
					navBall.renderer.material.shader = Shader.Find("KSP/Emissive/Diffuse");
					navBall.renderer.material.SetTexture("_MainTex", horizonTex);
					navBall.renderer.material.SetTextureOffset("_Emissive", navBall.renderer.material.GetTextureOffset("_MainTex"));
					navBall.renderer.material.SetTexture("_Emissive", horizonTex);
					navBall.renderer.material.SetColor("_EmissiveColor", ballColorValue);
				} else {
					navBall.renderer.material.shader = Shader.Find("KSP/Unlit");
					navBall.renderer.material.mainTexture = horizonTex;
					navBall.renderer.material.color = ballColorValue;
				}
				navBall.renderer.material.SetFloat("_Opacity", ballOpacity);

				markerPrograde = BuildMarker(0, 2, progradeColorValue);
				markerRetrograde = BuildMarker(1, 2, progradeColorValue);
				markerManeuver = BuildMarker(2, 0, maneuverColorValue);
				markerManeuverMinus = BuildMarker(1, 2, maneuverColorValue);
				markerTarget = BuildMarker(2, 1, targetColorValue);
				markerTargetMinus = BuildMarker(2, 2, targetColorValue);
				markerNormal = BuildMarker(0, 0, normalColorValue);
				markerNormalMinus = BuildMarker(1, 0, normalColorValue);
				markerRadial = BuildMarker(1, 1, radialColorValue);
				markerRadialMinus = BuildMarker(0, 1, radialColorValue);

				markerDockingAlignment = BuildMarker(0, 2, dockingColorValue);

				// Non-moving parts...
				cameraBody = new GameObject();
				cameraBody.name = "RPMPFD" + cameraBody.GetInstanceID();
				cameraBody.layer = drawingLayer;
				ballCamera = cameraBody.AddComponent<Camera>();
				ballCamera.enabled = false;
				ballCamera.orthographic = true;
				ballCamera.clearFlags = CameraClearFlags.Nothing;
				ballCamera.eventMask = 0;
				ballCamera.farClipPlane = 3f;
				ballCamera.orthographicSize = cameraSpan;
				ballCamera.cullingMask = 1 << drawingLayer;
				ballCamera.clearFlags = CameraClearFlags.Depth;
				// -2,0,0 seems to get the orientation exactly as the ship.
				// But logically, forward is Z+, right?
				// Which means that 
				ballCamera.transform.position = new Vector3(0, 0, 2);
				ballCamera.transform.LookAt(Vector3.zero, Vector3.up);
				ballCamera.transform.position = new Vector3(cameraShift.x, cameraShift.y, 2);

				overlay = CreateSimplePlane("RPMPFDOverlay" + internalProp.propID, 1f, drawingLayer);
				overlay.layer = drawingLayer;
				overlay.transform.position = new Vector3(0, 0, 1.5f);
				overlay.renderer.material = overlayMaterial;
				overlay.transform.parent = cameraBody.transform;
				FaceCamera(overlay);

				if (headingMaterial != null) {
					heading = CreateSimplePlane("RPMPFDHeading" + internalProp.propID, 1f, drawingLayer);
					heading.layer = drawingLayer;
					heading.transform.position = new Vector3(headingBarPosition.x, headingBarPosition.y, headingAboveOverlay ? 1.55f : 1.45f);
					heading.transform.parent = cameraBody.transform;
					heading.transform.localScale = new Vector3(headingBarPosition.z, 0, headingBarPosition.w);
					heading.renderer.material = headingMaterial;
					heading.renderer.material.SetTextureScale("_MainTex", new Vector2(headingSpan, 1f));
					FaceCamera(heading);
				}

				ShowHide(false, navBall, cameraBody, overlay, heading);
				startupComplete = true;
			} catch {
				JUtil.AnnoyUser(this);
				throw;
			}
		}
            private void Update()
            {
                if (MapView.MapIsEnabled && map_renderer_ == null) {
                  map_renderer_ = MapView.MapCamera.gameObject.AddComponent<MapRenderer>();
                  map_renderer_.render_on_pre_cull = RenderTrajectories;
                }
                override_rsas_target_ = false;
                Vessel active_vessel = FlightGlobals.ActiveVessel;
                if (active_vessel != null &&
                !FlightGlobals.ActiveVessel.isEVA) {
                  if (navball_ == null) {
                navball_ = (NavBall)FindObjectOfType(typeof(NavBall));
                  }
                  if (compass_navball_texture_ == null) {
                compass_navball_texture_ =
                navball_.navBall.renderer.material.mainTexture;
                  }

                  if (navball_changed_) {
                // Texture the ball.
                navball_changed_ = false;
                if (!fix_navball_in_plotting_frame_ || !PluginRunning()) {
                  navball_.navBall.renderer.material.mainTexture =
                  compass_navball_texture_;
                } else if (first_selected_celestial_ == second_selected_celestial_) {
                  navball_.navBall.renderer.material.mainTexture =
                  inertial_navball_texture_;
                } else {
                  navball_.navBall.renderer.material.mainTexture =
                  barycentric_navball_texture_;
                }
                  }

                  if (PluginRunning() && fix_navball_in_plotting_frame_) {
                // Orient the ball.
                navball_.navBall.rotation =
                (UnityEngine.QuaternionD)navball_.attitudeGymbal *  // sic.
                (UnityEngine.QuaternionD)NavballOrientation(
                    plugin_,
                    transforms_,
                    (XYZ)Planetarium.fetch.Sun.position,
                    (XYZ)(Vector3d)active_vessel.ReferenceTransform.position);
                // TODO(egg): the navball should be independent from the frame of the
                // Frenet trihedron (seeing your body-centric velocity with a compass
                // navball like in stock makes sense, so does seeing your velocity in
                // any reference frame with the fixed stars navball), although the
                // Frenet trihedron should be in the same frame as the map view
                // trajectory.  Right now when in space the navball is always linked to
                // the frame of the Frenet trihedron and the trajectory.
                if (has_active_vessel_in_space() &&
                has_vessel(plugin_, active_vessel.id.ToString())) {
                  // Orient the Frenet trihedron.
                  // TODO(egg): just the tangent for now.
                  Vector3d prograde =
                  (Vector3d)VesselTangent(plugin_,
                                      active_vessel.id.ToString(),
                                      transforms_);
                  navball_.progradeVector.transform.localPosition =
                  (UnityEngine.QuaternionD)navball_.attitudeGymbal *
                  prograde * 0.05;
                  navball_.retrogradeVector.transform.localPosition =
                  -navball_.progradeVector.transform.localPosition;
                  // Make the autopilot target our Frenet trihedron.
                  // TODO(egg): just the tangent for now.
                  if (active_vessel.OnAutopilotUpdate.GetInvocationList()[0] !=
                  (Delegate)(FlightInputCallback)OverrideRSASTarget) {
                Log.Info("Prepending RSAS override");
                active_vessel.OnAutopilotUpdate =
                (FlightInputCallback)Delegate.Combine(
                    new FlightInputCallback(OverrideRSASTarget),
                    active_vessel.OnAutopilotUpdate);
                  }
                  if (active_vessel.Autopilot.Enabled) {
                override_rsas_target_ = true;
                switch (active_vessel.Autopilot.Mode) {
                  case VesselAutopilot.AutopilotMode.Prograde:
                rsas_target_ = prograde;
                break;
                  case VesselAutopilot.AutopilotMode.Retrograde:
                rsas_target_ = -prograde;
                break;
                  default:
                override_rsas_target_ = false;
                break;
                }
                  }
                }
                  }
                }
            }
 /*        public void FlapChange()
 {
     if (Flaps == null)
     {
         Flaps = new List<FlapAndSlatModel>();
         foreach (Part p in vessel.parts)
             foreach (PartModule m in p.Modules)
                 if (m is FlapAndSlatModel)
                     Flaps.Add(m as FlapAndSlatModel);
     }
     foreach (FlapAndSlatModel f in Flaps)
         if (f != null)
             FlapDeflect = f.Deployed.ToString();
         else
             Flaps.Remove(f);
 }*/
 private void GetNavball()
 {
     ball = FlightUIController.fetch.GetComponentInChildren<NavBall>();
 }
Example #36
0
 void highjackPurpleWaypoint()
 {
     //highjack the purple navball waypoint
     if (navball == null) navball = (NavBall)GameObject.FindObjectOfType(typeof(NavBall));
     if (navball != null)
     {
         if (navball.target != waypoint.transform)
         {
             defaultPurpleWaypoint = navball.target; //save the usual waypoint
             navball.target = waypoint.transform;
         }
     }
 }
        public override void onPartFixedUpdate()
        {
            _rendezvousRecalculationTimer += TimeWarp.deltaTime;

            if (((core.targetType == MechJebCore.TargetType.NONE) || (FlightGlobals.activeTarget != part.vessel)) && waypointHijacked)
            {
                navball.target = defaultPurpleWaypoint;
                waypointHijacked = false;
            }

            if (core.targetType != MechJebCore.TargetType.NONE)
            {
                if (!waypointHijacked)
                {
                    if (navball == null)
                    {
                        navball = (NavBall)GameObject.FindObjectOfType(typeof(NavBall));
                    }
                    defaultPurpleWaypoint = navball.target;

                    waypointHijacked = true;
                }
                navball.target = (core.targetType == MechJebCore.TargetType.VESSEL) ? core.targetVessel.transform : core.targetBody.transform;
            }

            if (Mode == UIMode.SYNC)
                PerformSyncPartLogic();

            UpdateVectors();

            if (_modeChanged)
            {
                windowPos = new Rect(windowPos.x, windowPos.y, 10, 10);
                _modeChanged = false;
            }
        }
 private void GetNavball()
 {
     if (HighLogic.LoadedSceneIsFlight)
         _navball = FlightUIController.fetch.GetComponentInChildren<NavBall>();
 }
        public void Start()
        {
            if (HighLogic.LoadedSceneIsEditor)
            {
                return;
            }

            try
            {
                // Parse bloody KSPField colors.
                if (!string.IsNullOrEmpty(backgroundColor))
                {
                    backgroundColorValue = ConfigNode.ParseColor32(backgroundColor);
                }
                if (!string.IsNullOrEmpty(progradeColor))
                {
                    progradeColorValue = ConfigNode.ParseColor32(progradeColor);
                }
                if (!string.IsNullOrEmpty(maneuverColor))
                {
                    maneuverColorValue = ConfigNode.ParseColor32(maneuverColor);
                }
                if (!string.IsNullOrEmpty(targetColor))
                {
                    targetColorValue = ConfigNode.ParseColor32(targetColor);
                }
                if (!string.IsNullOrEmpty(normalColor))
                {
                    normalColorValue = ConfigNode.ParseColor32(normalColor);
                }
                if (!string.IsNullOrEmpty(radialColor))
                {
                    radialColorValue = ConfigNode.ParseColor32(radialColor);
                }
                if (!string.IsNullOrEmpty(dockingColor))
                {
                    dockingColorValue = ConfigNode.ParseColor32(dockingColor);
                }

                Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader");

                stockNavBall = FlightUIController.fetch.GetComponentInChildren<NavBall>();

                // Non-moving parts...
                cameraBody = new GameObject();
                cameraBody.name = "RPMPFD" + cameraBody.GetInstanceID();
                cameraBody.layer = drawingLayer;

                Vector3 navBallPosition = new Vector3(0.0f, 0.0f, 1.5f);

                ballCamera = cameraBody.AddComponent<Camera>();
                ballCamera.enabled = false;
                ballCamera.orthographic = true;
                ballCamera.eventMask = 0;
                ballCamera.farClipPlane = 3f;
                ballCamera.orthographicSize = 1.0f;
                ballCamera.cullingMask = 1 << drawingLayer;
                ballCamera.clearFlags = CameraClearFlags.Depth;
                ballCamera.transparencySortMode = TransparencySortMode.Orthographic;
                ballCamera.transform.position = Vector3.zero;
                ballCamera.transform.LookAt(navBallPosition, Vector3.up);

                navBall = GameDatabase.Instance.GetModel(navBallModel.EnforceSlashes());
                if(navBall == null)
                {
                    JUtil.LogErrorMessage(this, "Failed to load navball model {0}", navBallModel);
                    // Early return here - if we don't even have a navball, this module is pointless.
                    return;
                }

                Destroy(navBall.collider);
                navBall.name = "RPMNB" + navBall.GetInstanceID();
                navBall.layer = drawingLayer;
                navBall.transform.parent = cameraBody.transform;
                navBall.transform.position = navBallPosition;
                navBall.renderer.material.shader = displayShader;
                Texture2D horizonTex = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false);
                if (horizonTex != null)
                {
                    navBall.renderer.material.mainTexture = horizonTex;
                }
                else
                {
                    JUtil.LogErrorMessage(this, "Failed to load horizon texture {0}", horizonTexture);
                }

                navBall.renderer.material.SetFloat("_Opacity", ballOpacity);

                startupComplete = true;
            }
            catch
            {
                JUtil.AnnoyUser(this);
                throw;
            }
        }
Example #40
0
    public void Start()
    {
        mTexDefault = GameDatabase.Instance.GetTexture("FinePrint/Textures/default", false);
        mTexPlane   = GameDatabase.Instance.GetTexture("FinePrint/Textures/plane", false);
        mTexRover   = GameDatabase.Instance.GetTexture("FinePrint/Textures/rover", false);

        if (mTexDefault == null)
        {
            mTexDefault = new Texture2D(16, 16);
            mTexDefault.SetPixels32(Enumerable.Repeat((Color32)Color.magenta, 16 * 16).ToArray());
            mTexDefault.Apply();
        }

        if (mTexPlane == null)
        {
            mTexPlane = new Texture2D(16, 16);
            mTexPlane.SetPixels32(Enumerable.Repeat((Color32)Color.magenta, 16 * 16).ToArray());
            mTexPlane.Apply();
        }

        if (mTexRover == null)
        {
            mTexRover = new Texture2D(16, 16);
            mTexRover.SetPixels32(Enumerable.Repeat((Color32)Color.magenta, 16 * 16).ToArray());
            mTexRover.Apply();
        }

        this.targetBody = Planetarium.fetch.Home;
        this.latitude   = 0.0;
        this.longitude  = 0.0;
        this.altitude   = 0.0;
        waypointOn      = false;

        //Get the Navball.
        GameObject navBall = GameObject.Find("NavBall");
        Transform  navBallVectorsPivotTransform = navBall.transform.FindChild("vectorsPivot");

        navBallBehaviour = navBall.GetComponent <NavBall>();

        //create alignment indicator game object
        indicator = new GameObject(name);
        Mesh       m          = new Mesh();
        MeshFilter meshFilter = indicator.AddComponent <MeshFilter>();

        indicator.AddComponent <MeshRenderer>();

        const float uvize = 1f;

        Vector3 p0 = new Vector3(-0.0125f, 0, 0.0125f);
        Vector3 p1 = new Vector3(0.0125f, 0, 0.0125f);
        Vector3 p2 = new Vector3(-0.0125f, 0, -0.0125f);
        Vector3 p3 = new Vector3(0.0125f, 0, -0.0125f);

        m.vertices = new[]
        {
            p0, p1, p2,
            p1, p3, p2
        };

        m.triangles = new[]
        {
            0, 1, 2,
            3, 4, 5
        };

        Vector2 uv1 = new Vector2(0, 0);
        Vector2 uv2 = new Vector2(uvize, uvize);
        Vector2 uv3 = new Vector2(0, uvize);
        Vector2 uv4 = new Vector2(uvize, 0);

        m.uv = new[] {
            uv1, uv4, uv3,
            uv4, uv2, uv3
        };

        m.RecalculateNormals();
        m.RecalculateBounds();
        m.Optimize();

        meshFilter.mesh = m;

        indicator.layer                   = 12;
        indicator.transform.parent        = navBallVectorsPivotTransform;
        indicator.transform.localPosition = Vector3.zero;
        indicator.transform.localRotation = Quaternion.Euler(90f, 180f, 0);

        indicator.renderer.material             = new Material(Shader.Find("Sprites/Default"));
        indicator.renderer.material.mainTexture = mTexDefault;
        indicator.renderer.material.SetColor("_Color", new Color(1.0f, 1.0f, 1.0f));

        indicator.SetActive(false);

        SetupNavWaypoint(Planetarium.fetch.Home, 0.0, -74.5, 1.0, "plane", new Color(0.0f, 1.0f, 0.0f));
        Deactivate();
    }
Example #41
0
        public void Start()
        {
            if (HighLogic.LoadedSceneIsEditor)
            {
                return;
            }

            try
            {
                // Parse bloody KSPField colors.
                if (!string.IsNullOrEmpty(backgroundColor))
                {
                    backgroundColorValue = ConfigNode.ParseColor32(backgroundColor);
                }
                if (!string.IsNullOrEmpty(progradeColor))
                {
                    progradeColorValue = ConfigNode.ParseColor32(progradeColor);
                }
                if (!string.IsNullOrEmpty(maneuverColor))
                {
                    maneuverColorValue = ConfigNode.ParseColor32(maneuverColor);
                }
                if (!string.IsNullOrEmpty(targetColor))
                {
                    targetColorValue = ConfigNode.ParseColor32(targetColor);
                }
                if (!string.IsNullOrEmpty(normalColor))
                {
                    normalColorValue = ConfigNode.ParseColor32(normalColor);
                }
                if (!string.IsNullOrEmpty(radialColor))
                {
                    radialColorValue = ConfigNode.ParseColor32(radialColor);
                }
                if (!string.IsNullOrEmpty(dockingColor))
                {
                    dockingColorValue = ConfigNode.ParseColor32(dockingColor);
                }
                if (!string.IsNullOrEmpty(waypointColor))
                {
                    waypointColorValue = ConfigNode.ParseColor32(waypointColor);
                }

                Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader");

                stockNavBall = FlightUIController.fetch.GetComponentInChildren <NavBall>();

                // Non-moving parts...
                cameraBody       = new GameObject();
                cameraBody.name  = "RPMPFD" + cameraBody.GetInstanceID();
                cameraBody.layer = drawingLayer;

                Vector3 navBallPosition = new Vector3(0.0f, 0.0f, 1.5f);

                ballCamera                      = cameraBody.AddComponent <Camera>();
                ballCamera.enabled              = false;
                ballCamera.orthographic         = true;
                ballCamera.eventMask            = 0;
                ballCamera.farClipPlane         = 3f;
                ballCamera.orthographicSize     = 1.0f;
                ballCamera.cullingMask          = 1 << drawingLayer;
                ballCamera.clearFlags           = CameraClearFlags.Depth;
                ballCamera.transparencySortMode = TransparencySortMode.Orthographic;
                ballCamera.transform.position   = Vector3.zero;
                ballCamera.transform.LookAt(navBallPosition, Vector3.up);

                navBall = GameDatabase.Instance.GetModel(navBallModel.EnforceSlashes());
                if (navBall == null)
                {
                    JUtil.LogErrorMessage(this, "Failed to load navball model {0}", navBallModel);
                    // Early return here - if we don't even have a navball, this module is pointless.
                    return;
                }

                Destroy(navBall.collider);
                navBall.name                     = "RPMNB" + navBall.GetInstanceID();
                navBall.layer                    = drawingLayer;
                navBall.transform.parent         = cameraBody.transform;
                navBall.transform.position       = navBallPosition;
                navBall.renderer.material.shader = displayShader;
                Texture2D horizonTex = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false);
                if (horizonTex != null)
                {
                    navBall.renderer.material.mainTexture = horizonTex;
                }
                else
                {
                    JUtil.LogErrorMessage(this, "Failed to load horizon texture {0}", horizonTexture);
                }

                navBall.renderer.material.SetFloat("_Opacity", ballOpacity);

                startupComplete = true;
            }
            catch
            {
                JUtil.AnnoyUser(this);
                throw;
            }
        }
Example #42
0
 /// <summary>
 /// Deactivate navball when exiting flight
 /// </summary>
 void deactiveNavBall()
 {
     //Deactivate navball when exiting interstellar space
     if (NavBallCreated == true && NewNavBallEnabled == true && FlightGlobals.ActiveVessel != null)
     {
         if (FlightGlobals.ActiveVessel.mainBody.name != StarSystem.CBDict["Sun"].name)
         {
             if (NavBall == null)
             {
                 NavBall = GameObject.Find("NavBall").GetComponent<NavBall>();
             }
             NewNavBall.renderer.enabled = false;
             NavBall.navBall.renderer.enabled = true;
             NewNavBallEnabled = false;
         }
     }
     if (NavBallCreated == true && NewNavBallEnabled == true && FlightGlobals.ActiveVessel == null)
     {
         NewNavBall.renderer.enabled = false;
         NewNavBallEnabled = false;
     }
 }
Example #43
0
	public void Start()
	{
        mTexDefault = Util.LoadTexture("default", 16, 16);
        mTexPlane = Util.LoadTexture("plane", 16, 16);
        mTexRover = Util.LoadTexture("rover", 16, 16);

        this.targetBody = Planetarium.fetch.Home;
        this.latitude = 0.0;
        this.longitude = 0.0;
        this.altitude = 0.0;
        waypointOn = false;

		//Get the Navball.
		GameObject navBall = GameObject.Find("NavBall");
		Transform navBallVectorsPivotTransform = navBall.transform.FindChild("vectorsPivot");
		navBallBehaviour = navBall.GetComponent<NavBall>();

		//create alignment indicator game object
        indicator = new GameObject(name);
        Mesh m = new Mesh();
        MeshFilter meshFilter = indicator.AddComponent<MeshFilter>();
        indicator.AddComponent<MeshRenderer>();

        const float uvize = 1f;

        Vector3 p0 = new Vector3(-0.0125f, 0, 0.0125f);
        Vector3 p1 = new Vector3(0.0125f, 0, 0.0125f);
        Vector3 p2 = new Vector3(-0.0125f, 0, -0.0125f);
        Vector3 p3 = new Vector3(0.0125f, 0, -0.0125f);

        m.vertices = new[]
		{
			p0, p1, p2,
			p1, p3, p2
		};

        m.triangles = new[]
		{
			0, 1, 2,
			3, 4, 5
		};

        Vector2 uv1 = new Vector2(0, 0);
        Vector2 uv2 = new Vector2(uvize, uvize);
        Vector2 uv3 = new Vector2(0, uvize);
        Vector2 uv4 = new Vector2(uvize, 0);

        m.uv = new[]{
			uv1, uv4, uv3,
			uv4, uv2, uv3
		};

        m.RecalculateNormals();
        m.RecalculateBounds();
        m.Optimize();

        meshFilter.mesh = m;

        indicator.layer = 12;
        indicator.transform.parent = navBallVectorsPivotTransform;
        indicator.transform.localPosition = Vector3.zero;
        indicator.transform.localRotation = Quaternion.Euler(90f, 180f, 0);

        indicator.renderer.material = new Material(Shader.Find("Sprites/Default"));
        indicator.renderer.material.mainTexture = mTexDefault;
        indicator.renderer.material.SetColor("_Color", new Color(1.0f, 1.0f, 1.0f));

        indicator.SetActive(false);

        SetupNavWaypoint(Planetarium.fetch.Home, 0.0, -74.5, 1.0, WaypointType.PLANE, new Color(0.0f, 1.0f, 0.0f));
        Deactivate();
	}
 /// <summary>
 /// Initializes a new instance of the <see cref="NavBallHelper"/> class.
 /// </summary>
 public NavBallHelper()
 {
     this.NavBall = GameObject.FindObjectOfType <NavBall>();
 }
        public void Start()
        {
            if (HighLogic.LoadedSceneIsEditor)
            {
                return;
            }

            try
            {
                // Parse bloody KSPField colors.
                if (!string.IsNullOrEmpty(backgroundColor))
                {
                    backgroundColorValue = ConfigNode.ParseColor32(backgroundColor);
                }
                if (!string.IsNullOrEmpty(progradeColor))
                {
                    progradeColorValue = ConfigNode.ParseColor32(progradeColor);
                }
                if (!string.IsNullOrEmpty(maneuverColor))
                {
                    maneuverColorValue = ConfigNode.ParseColor32(maneuverColor);
                }
                if (!string.IsNullOrEmpty(targetColor))
                {
                    targetColorValue = ConfigNode.ParseColor32(targetColor);
                }
                if (!string.IsNullOrEmpty(normalColor))
                {
                    normalColorValue = ConfigNode.ParseColor32(normalColor);
                }
                if (!string.IsNullOrEmpty(radialColor))
                {
                    radialColorValue = ConfigNode.ParseColor32(radialColor);
                }
                if (!string.IsNullOrEmpty(dockingColor))
                {
                    dockingColorValue = ConfigNode.ParseColor32(dockingColor);
                }

                Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader");

                // Ahaha, that's clever, does it work?
                stockNavBall = GameObject.Find("NavBall").GetComponent<NavBall>();
                // ...well, it does, but the result is bizarre,
                // apparently, because the stock BALL ITSELF IS MIRRORED.

                // Non-moving parts...
                cameraBody = new GameObject();
                cameraBody.name = "RPMPFD" + cameraBody.GetInstanceID();
                cameraBody.layer = drawingLayer;

                Vector3 navBallPosition = new Vector3(0.0f, 0.0f, 1.5f);

                ballCamera = cameraBody.AddComponent<Camera>();
                ballCamera.enabled = false;
                ballCamera.orthographic = true;
                ballCamera.eventMask = 0;
                ballCamera.farClipPlane = 3f;
                ballCamera.orthographicSize = 1.0f;
                ballCamera.cullingMask = 1 << drawingLayer;
                ballCamera.clearFlags = CameraClearFlags.Depth;
                ballCamera.transparencySortMode = TransparencySortMode.Orthographic;
                ballCamera.transform.position = Vector3.zero;
                ballCamera.transform.LookAt(navBallPosition, Vector3.up);

                navBall = GameDatabase.Instance.GetModel(navBallModel.EnforceSlashes());
                Destroy(navBall.collider);
                navBall.name = "RPMNB" + navBall.GetInstanceID();
                navBall.layer = drawingLayer;
                navBall.transform.parent = cameraBody.transform;
                navBall.transform.position = navBallPosition;
                navBall.renderer.material.shader = displayShader;
                Texture2D horizonTex = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false);
                if (horizonTex != null)
                {
                    navBall.renderer.material.mainTexture = horizonTex;
                }
                else
                {
                    JUtil.LogErrorMessage(this, "Failed to load horizon texture {0}", horizonTexture);
                }

                navBall.renderer.material.SetFloat("_Opacity", ballOpacity);

                // use the RPM comp's centralized database so we're not
                // repeatedly doing computation.
                comp = RasterPropMonitorComputer.Instantiate(this.part);
                // We don't really care about the text refresh rate, but the
                // PFD does care about data refresh rates.
                comp.UpdateRefreshRates(10000, 1);

                startupComplete = true;
            }
            catch
            {
                JUtil.AnnoyUser(this);
                throw;
            }
        }
            private void Update()
            {
                if (MapView.MapIsEnabled && map_renderer_ == null) {
                  map_renderer_ = MapView.MapCamera.gameObject.AddComponent<MapRenderer>();
                  map_renderer_.render_on_pre_cull = RenderTrajectories;
                }
                override_rsas_target_ = false;
                Vessel active_vessel = FlightGlobals.ActiveVessel;
                if (active_vessel != null &&
                !FlightGlobals.ActiveVessel.isEVA) {
                  if (navball_ == null) {
                navball_ = (NavBall)FindObjectOfType(typeof(NavBall));
                  }
                  if (compass_navball_texture_ == null) {
                compass_navball_texture_ =
                navball_.navBall.renderer.material.mainTexture;
                  }

                  if (navball_changed_) {
                // Texture the ball.
                navball_changed_ = false;
                // TODO(egg): switch over all frame types and have more navball textures
                // when more frames are available.
                if (!fix_navball_in_plotting_frame_ || !PluginRunning()) {
                  navball_.navBall.renderer.material.mainTexture =
                  compass_navball_texture_;
                } else if (plotting_frame_selector_.get().frame_type ==
                   ReferenceFrameSelector.FrameType.BODY_CENTRED_NON_ROTATING) {
                  navball_.navBall.renderer.material.mainTexture =
                  inertial_navball_texture_;
                } else {
                  navball_.navBall.renderer.material.mainTexture =
                  barycentric_navball_texture_;
                }
                  }

                  if (PluginRunning() && fix_navball_in_plotting_frame_) {
                // Orient the ball.
                navball_.navBall.rotation =
                (UnityEngine.QuaternionD)navball_.attitudeGymbal *  // sic.
                (UnityEngine.QuaternionD)plugin_.NavballOrientation(
                    (XYZ)Planetarium.fetch.Sun.position,
                    (XYZ)(Vector3d)active_vessel.ReferenceTransform.position);
                // TODO(egg): the navball should be independent from the frame of the
                // Frenet trihedron (seeing your body-centric velocity with a compass
                // navball like in stock makes sense, so does seeing your velocity in
                // any reference frame with the fixed stars navball), although the
                // Frenet trihedron should be in the same frame as the map view
                // trajectory.  Right now when in space the navball is always linked to
                // the frame of the Frenet trihedron and the trajectory.
                if (has_active_vessel_in_space() &&
                  plugin_.HasVessel(active_vessel.id.ToString())) {
                  // Orient the Frenet trihedron.
                  Vector3d prograde =
                  (Vector3d)plugin_.VesselTangent(active_vessel.id.ToString());
                  Vector3d radial =
                  (Vector3d)plugin_.VesselNormal(active_vessel.id.ToString());
                  // Yes, the astrodynamicist's normal is the mathematician's binormal.
                  // Don't ask.
                  Vector3d normal =
                  (Vector3d)plugin_.VesselBinormal(active_vessel.id.ToString());

                  navball_.progradeVector.transform.localPosition =
                  (UnityEngine.QuaternionD)navball_.attitudeGymbal *
                  prograde * 0.05;
                  navball_.radialInVector.transform.localPosition =
                  (UnityEngine.QuaternionD)navball_.attitudeGymbal *
                  radial * 0.05;
                  navball_.normalVector.transform.localPosition =
                  (UnityEngine.QuaternionD)navball_.attitudeGymbal *
                  normal * 0.05;
                  navball_.retrogradeVector.transform.localPosition =
                  -navball_.progradeVector.transform.localPosition;
                  navball_.radialOutVector.transform.localPosition =
                  -navball_.radialInVector.transform.localPosition;
                  navball_.antiNormalVector.transform.localPosition =
                  -navball_.normalVector.transform.localPosition;
                  // Make the autopilot target our Frenet trihedron.
                  if (active_vessel.OnAutopilotUpdate.GetInvocationList()[0] !=
                  (Delegate)(FlightInputCallback)OverrideRSASTarget) {
                Log.Info("Prepending RSAS override");
                active_vessel.OnAutopilotUpdate =
                (FlightInputCallback)Delegate.Combine(
                    new FlightInputCallback(OverrideRSASTarget),
                    active_vessel.OnAutopilotUpdate);
                  }
                  if (active_vessel.Autopilot.Enabled) {
                override_rsas_target_ = true;
                switch (active_vessel.Autopilot.Mode) {
                  case VesselAutopilot.AutopilotMode.Prograde:
                rsas_target_ = prograde;
                break;
                  case VesselAutopilot.AutopilotMode.Retrograde:
                rsas_target_ = -prograde;
                break;
                  case VesselAutopilot.AutopilotMode.RadialIn:
                rsas_target_ = radial;
                break;
                  case VesselAutopilot.AutopilotMode.RadialOut:
                rsas_target_ = -radial;
                break;
                  case VesselAutopilot.AutopilotMode.Normal:
                rsas_target_ = normal;
                break;
                  case VesselAutopilot.AutopilotMode.Antinormal:
                rsas_target_ = -normal;
                break;
                  default:
                override_rsas_target_ = false;
                break;
                }
                  }
                }
                  }
                }
            }