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); } }
/// <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; } }
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"); }
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>(); } }
/// <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>(); } }
public void Start() { if (HighLogic.LoadedSceneIsEditor) { return; } stockNavball = FindObjectOfType <NavBall>(); myNavballTrans = part.transform.FindRecursive(NavBallName); }
internal void Update() { if (navBall == null) { // Get a pointer to the navball navBall = GameObject.Find("NavBall"); ball = navBall.GetComponent <NavBall>(); } }
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); } }
/// <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); } } } } }
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; } } }
/// <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; } } }
/// <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; } } }
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; }
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); } }
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); }
/// <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; }
/// <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; } }
/** * 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; } } }
/// <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; } }
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"); }
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>(); }
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; } }
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(); }
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; } }
/// <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; } }
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; } } } } } }