mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 20:24:26 -07:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 611f074b73 | |||
| 6cc32af15d | |||
| b87db514a5 | |||
| 73d8a5b89d | |||
| cf4b2847be |
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"omnisharp.useModernNet": false
|
||||||
|
}
|
||||||
Generated
+1
-1
@@ -13,7 +13,7 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
PackageName: TNH_Quality_of_Life_Improvements
|
PackageName: TNH_Quality_of_Life_Improvements
|
||||||
Author: muskit
|
Author: muskit
|
||||||
Version: 1.2.4
|
Version: 1.2.5
|
||||||
Icon: {fileID: 2800000, guid: af542f3f6d6914f4e96d0326e8b296cc, type: 3}
|
Icon: {fileID: 2800000, guid: af542f3f6d6914f4e96d0326e8b296cc, type: 3}
|
||||||
ReadMe: {fileID: 102900000, guid: efa2d6091ed77bd4b879a74bd81d6cbc, type: 3}
|
ReadMe: {fileID: 102900000, guid: efa2d6091ed77bd4b879a74bd81d6cbc, type: 3}
|
||||||
WebsiteURL: https://github.com/muskit/TNH-Quality-of-Life-Improvements
|
WebsiteURL: https://github.com/muskit/TNH-Quality-of-Life-Improvements
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public static AssetBundle bundle;
|
|||||||
public static ConfigEntry<HealthExpireIndicationType> cfgHealthCrystalIndicator;
|
public static ConfigEntry<HealthExpireIndicationType> cfgHealthCrystalIndicator;
|
||||||
|
|
||||||
// Take and Hold modifications
|
// Take and Hold modifications
|
||||||
private static InPlay instance;
|
private static InPlay playInstance;
|
||||||
|
|
||||||
// Searching for old leaderboards player count mod to disable
|
// Searching for old leaderboards player count mod to disable
|
||||||
private float lpcSearchTime;
|
private float lpcSearchTime;
|
||||||
@@ -85,26 +85,38 @@ public static AssetBundle bundle;
|
|||||||
|
|
||||||
private void SceneChanged(Scene from, Scene to)
|
private void SceneChanged(Scene from, Scene to)
|
||||||
{
|
{
|
||||||
StartCoroutine("SceneChangedCoRoutine");
|
StartCoroutine("SceneChangedCoroutine");
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerator SceneChangedCoRoutine()
|
private IEnumerator SceneChangedCoroutine()
|
||||||
{
|
{
|
||||||
// grab H3VR objects
|
Destroy(playInstance);
|
||||||
playerCamera = null;
|
for (int i = 0; i < 11; ++i)
|
||||||
hpDisplay = null;
|
|
||||||
while (playerCamera == null)
|
|
||||||
{
|
{
|
||||||
playerCamera = GameObject.FindGameObjectWithTag("MainCamera");
|
// TNH patches
|
||||||
hpDisplay = FindObjectOfType<FVRHealthBar>();
|
if (GameObject.Find("_GameManager") != null || FindObjectOfType<TNH_Manager>() != null)
|
||||||
yield return null;
|
{
|
||||||
}
|
Logger.LogInfo("We are in a TNH game!");
|
||||||
|
playInstance = new GameObject().AddComponent<InPlay>();
|
||||||
|
playerCamera = GameObject.FindGameObjectWithTag("MainCamera");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogInfo(String.Format("Couldn't find a TNH game. Trying again...({0}/10)", i+1));
|
||||||
|
yield return new WaitForEndOfFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---- MAINCAMERA FOUND SIGNIFIES THAT ESSENTIAL GAME OBJECTS HAVE LOADED IN ---- //
|
if (playInstance == null)
|
||||||
|
{
|
||||||
// find Agency font
|
Logger.LogInfo("We are NOT in a TNH game!");
|
||||||
GetFonts();
|
}
|
||||||
|
|
||||||
|
// setup non-TNH specific static objects
|
||||||
|
// running AFTER searching for TNH_Manager ensures we have everything initialized
|
||||||
|
playerCamera = GameObject.FindGameObjectWithTag("MainCamera");
|
||||||
|
hpDisplay = FindObjectOfType<FVRHealthBar>();
|
||||||
// apply health counter tweaks globally
|
// apply health counter tweaks globally
|
||||||
if (hpDisplay != null)
|
if (hpDisplay != null)
|
||||||
{
|
{
|
||||||
@@ -119,18 +131,8 @@ public static AssetBundle bundle;
|
|||||||
{
|
{
|
||||||
WristMenuAPI.Buttons.Remove(wmbHPToggle);
|
WristMenuAPI.Buttons.Remove(wmbHPToggle);
|
||||||
}
|
}
|
||||||
|
GetFonts();
|
||||||
if (GameObject.Find("_GameManager") != null || FindObjectOfType<TNH_Manager>() != null)
|
}
|
||||||
{
|
|
||||||
Logger.LogInfo("We are in a TNH game!");
|
|
||||||
instance = new GameObject().AddComponent<InPlay>();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Logger.LogInfo("We are NOT in a TNH game!");
|
|
||||||
Destroy(instance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// called on scene change, find fonts from game if they're not set
|
// called on scene change, find fonts from game if they're not set
|
||||||
private void GetFonts()
|
private void GetFonts()
|
||||||
@@ -273,7 +275,7 @@ public static AssetBundle bundle;
|
|||||||
|
|
||||||
// stick stats to hand after game over
|
// stick stats to hand after game over
|
||||||
if (cfgShowHolds.Value || cfgShowTokens.Value)
|
if (cfgShowHolds.Value || cfgShowTokens.Value)
|
||||||
InPlay.Patch(harmony);
|
TNHInfo.Patch(harmony);
|
||||||
|
|
||||||
// show numerical representation of shop values
|
// show numerical representation of shop values
|
||||||
if (cfgShowNumbersAtShop.Value)
|
if (cfgShowNumbersAtShop.Value)
|
||||||
@@ -283,7 +285,9 @@ public static AssetBundle bundle;
|
|||||||
// player tokens
|
// player tokens
|
||||||
ShopTokenPatch.Patch(harmony);
|
ShopTokenPatch.Patch(harmony);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
Logger.LogInfo("Successfully ran patches!");
|
||||||
|
}
|
||||||
|
|
||||||
private void ToggleHPVisibility(object sender, ButtonClickEventArgs args)
|
private void ToggleHPVisibility(object sender, ButtonClickEventArgs args)
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-1
@@ -5,8 +5,9 @@ And... wait, which hold are you on again?
|
|||||||
**This mod adds quality of life improvements to the *Take and Hold* experience that help with these questions, and then some.**
|
**This mod adds quality of life improvements to the *Take and Hold* experience that help with these questions, and then some.**
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
* Health counter toggle
|
||||||
* Better health counter visibility
|
* Better health counter visibility
|
||||||
* Health counter fade when aiming around it
|
* Health counter fade/hide when aiming around it
|
||||||
* Token, hold, and wave counter on radar hand
|
* Token, hold, and wave counter on radar hand
|
||||||
* Player count for online leaderboards; see how you stack up!
|
* Player count for online leaderboards; see how you stack up!
|
||||||
* Disabled if [*TakeAndHoldTweaker*](https://h3vr.thunderstore.io/package/devyndamonster/TakeAndHoldTweaker/) is installed
|
* Disabled if [*TakeAndHoldTweaker*](https://h3vr.thunderstore.io/package/devyndamonster/TakeAndHoldTweaker/) is installed
|
||||||
@@ -21,6 +22,9 @@ 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).
|
For any issues/ideas, please create an issue at the GitHub repository (linked on Thunderstore page).
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
1.2.5
|
||||||
|
* [TNH] Change initialization approach to cover errors in both Atlas/WurstMod-based maps
|
||||||
|
|
||||||
1.2.4
|
1.2.4
|
||||||
* [TNH] Fix errors occurring in Atlas-based maps
|
* [TNH] Fix errors occurring in Atlas-based maps
|
||||||
* Update MeatKit (now on Unity 5.6.7f1!)
|
* Update MeatKit (now on Unity 5.6.7f1!)
|
||||||
|
|||||||
Generated
+9
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a7e0925cb0a2d20488bcb5d230cf74f7
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1690792321
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using System.Collections;
|
using UnityEngine;
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using FistVR;
|
using FistVR;
|
||||||
|
|
||||||
// To be attached to FVRHealthBar object
|
// To be attached to FVRHealthBar object
|
||||||
public class HPHideWhenAiming : MonoBehaviour {
|
public class HPHideWhenAiming : MonoBehaviour
|
||||||
|
{
|
||||||
CanvasGroup canvasGroup;
|
CanvasGroup canvasGroup;
|
||||||
|
|
||||||
GameObject gObjHUD;
|
GameObject gObjHUD;
|
||||||
@@ -25,7 +24,8 @@ public class HPHideWhenAiming : MonoBehaviour {
|
|||||||
//LineRenderer colliderRenderer;
|
//LineRenderer colliderRenderer;
|
||||||
|
|
||||||
// Use this for initialization
|
// Use this for initialization
|
||||||
void Start() {
|
void Start()
|
||||||
|
{
|
||||||
gObjHUD = transform.GetChild(0).gameObject;
|
gObjHUD = transform.GetChild(0).gameObject;
|
||||||
leftHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(1).GetComponent<FVRViveHand>();
|
leftHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(1).GetComponent<FVRViveHand>();
|
||||||
rightHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(0).GetComponent<FVRViveHand>();
|
rightHand = MeatKitPlugin.playerCamera.transform.parent.GetChild(0).GetComponent<FVRViveHand>();
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using HarmonyLib;
|
using UnityEngine;
|
||||||
using System.Reflection;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEngine.UI;
|
|
||||||
using FistVR;
|
using FistVR;
|
||||||
|
|
||||||
namespace TNHQoLImprovements
|
namespace TNHQoLImprovements
|
||||||
@@ -13,50 +10,14 @@ namespace TNHQoLImprovements
|
|||||||
{
|
{
|
||||||
public static TNH_Manager tnhManager;
|
public static TNH_Manager tnhManager;
|
||||||
|
|
||||||
private static Transform[] hands;
|
|
||||||
private static GameObject tnhInfo;
|
|
||||||
|
|
||||||
public static bool InHold()
|
|
||||||
{
|
|
||||||
if (tnhManager == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return tnhManager.Phase == TNH_Phase.Hold;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bring extra info into game over
|
|
||||||
public static void Patch(Harmony harmony)
|
|
||||||
{
|
|
||||||
var original = typeof(TNH_Manager).GetMethod("SetPhase", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
||||||
var patch = typeof(InPlay).GetMethod("MoveStatsToController", BindingFlags.NonPublic | BindingFlags.Static);
|
|
||||||
harmony.Patch(original, postfix: new HarmonyMethod(patch));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void MoveStatsToController(TNH_Phase p)
|
|
||||||
{
|
|
||||||
if (tnhManager == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (p == TNH_Phase.Dead || p == TNH_Phase.Completed)
|
|
||||||
{
|
|
||||||
int handSide = tnhManager.RadarHand == TNH_RadarHand.Left ? 0 : 1;
|
|
||||||
|
|
||||||
tnhInfo.transform.SetParent(hands[handSide], false);
|
|
||||||
tnhInfo.GetComponent<TNHInfo>().GameOverPos();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
tnhManager = FindObjectOfType<TNH_Manager>();
|
tnhManager = FindObjectOfType<TNH_Manager>();
|
||||||
|
|
||||||
var rig = Object.FindObjectOfType<FVRMovementManager>().transform;
|
TNHInfo.instance = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("TNHInfo"),
|
||||||
hands = new Transform[] {
|
FindObjectOfType<TAH_Reticle>().transform.GetChild(3))
|
||||||
rig.transform.GetChild(1), rig.transform.GetChild(0)
|
.GetComponent<TNHInfo>();
|
||||||
};
|
TNHInfo.instance.transform.localScale = new Vector3(0.002f, 0.002f, 0.002f);
|
||||||
|
|
||||||
tnhInfo = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("TNHInfo"), FindObjectOfType<TAH_Reticle>().transform.GetChild(3));
|
|
||||||
tnhInfo.transform.localScale = new Vector3(0.002f, 0.002f, 0.002f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy()
|
void OnDestroy()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Collections;
|
using HarmonyLib;
|
||||||
using HarmonyLib;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
@@ -27,7 +26,7 @@ namespace TNHQoLImprovements
|
|||||||
{
|
{
|
||||||
private Text text;
|
private Text text;
|
||||||
|
|
||||||
private IEnumerator Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
var gObjText = new GameObject("TokenCounter");
|
var gObjText = new GameObject("TokenCounter");
|
||||||
gObjText.transform.SetParent(transform, false);
|
gObjText.transform.SetParent(transform, false);
|
||||||
@@ -38,26 +37,11 @@ namespace TNHQoLImprovements
|
|||||||
text.font = MeatKitPlugin.fontBombardier;
|
text.font = MeatKitPlugin.fontBombardier;
|
||||||
text.fontSize = 55;
|
text.fontSize = 55;
|
||||||
text.color = new Color(0.1307786f, 0.2461715f, 0.359f);
|
text.color = new Color(0.1307786f, 0.2461715f, 0.359f);
|
||||||
|
}
|
||||||
while (InPlay.tnhManager == null)
|
private void Update()
|
||||||
{
|
|
||||||
Debug.Log("[ShopTokenNumber] tnhManager is null!");
|
|
||||||
yield return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
InPlay.tnhManager.TokenCountChangeEvent += UpdateText;
|
|
||||||
UpdateText();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateText(int _ = 0)
|
|
||||||
{
|
{
|
||||||
int tokens = InPlay.tnhManager.GetNumTokens();
|
int tokens = InPlay.tnhManager.GetNumTokens();
|
||||||
text.text = tokens.ToString();
|
text.text = tokens.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
|
||||||
{
|
|
||||||
InPlay.tnhManager.TokenCountChangeEvent -= UpdateText;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using FistVR;
|
using FistVR;
|
||||||
|
|
||||||
@@ -6,23 +7,55 @@ namespace TNHQoLImprovements
|
|||||||
{
|
{
|
||||||
class TNHInfo : MonoBehaviour
|
class TNHInfo : MonoBehaviour
|
||||||
{
|
{
|
||||||
private GameObject holdCounter;
|
public static TNHInfo instance;
|
||||||
|
|
||||||
|
public Transform[] hands;
|
||||||
|
private GameObject holdCounter;
|
||||||
private GameObject tokenCounter;
|
private GameObject tokenCounter;
|
||||||
private GameObject waveCounter;
|
private GameObject waveCounter;
|
||||||
|
|
||||||
public void Start()
|
// Bring extra info into game over
|
||||||
|
public static void Patch(Harmony harmony)
|
||||||
{
|
{
|
||||||
if (MeatKitPlugin.cfgShowHolds.Value)
|
var original = typeof(TNH_Manager).GetMethod("SetPhase", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
var patch = typeof(TNHInfo).GetMethod("MoveStatsToController", BindingFlags.NonPublic | BindingFlags.Static);
|
||||||
|
harmony.Patch(original, postfix: new HarmonyMethod(patch));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void MoveStatsToController(TNH_Phase p)
|
||||||
|
{
|
||||||
|
if (InPlay.tnhManager == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (p == TNH_Phase.Dead || p == TNH_Phase.Completed)
|
||||||
|
{
|
||||||
|
int handSide = InPlay.tnhManager.RadarHand == TNH_RadarHand.Left ? 0 : 1;
|
||||||
|
|
||||||
|
instance.transform.SetParent(instance.hands[handSide], false);
|
||||||
|
instance.GetComponent<TNHInfo>().GameOverPos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
instance = this;
|
||||||
|
|
||||||
|
if (MeatKitPlugin.cfgShowHolds.Value)
|
||||||
holdCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("HoldCounter"), transform);
|
holdCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("HoldCounter"), transform);
|
||||||
if (MeatKitPlugin.cfgShowTokens.Value)
|
if (MeatKitPlugin.cfgShowTokens.Value)
|
||||||
tokenCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("TokenCounter"), transform);
|
tokenCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("TokenCounter"), transform);
|
||||||
if (MeatKitPlugin.cfgShowWaves.Value)
|
if (MeatKitPlugin.cfgShowWaves.Value)
|
||||||
waveCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("WaveCounter"), transform);
|
waveCounter = Instantiate<GameObject>(MeatKitPlugin.bundle.LoadAsset<GameObject>("WaveCounter"), transform);
|
||||||
|
|
||||||
|
var rig = Object.FindObjectOfType<FVRMovementManager>().transform;
|
||||||
|
hands = new Transform[] {
|
||||||
|
rig.transform.GetChild(1), rig.transform.GetChild(0)
|
||||||
|
};
|
||||||
|
|
||||||
PlayPos();
|
PlayPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlayPos()
|
private void PlayPos()
|
||||||
{
|
{
|
||||||
transform.localPosition = new Vector3(0, 0, -1.2f);
|
transform.localPosition = new Vector3(0, 0, -1.2f);
|
||||||
if (holdCounter != null)
|
if (holdCounter != null)
|
||||||
@@ -35,7 +68,7 @@ namespace TNHQoLImprovements
|
|||||||
waveCounter.transform.localPosition = new Vector3(333, 0, 0);
|
waveCounter.transform.localPosition = new Vector3(333, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GameOverPos()
|
private void GameOverPos()
|
||||||
{
|
{
|
||||||
transform.localScale = new Vector3(.0002f, .0002f, .0002f);
|
transform.localScale = new Vector3(.0002f, .0002f, .0002f);
|
||||||
transform.localPosition = Vector3.zero;
|
transform.localPosition = Vector3.zero;
|
||||||
@@ -60,7 +93,7 @@ namespace TNHQoLImprovements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
// game over area; do not update anything else
|
// game over area; do not update anything else
|
||||||
if (InPlay.tnhManager.Phase == TNH_Phase.Dead || InPlay.tnhManager.Phase == TNH_Phase.Completed)
|
if (InPlay.tnhManager.Phase == TNH_Phase.Dead || InPlay.tnhManager.Phase == TNH_Phase.Completed)
|
||||||
@@ -100,5 +133,10 @@ namespace TNHQoLImprovements
|
|||||||
waveCounter.SetActive(false);
|
waveCounter.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnDestroy()
|
||||||
|
{
|
||||||
|
instance = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ Numbered tokens at item stations<br/>
|
|||||||
Player count for online leaderboards (won't work w/ *TNHTweaker* installed)<br/>
|
Player count for online leaderboards (won't work w/ *TNHTweaker* installed)<br/>
|
||||||
<img src=preview/leaderboard.png><br/>
|
<img src=preview/leaderboard.png><br/>
|
||||||
|
|
||||||
Features are modifiable via the mod manager's *Config editor*.
|
Features are modifiable via your mod manager's *Config editor*.
|
||||||
|
|
||||||
**This mod is built on [MeatKit](https://github.com/H3VR-Modding/MeatKit).**
|
**This mod is built on [MeatKit](https://github.com/H3VR-Modding/MeatKit).**
|
||||||
|
|||||||
Reference in New Issue
Block a user