diff --git a/Assets/MeatKit/BuildProfile.asset b/Assets/MeatKit/BuildProfile.asset index bb87143..2bc67bf 100644 --- a/Assets/MeatKit/BuildProfile.asset +++ b/Assets/MeatKit/BuildProfile.asset @@ -13,7 +13,7 @@ MonoBehaviour: m_EditorClassIdentifier: PackageName: TNH_Quality_of_Life_Improvements Author: muskit - Version: 1.1.3 + Version: 1.2.0 Icon: {fileID: 2800000, guid: 785b7946398f5314b95bf593d2d77d67, type: 3} ReadMe: {fileID: 102900000, guid: ab1d6dea017447a48ac348db588a6f35, type: 3} WebsiteURL: https://github.com/muskit/TNH-Quality-of-Life-Improvements diff --git a/Assets/MeatKit/MeatKitPlugin.cs b/Assets/MeatKit/MeatKitPlugin.cs index ed9c9e6..c34dd63 100644 --- a/Assets/MeatKit/MeatKitPlugin.cs +++ b/Assets/MeatKit/MeatKitPlugin.cs @@ -43,9 +43,10 @@ public class MeatKitPlugin : BaseUnityPlugin // BepInEx configuration //--- Health Counter ---// - public static ConfigEntry cfgSolidifyHPText; + public static ConfigEntry cfgHPHiddenWhenAiming; public static ConfigEntry cfgShowHPBackground; public static ConfigEntry cfgHPBackgroundOpacity; + public static ConfigEntry cfgHPTextType; //--- Take and Hold Info ---// public static ConfigEntry cfgShowLPC; public static ConfigEntry cfgInfoFollowCamera; @@ -68,6 +69,20 @@ public class MeatKitPlugin : BaseUnityPlugin private void SceneChanged(Scene from, Scene to) { + GetFonts(); + playerCamera = GameObject.FindGameObjectWithTag("MainCamera"); + + // apply health counter tweaks globally + var healthCounter = FindObjectOfType(); + if (healthCounter != null) + { + HPReadability.ImproveHPTextReadability(healthCounter.transform.GetChild(0).gameObject); + + if (cfgHPHiddenWhenAiming.Value) + healthCounter.gameObject.AddComponent(); + } + + // TNH patches if (GameObject.Find("_GameManager") != null || FindObjectOfType() != null) { Logger.LogInfo("We are in a TNH game!"); @@ -78,18 +93,6 @@ public class MeatKitPlugin : BaseUnityPlugin Logger.LogInfo("We are NOT in a TNH game!"); Destroy(instance); } - - playerCamera = GameObject.FindGameObjectWithTag("MainCamera"); - - // apply health readability globally - var healthCounter = FindObjectOfType(); - if (healthCounter != null) - { - if (cfgShowHPBackground.Value || cfgSolidifyHPText.Value) - HPReadability.ImproveHPTextReadability(healthCounter.transform.GetChild(0).gameObject); - } - - GetFonts(); } // called on scene change, find fonts from game if they're not set @@ -140,6 +143,10 @@ public class MeatKitPlugin : BaseUnityPlugin // setup configuration //--- Health Counter ---// + cfgHPHiddenWhenAiming = Config.Bind("Health Counter", + "Hide HP Counter When Aiming", + true, + "While aiming around the health counter in view, hide it."); cfgShowHPBackground = Config.Bind("Health Counter", "Background enabled", true, @@ -148,10 +155,12 @@ public class MeatKitPlugin : BaseUnityPlugin "Background opacity", 0.74f, "Set opacity of health text's background (if enabled)."); - cfgSolidifyHPText = Config.Bind("Health Counter", - "Solidify HP text", - true, - "Set opacity of HP text to full and give it a shadow."); + cfgHPTextType = Config.Bind("Health Counter", + "HP Text Type", + HPTextType.Solidify, + "Solidify: Set text to full opacity and give it a drop shadow\n" + + "Untouched: Leave text untouched\n" + + "Hidden: Hide health counter completely (will hide background if enabled)"); //--- Take and Hold Info ---// cfgShowLPC = Config.Bind("Take and Hold Info", "Show Player Count in Online Leaderboards", diff --git a/Assets/README.md b/Assets/README.md index 024400c..df70eb7 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -20,6 +20,11 @@ Toggle and customize these features in your mod manager's *Config editor*. For any issues/ideas, please create an issue at the GitHub repository (linked on Thunderstore page). ## Changelog +**1.2.0** +* HP counter text can now be hidden completely +* Added HP counter fading when pointing a firearm towards it, allowing better visiblity +* Shrunk borders of health counter's background + 1.1.3 * [TNH] Fixed wrist stats still trying to look at the camera in the game over area, resulting in weird rotations diff --git a/Assets/_Scripts/HPHideWhenAiming.cs b/Assets/_Scripts/HPHideWhenAiming.cs new file mode 100644 index 0000000..e29e5f5 --- /dev/null +++ b/Assets/_Scripts/HPHideWhenAiming.cs @@ -0,0 +1,127 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using FistVR; + +// To be attached to FVRHealthBar object +public class HPHideWhenAiming : MonoBehaviour { + CanvasGroup canvasGroup; + + GameObject gObjHUD; + RawImage background; + + FVRViveHand leftHand; + FVRViveHand rightHand; + + BoxCollider hudCollider; + GameObject gObjLeftLine; + GameObject gObjRightLine; + LineRenderer leftHandLine; + LineRenderer rightHandLine; + + //// Testing renderers + //GameObject gObjColliderRenderer; + //LineRenderer colliderRenderer; + + // Use this for initialization + void Start() { + gObjHUD = transform.GetChild(0).gameObject; + leftHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(1).GetComponent(); + rightHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(0).GetComponent(); + canvasGroup = gameObject.AddComponent(); + + var gObjBG = gObjHUD.transform.Find("Background"); + if (gObjBG != null) + background = gObjBG.GetComponent(); + + hudCollider = gObjHUD.AddComponent(); + hudCollider.isTrigger = true; + hudCollider.gameObject.layer = LayerMask.NameToLayer("UI"); + hudCollider.size = new Vector3(40, 25, .01f); + + //// TESTING: collider visuals + //gObjColliderRenderer = new GameObject(); + //gObjColliderRenderer.transform.SetParent(hudCollider.transform, false); + //colliderRenderer = gObjColliderRenderer.AddComponent(); + //colliderRenderer.SetWidth(.005f, .005f); + //colliderRenderer.SetColors(Color.blue, Color.blue); + //colliderRenderer.positionCount = 8; + + //// TESTING: beam from held weapons + //gObjLeftLine = new GameObject(); + //leftHandLine = gObjLeftLine.AddComponent(); + //leftHandLine.positionCount = 2; + //leftHandLine.SetWidth(.008f, .008f); + //leftHandLine.SetColors(Color.blue, Color.blue); + //gObjRightLine = new GameObject(); + //rightHandLine = gObjRightLine.AddComponent(); + //rightHandLine.positionCount = 2; + //rightHandLine.SetWidth(.008f, .008f); + //rightHandLine.SetColors(Color.blue, Color.blue); + } + + void FixedUpdate() + { + FVRInteractiveObject[] objs = { leftHand.CurrentInteractable, rightHand.CurrentInteractable }; + LineRenderer[] lines = { leftHandLine, rightHandLine }; + + bool rayHit = false; + + for (int i = 0; i < 2; ++i) + { + Transform transMuzzle; + if (objs[i] is FVRFireArm) + { + var firearm = objs[i] as FVRFireArm; + transMuzzle = firearm.CurrentMuzzle; + } + else if (objs[i] is SosigWeaponPlayerInterface) + { + var playerInterface = objs[i] as SosigWeaponPlayerInterface; + var sosigWeapon = playerInterface.gameObject.GetComponent(); + transMuzzle = sosigWeapon.Muzzle; + } + else // not a recognized weapon, don't do anything + continue; + + // TESTING: draw beam from held wpn muzzle + //Vector3[] beamPos = { transMuzzle.position, transMuzzle.position + 5 * transMuzzle.forward }; + //lines[i].SetPositions(beamPos); + + RaycastHit hitInfo; + if (hudCollider.Raycast(new Ray(transMuzzle.position, transMuzzle.forward), out hitInfo, 20) || + hudCollider.Raycast(new Ray(transMuzzle.position, -transMuzzle.forward), out hitInfo, 20)) + rayHit = true; + } + + if (rayHit) + { + canvasGroup.alpha = 0.1f; + if (background != null) + background.enabled = false; + } + else + { + canvasGroup.alpha = 1f; + if (background != null) + background.enabled = true; + } + + // TESTING: draw the collider + //var trans = hudCollider.transform; + //var min = hudCollider.center - hudCollider.size * 0.5f; + //var max = hudCollider.center + hudCollider.size * 0.5f; + //Vector3[] points = { + // trans.TransformPoint(new Vector3(min.x, min.y, min.z)), + // trans.TransformPoint(new Vector3(min.x, min.y, max.z)), + // trans.TransformPoint(new Vector3(min.x, max.y, min.z)), + // trans.TransformPoint(new Vector3(min.x, max.y, max.z)), + // trans.TransformPoint(new Vector3(max.x, min.y, min.z)), + // trans.TransformPoint(new Vector3(max.x, min.y, max.z)), + // trans.TransformPoint(new Vector3(max.x, max.y, min.z)), + // trans.TransformPoint(new Vector3(max.x, max.y, max.z)) + //}; + //colliderRenderer.SetPositions(points); + } +} diff --git a/Assets/_Scripts/HPHideWhenAiming.cs.meta b/Assets/_Scripts/HPHideWhenAiming.cs.meta new file mode 100644 index 0000000..62cee2a --- /dev/null +++ b/Assets/_Scripts/HPHideWhenAiming.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c5bf6246707f204db6b73a5d74267f8 +timeCreated: 1644787924 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/HPReadability.cs b/Assets/_Scripts/HPReadability.cs index d49d968..1a072ee 100644 --- a/Assets/_Scripts/HPReadability.cs +++ b/Assets/_Scripts/HPReadability.cs @@ -3,42 +3,62 @@ using UnityEngine.UI; namespace TNHQoLImprovements { + public enum HPTextType + { + Solidify, Untouched, Hidden + } + public static class HPReadability { public static void ImproveHPTextReadability(GameObject gObjHUD) { var canvas = gObjHUD.GetComponent(); - var gObjBG = new GameObject(); Transform[] tranHPText = { - gObjHUD.transform.Find("Label_Title (1)"), - gObjHUD.transform.Find("Label_Title") + gObjHUD.transform.Find("Label_Title (1)"), // header + gObjHUD.transform.Find("Label_Title") // HP number }; - // apply background - if (MeatKitPlugin.cfgShowHPBackground.Value) + // apply background only if hp text type is not "Hidden" + if (MeatKitPlugin.cfgShowHPBackground.Value && + MeatKitPlugin.cfgHPTextType.Value != HPTextType.Hidden) { - gObjBG.transform.parent = gObjHUD.transform; + var gObjBG = new GameObject(); + gObjBG.name = "Background"; + gObjBG.transform.SetParent(gObjHUD.transform, false); gObjBG.transform.SetSiblingIndex(0); gObjBG.transform.localPosition = new Vector3(0, 1, 0); - gObjBG.transform.localRotation = Quaternion.identity; - gObjBG.transform.localScale = tranHPText[0].localScale; - var rawImage = gObjBG.AddComponent(); + gObjBG.transform.localScale = tranHPText[0].localScale; + //gObjBG.transform.localRotation = Quaternion.identity; + var rawImage = gObjBG.AddComponent(); rawImage.color = new Color(0, 0, 0, MeatKitPlugin.cfgHPBackgroundOpacity.Value); - rawImage.rectTransform.SetWidth(100); - rawImage.rectTransform.SetHeight(52); - } - if (MeatKitPlugin.cfgSolidifyHPText.Value) - { - foreach (var text in tranHPText) - { - // full alpha - text.GetComponent().color = Color.white; - // drop shadow - var shadow = text.gameObject.AddComponent(); - shadow.effectColor = new Color(0, 0, 0, .95f); - shadow.effectDistance = new Vector2(0.5f, -0.5f); - } + rawImage.rectTransform.SetWidth(85); + rawImage.rectTransform.SetHeight(44); } + + // set text type + if (MeatKitPlugin.cfgHPTextType.Value == HPTextType.Untouched) + return; + + switch (MeatKitPlugin.cfgHPTextType.Value) + { + case HPTextType.Solidify: + foreach (var text in tranHPText) + { + // full alpha + text.GetComponent().color = Color.white; + // drop shadow + var shadow = text.gameObject.AddComponent(); + shadow.effectColor = new Color(0, 0, 0, .95f); + shadow.effectDistance = new Vector2(0.5f, -0.5f); + } + break; + case HPTextType.Hidden: + foreach (var text in tranHPText) + { + text.GetComponent().color = new Color(0, 0, 0, 0); + } + break; + } } } } diff --git a/README.md b/README.md index 2f22206..1776660 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,11 @@ Get it on [Thunderstore](https://h3vr.thunderstore.io/package/muskit/TNH_Quality More visible HP counter
-Token and hold counter on wrist
- +Fading HP counter when aiming around it
+ + +Useful contextual game stats on radar hand
+ Numbered tokens at item stations
diff --git a/preview/aimhide.png b/preview/aimhide.png new file mode 100644 index 0000000..540b31a Binary files /dev/null and b/preview/aimhide.png differ diff --git a/preview/stats_new.png b/preview/stats_new.png new file mode 100644 index 0000000..a3b4a99 Binary files /dev/null and b/preview/stats_new.png differ