mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 12:14:27 -07:00
hp text customization, shrink hp bg border, hide hp when aiming there
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -43,9 +43,10 @@ public class MeatKitPlugin : BaseUnityPlugin
|
||||
|
||||
// BepInEx configuration
|
||||
//--- Health Counter ---//
|
||||
public static ConfigEntry<bool> cfgSolidifyHPText;
|
||||
public static ConfigEntry<bool> cfgHPHiddenWhenAiming;
|
||||
public static ConfigEntry<bool> cfgShowHPBackground;
|
||||
public static ConfigEntry<float> cfgHPBackgroundOpacity;
|
||||
public static ConfigEntry<HPTextType> cfgHPTextType;
|
||||
//--- Take and Hold Info ---//
|
||||
public static ConfigEntry<bool> cfgShowLPC;
|
||||
public static ConfigEntry<bool> 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<FistVR.FVRHealthBar>();
|
||||
if (healthCounter != null)
|
||||
{
|
||||
HPReadability.ImproveHPTextReadability(healthCounter.transform.GetChild(0).gameObject);
|
||||
|
||||
if (cfgHPHiddenWhenAiming.Value)
|
||||
healthCounter.gameObject.AddComponent<HPHideWhenAiming>();
|
||||
}
|
||||
|
||||
// TNH patches
|
||||
if (GameObject.Find("_GameManager") != null || FindObjectOfType<FistVR.TNH_Manager>() != 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<FistVR.FVRHealthBar>();
|
||||
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",
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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<FVRViveHand>();
|
||||
rightHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(0).GetComponent<FVRViveHand>();
|
||||
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
||||
|
||||
var gObjBG = gObjHUD.transform.Find("Background");
|
||||
if (gObjBG != null)
|
||||
background = gObjBG.GetComponent<RawImage>();
|
||||
|
||||
hudCollider = gObjHUD.AddComponent<BoxCollider>();
|
||||
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<LineRenderer>();
|
||||
//colliderRenderer.SetWidth(.005f, .005f);
|
||||
//colliderRenderer.SetColors(Color.blue, Color.blue);
|
||||
//colliderRenderer.positionCount = 8;
|
||||
|
||||
//// TESTING: beam from held weapons
|
||||
//gObjLeftLine = new GameObject();
|
||||
//leftHandLine = gObjLeftLine.AddComponent<LineRenderer>();
|
||||
//leftHandLine.positionCount = 2;
|
||||
//leftHandLine.SetWidth(.008f, .008f);
|
||||
//leftHandLine.SetColors(Color.blue, Color.blue);
|
||||
//gObjRightLine = new GameObject();
|
||||
//rightHandLine = gObjRightLine.AddComponent<LineRenderer>();
|
||||
//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<SosigWeapon>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4c5bf6246707f204db6b73a5d74267f8
|
||||
timeCreated: 1644787924
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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<Canvas>();
|
||||
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<RawImage>();
|
||||
gObjBG.transform.localScale = tranHPText[0].localScale;
|
||||
//gObjBG.transform.localRotation = Quaternion.identity;
|
||||
var rawImage = gObjBG.AddComponent<RawImage>();
|
||||
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<Text>().color = Color.white;
|
||||
// drop shadow
|
||||
var shadow = text.gameObject.AddComponent<Shadow>();
|
||||
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<Text>().color = Color.white;
|
||||
// drop shadow
|
||||
var shadow = text.gameObject.AddComponent<Shadow>();
|
||||
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<Text>().color = new Color(0, 0, 0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,11 @@ Get it on [Thunderstore](https://h3vr.thunderstore.io/package/muskit/TNH_Quality
|
||||
More visible HP counter<br/>
|
||||
<img src=preview/hp.png>
|
||||
|
||||
Token and hold counter on wrist<br/>
|
||||
<img src=preview/stats.png>
|
||||
Fading HP counter when aiming around it<br/>
|
||||
<img src=preview/aimhide.png>
|
||||
|
||||
Useful contextual game stats on radar hand<br/>
|
||||
<img src=preview/stats_new.png>
|
||||
|
||||
Numbered tokens at item stations<br/>
|
||||
<img src="preview/item station.png">
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
Reference in New Issue
Block a user