/// <summary> /// Initialize the renderable game objects for the HUD. /// </summary> /// <param name="screenWidth"></param> /// <param name="screenHeight"></param> void InitializeRenderables(RenderTexture screen) { float screenWidth = (float)screen.width; float screenHeight = (float)screen.height; Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader"); if (!string.IsNullOrEmpty(cameraTransform)) { cameraObject = new FlyingCamera(part, screen, hudCamera.aspect); cameraObject.PointCamera(cameraTransform, hudFov); } if (!string.IsNullOrEmpty(staticOverlay)) { Material overlayMaterial = new Material(displayShader); overlayMaterial.color = Color.white; Texture overlayTexture = GameDatabase.Instance.GetTexture(staticOverlay.EnforceSlashes(), false); overlayMaterial.mainTexture = overlayTexture; overlayMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayOverlay" + hudCamera.GetInstanceID(), screenWidth * 0.5f, drawingLayer); overlayMesh.transform.position = new Vector3(0, 0, 1.0f); overlayMesh.GetComponent <Renderer>().material = overlayMaterial; overlayMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, overlayMesh); } if (!string.IsNullOrEmpty(horizonTexture)) { Shader ladderShader = JUtil.LoadInternalShader("RPM-CroppedDisplayShader"); Material ladderMaterial = new Material(ladderShader); // _CropBound is in device normalized coordinates (-1 - +1) Vector4 cropBound = new Vector4(-horizonSize.x / screenWidth, -horizonSize.y / screenHeight, horizonSize.x / screenWidth, horizonSize.y / screenHeight); ladderMaterial.SetVector("_CropBound", cropBound); ladderMaterial.color = Color.white; ladderMaterial.mainTexture = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false); if (ladderMaterial.mainTexture != null) { float diagonal = horizonSize.magnitude / Mathf.Min(horizonSize.x, horizonSize.y) * 0.5f; Vector2 horizonDrawSize = diagonal * horizonSize; horizonTextureSize.x = 0.5f * (horizonTextureSize.x / ladderMaterial.mainTexture.width); horizonTextureSize.y = 0.5f * (horizonTextureSize.y / ladderMaterial.mainTexture.height); ladderMaterial.mainTexture.wrapMode = TextureWrapMode.Clamp; ladderMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayLadder" + hudCamera.GetInstanceID(), horizonDrawSize, new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); ladderMesh.transform.position = new Vector3(0, 0, 1.45f); ladderMesh.GetComponent <Renderer>().material = ladderMaterial; ladderMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, ladderMesh); if (progradeColorValue.a > 0.0f && showLadderPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; Rect texCoord; if (string.IsNullOrEmpty(ladderProgradeTexture)) { progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); texCoord = GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE); } else { Texture2D progradeTexture = GameDatabase.Instance.GetTexture(ladderProgradeTexture.EnforceSlashes(), false); if (progradeTexture == null) { JUtil.LogErrorMessage(this, "Failed to find ladder prograde texture \"{0}\".", ladderProgradeTexture); } progradeIconMaterial.mainTexture = progradeTexture; texCoord = new Rect(0.0f, 0.0f, 1.0f, 1.0f); } progradeIconMaterial.SetVector("_Color", progradeColorValue); progradeLadderIcon = JUtil.CreateSimplePlane("JSIHeadsUpDisplayLadderProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), texCoord, drawingLayer); progradeLadderIcon.transform.position = new Vector3(0.0f, 0.0f, 1.41f); progradeLadderIcon.GetComponent <Renderer>().material = progradeIconMaterial; progradeLadderIcon.transform.parent = cameraBody.transform; } } } if (!string.IsNullOrEmpty(headingBar)) { Material headingMaterial = new Material(displayShader); headingMaterial.color = Color.white; headingMaterial.mainTexture = GameDatabase.Instance.GetTexture(headingBar.EnforceSlashes(), false); if (headingMaterial.mainTexture != null) { headingBarTextureWidth = 0.5f * (headingBarWidth / (float)headingMaterial.mainTexture.width); headingMaterial.mainTexture.wrapMode = TextureWrapMode.Repeat; headingMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayHeading" + hudCamera.GetInstanceID(), new Vector2(headingBarPosition.z * 0.5f, headingBarPosition.w * 0.5f), new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); headingMesh.transform.position = new Vector3(headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth), 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.4f); headingMesh.GetComponent <Renderer>().material = headingMaterial; headingMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, headingMesh); if (progradeColorValue.a > 0.0f && showHeadingBarPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; Rect texCoord; if (string.IsNullOrEmpty(headingBarProgradeTexture)) { progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); texCoord = GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE); } else { Texture2D progradeTexture = GameDatabase.Instance.GetTexture(headingBarProgradeTexture.EnforceSlashes(), false); if (progradeTexture == null) { JUtil.LogErrorMessage(this, "Failed to find heading bar prograde texture \"{0}\".", headingBarProgradeTexture); } progradeIconMaterial.mainTexture = progradeTexture; texCoord = new Rect(0.0f, 0.0f, 1.0f, 1.0f); } progradeIconMaterial.SetVector("_Color", progradeColorValue); progradeHeadingIconOrigin = headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth); progradeHeadingIcon = JUtil.CreateSimplePlane("JSIHeadsUpDisplayHeadingProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), texCoord, drawingLayer); progradeHeadingIcon.transform.position = new Vector3(progradeHeadingIconOrigin, 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.35f); progradeHeadingIcon.GetComponent <Renderer>().material = progradeIconMaterial; progradeHeadingIcon.transform.parent = headingMesh.transform; } } } if (!string.IsNullOrEmpty(verticalBar)) { ConfigNode[] nodes = GameDatabase.Instance.GetConfigNodes("JSIHUD_VERTICAL_BAR"); string[] vBars = verticalBar.Split(';'); for (int i = 0; i < vBars.Length; ++i) { for (int j = 0; j < nodes.Length; ++j) { if (nodes[j].HasValue("name") && vBars[i].Trim() == nodes[j].GetValue("name")) { try { VerticalBar vb = new VerticalBar(nodes[j], screenWidth, screenHeight, drawingLayer, displayShader, cameraBody); verticalBars.Add(vb); } catch (Exception e) { JUtil.LogErrorMessage(this, "Error parsing JSIHUD_VERTICAL_BAR: {0}", e); } break; } } } } if (!string.IsNullOrEmpty(horizontalBar)) { ConfigNode[] nodes = GameDatabase.Instance.GetConfigNodes("JSIHUD_HORIZONTAL_BAR"); string[] hBars = horizontalBar.Split(';'); for (int i = 0; i < hBars.Length; ++i) { for (int j = 0; j < nodes.Length; ++j) { if (nodes[j].HasValue("name") && hBars[i].Trim() == nodes[j].GetValue("name")) { try { HorizontalBar hb = new HorizontalBar(nodes[j], screenWidth, screenHeight, drawingLayer, displayShader, cameraBody); horizontalBars.Add(hb); } catch (Exception e) { JUtil.LogErrorMessage(this, "Error parsing JSIHUD_HORIZONTAL_BAR: {0}", e); } break; } } } } }
/// <summary> /// Initialize the renderable game objects for the HUD. /// </summary> /// <param name="screenWidth"></param> /// <param name="screenHeight"></param> void InitializeRenderables(RenderTexture screen) { float screenWidth = (float)screen.width; float screenHeight = (float)screen.height; Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader"); if (!string.IsNullOrEmpty(cameraTransform)) { cameraObject = new FlyingCamera(part, screen, hudCamera.aspect); cameraObject.PointCamera(cameraTransform, hudFov); } if (!string.IsNullOrEmpty(staticOverlay)) { Material overlayMaterial = new Material(displayShader); overlayMaterial.color = Color.white; Texture overlayTexture = GameDatabase.Instance.GetTexture(staticOverlay.EnforceSlashes(), false); overlayMaterial.mainTexture = overlayTexture; overlayMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayOverlay" + hudCamera.GetInstanceID(), screenWidth * 0.5f, drawingLayer); overlayMesh.transform.position = new Vector3(0, 0, 1.0f); overlayMesh.renderer.material = overlayMaterial; overlayMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, overlayMesh); } if (!string.IsNullOrEmpty(horizonTexture)) { Shader ladderShader = JUtil.LoadInternalShader("RPM-CroppedDisplayShader"); Material ladderMaterial = new Material(ladderShader); // _CropBound is in device normalized coordinates (-1 - +1) Vector4 cropBound = new Vector4(-horizonSize.x / screenWidth, -horizonSize.y / screenHeight, horizonSize.x / screenWidth, horizonSize.y / screenHeight); ladderMaterial.SetVector("_CropBound", cropBound); ladderMaterial.color = Color.white; ladderMaterial.mainTexture = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false); if (ladderMaterial.mainTexture != null) { horizonTextureSize.x = 0.5f * (horizonTextureSize.x / ladderMaterial.mainTexture.width); horizonTextureSize.y = 0.5f * (horizonTextureSize.y / ladderMaterial.mainTexture.height); ladderMaterial.mainTexture.wrapMode = TextureWrapMode.Clamp; ladderMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayLadder" + hudCamera.GetInstanceID(), new Vector2(horizonSize.x * 0.5f, horizonSize.y * 0.5f), new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); ladderMesh.transform.position = new Vector3(0, 0, 1.4f); ladderMesh.renderer.material = ladderMaterial; ladderMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, ladderMesh); if (progradeColorValue.a > 0.0f && showLadderPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; Rect texCoord; if (string.IsNullOrEmpty(ladderProgradeTexture)) { progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); texCoord = GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE); } else { Texture2D progradeTexture = GameDatabase.Instance.GetTexture(ladderProgradeTexture.EnforceSlashes(), false); if (progradeTexture == null) { JUtil.LogErrorMessage(this, "Failed to find ladder prograde texture \"{0}\".", ladderProgradeTexture); } progradeIconMaterial.mainTexture = progradeTexture; texCoord = new Rect(0.0f, 0.0f, 1.0f, 1.0f); } progradeIconMaterial.SetVector("_Color", progradeColorValue); progradeLadderIcon = JUtil.CreateSimplePlane("JSIHeadsUpDisplayLadderProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), texCoord, drawingLayer); progradeLadderIcon.transform.position = new Vector3(0.0f, 0.0f, 1.35f); progradeLadderIcon.renderer.material = progradeIconMaterial; progradeLadderIcon.transform.parent = cameraBody.transform; } } } if (!string.IsNullOrEmpty(headingBar)) { Material headingMaterial = new Material(displayShader); headingMaterial.color = Color.white; headingMaterial.mainTexture = GameDatabase.Instance.GetTexture(headingBar.EnforceSlashes(), false); if (headingMaterial.mainTexture != null) { headingBarTextureWidth = 0.5f * (headingBarWidth / (float)headingMaterial.mainTexture.width); headingMaterial.mainTexture.wrapMode = TextureWrapMode.Repeat; headingMesh = JUtil.CreateSimplePlane("JSIHeadsUpDisplayHeading" + hudCamera.GetInstanceID(), new Vector2(headingBarPosition.z * 0.5f, headingBarPosition.w * 0.5f), new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); headingMesh.transform.position = new Vector3(headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth), 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.4f); headingMesh.renderer.material = headingMaterial; headingMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, headingMesh); if (progradeColorValue.a > 0.0f && showHeadingBarPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; Rect texCoord; if (string.IsNullOrEmpty(headingBarProgradeTexture)) { progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); texCoord = GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE); } else { Texture2D progradeTexture = GameDatabase.Instance.GetTexture(headingBarProgradeTexture.EnforceSlashes(), false); if (progradeTexture == null) { JUtil.LogErrorMessage(this, "Failed to find heading bar prograde texture \"{0}\".", headingBarProgradeTexture); } progradeIconMaterial.mainTexture = progradeTexture; texCoord = new Rect(0.0f, 0.0f, 1.0f, 1.0f); } progradeIconMaterial.SetVector("_Color", progradeColorValue); progradeHeadingIconOrigin = headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth); progradeHeadingIcon = JUtil.CreateSimplePlane("JSIHeadsUpDisplayHeadingProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), texCoord, drawingLayer); progradeHeadingIcon.transform.position = new Vector3(progradeHeadingIconOrigin, 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.35f); progradeHeadingIcon.renderer.material = progradeIconMaterial; progradeHeadingIcon.transform.parent = headingMesh.transform; } } } if (!string.IsNullOrEmpty(verticalBar)) { ConfigNode[] nodes = GameDatabase.Instance.GetConfigNodes("JSIHUD_VERTICAL_BAR"); string[] vBars = verticalBar.Split(';'); for (int i = 0; i < vBars.Length; ++i) { for (int j = 0; j < nodes.Length; ++j) { if (nodes[j].HasValue("name") && vBars[i].Trim() == nodes[j].GetValue("name")) { try { VerticalBar vb = new VerticalBar(nodes[j], screenWidth, screenHeight, drawingLayer, displayShader, cameraBody); verticalBars.Add(vb); } catch (Exception e) { JUtil.LogErrorMessage(this, "Error parsing JSIHUD_VERTICAL_BAR: {0}", e); } break; } } } } }
/// <summary> /// Initialize the renderable game objects for the HUD. /// </summary> /// <param name="screenWidth"></param> /// <param name="screenHeight"></param> void InitializeRenderables(float screenWidth, float screenHeight) { Shader displayShader = JUtil.LoadInternalShader("RPM-DisplayShader"); if (!string.IsNullOrEmpty(staticOverlay)) { Material overlayMaterial = new Material(displayShader); overlayMaterial.color = Color.white; Texture overlayTexture = GameDatabase.Instance.GetTexture(staticOverlay.EnforceSlashes(), false); overlayMaterial.mainTexture = overlayTexture; overlayMesh = RasterPropMonitor.CreateSimplePlane("JSIHeadsUpDisplayOverlay" + hudCamera.GetInstanceID(), screenWidth * 0.5f, drawingLayer); overlayMesh.transform.position = new Vector3(0, 0, 1.5f); overlayMesh.renderer.material = overlayMaterial; overlayMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, overlayMesh); } if (!string.IsNullOrEmpty(horizonTexture)) { Material ladderMaterial = new Material(displayShader); ladderMaterial.color = Color.white; ladderMaterial.mainTexture = GameDatabase.Instance.GetTexture(horizonTexture.EnforceSlashes(), false); if (ladderMaterial.mainTexture != null) { horizonTextureSize.x = 0.5f * (horizonTextureSize.x / ladderMaterial.mainTexture.width); horizonTextureSize.y = 0.5f * (horizonTextureSize.y / ladderMaterial.mainTexture.height); ladderMaterial.mainTexture.wrapMode = TextureWrapMode.Clamp; ladderMesh = RasterPropMonitor.CreateSimplePlane("JSIHeadsUpDisplayLadder" + hudCamera.GetInstanceID(), new Vector2(horizonSize.x * 0.5f, horizonSize.y * 0.5f), new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); ladderMesh.transform.position = new Vector3(0, 0, 1.5f); ladderMesh.renderer.material = ladderMaterial; ladderMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, ladderMesh); if (progradeColorValue.a > 0.0f && showLadderPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); progradeLadderIcon = RasterPropMonitor.CreateSimplePlane("JSIHeadsUpDisplayLadderProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE), drawingLayer); progradeLadderIcon.transform.position = new Vector3(0.0f, 0.0f, 1.5f); progradeLadderIcon.renderer.material = progradeIconMaterial; progradeLadderIcon.transform.parent = cameraBody.transform; MeshFilter meshFilter = progradeLadderIcon.GetComponent<MeshFilter>(); meshFilter.mesh.colors = new[] { progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue }; } } } if (!string.IsNullOrEmpty(headingBar)) { Material headingMaterial = new Material(displayShader); headingMaterial.color = Color.white; headingMaterial.mainTexture = GameDatabase.Instance.GetTexture(headingBar.EnforceSlashes(), false); if (headingMaterial.mainTexture != null) { headingBarTextureWidth = 0.5f * (headingBarWidth / (float)headingMaterial.mainTexture.width); headingMaterial.mainTexture.wrapMode = TextureWrapMode.Repeat; headingMesh = RasterPropMonitor.CreateSimplePlane("JSIHeadsUpDisplayHeading" + hudCamera.GetInstanceID(), new Vector2(headingBarPosition.z * 0.5f, headingBarPosition.w * 0.5f), new Rect(0.0f, 0.0f, 1.0f, 1.0f), drawingLayer); headingMesh.transform.position = new Vector3(headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth), 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.5f); headingMesh.renderer.material = headingMaterial; headingMesh.transform.parent = cameraBody.transform; JUtil.ShowHide(false, headingMesh); if (progradeColorValue.a > 0.0f && showHeadingBarPrograde) { Material progradeIconMaterial = new Material(displayShader); progradeIconMaterial.color = Color.white; progradeIconMaterial.mainTexture = JUtil.GetGizmoTexture(); progradeHeadingIconOrigin = headingBarPosition.x + 0.5f * (headingBarPosition.z - screenWidth); progradeHeadingIcon = RasterPropMonitor.CreateSimplePlane("JSIHeadsUpDisplayHeadingProgradeIcon" + hudCamera.GetInstanceID(), new Vector2(iconPixelSize * 0.5f, iconPixelSize * 0.5f), GizmoIcons.GetIconLocation(GizmoIcons.IconType.PROGRADE), drawingLayer); progradeHeadingIcon.transform.position = new Vector3(progradeHeadingIconOrigin, 0.5f * (screenHeight - headingBarPosition.w) - headingBarPosition.y, 1.5f); progradeHeadingIcon.renderer.material = progradeIconMaterial; progradeHeadingIcon.transform.parent = headingMesh.transform; MeshFilter meshFilter = progradeHeadingIcon.GetComponent<MeshFilter>(); meshFilter.mesh.colors = new[] { progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue, progradeColorValue }; } } } if (!string.IsNullOrEmpty(verticalBar)) { ConfigNode[] nodes = GameDatabase.Instance.GetConfigNodes("JSIHUD_VERTICAL_BAR"); string[] vBars = verticalBar.Split(';'); for (int i = 0; i < vBars.Length; ++i) { for (int j = 0; j < nodes.Length; ++j) { if (nodes[j].HasValue("name") && vBars[i].Trim() == nodes[j].GetValue("name")) { try { VerticalBar vb = new VerticalBar(nodes[j], screenWidth, screenHeight, drawingLayer, displayShader, cameraBody); verticalBars.Add(vb); } catch (Exception e) { JUtil.LogErrorMessage(this, "Error parsing JSIHUD_VERTICAL_BAR: {0}", e); } break; } } } } }