6 Commits

Author SHA1 Message Date
msk 2f7fe60cd6 add discord contact in the Thunderstore readme 2023-11-13 16:15:45 -08:00
msk 611f074b73 minor cleanups, add the preview images back 2023-07-31 14:46:53 -07:00
msk 6cc32af15d Update README.md 2023-07-31 14:08:11 -07:00
msk b87db514a5 change initialization approach, refactoring
should resolve errors occurring on both Atlas and WurstMod maps
2023-07-31 02:32:02 -07:00
msk 73d8a5b89d Reorganize, revert changes for "fixing" Atlas maps 2023-07-31 00:12:10 -07:00
msk cf4b2847be Revert "add small setup delays to address errors in Atlas maps"
This reverts commit 64d8df148b.
2023-07-30 22:46:37 -07:00
12 changed files with 112 additions and 108 deletions
+3
View File
@@ -0,0 +1,3 @@
{
"omnisharp.useModernNet": false
}
+1 -1
View File
@@ -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
+33 -29
View File
@@ -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)
{ {
+7 -2
View File
@@ -2,11 +2,12 @@
Ever got frustrated checking your HP against a bright ceiling in TNH? Ever got frustrated checking your HP against a bright ceiling in TNH?
Have you forgotten how many Holds you're playing for, so you don't know if you should spend all your tokens? Have you forgotten how many Holds you're playing for, so you don't know if you should spend all your tokens?
And... wait, which hold are you on again? 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 seek to address various littles issues like those aforementioned.**
## 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
@@ -19,8 +20,12 @@ Toggle and customize these features in your mod manager's *Config editor*.
**This mod will not disqualify you from Steam or TNHTweaker leaderboards.** **This mod will not disqualify you from Steam or TNHTweaker leaderboards.**
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).
You can also contact me on Discord either by messaging or pinging me `@muskit` in one of the modding servers.
## 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!)
+9
View File
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: a7e0925cb0a2d20488bcb5d230cf74f7
folderAsset: yes
timeCreated: 1690792321
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
+5 -5
View File
@@ -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>();
+5 -44
View File
@@ -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()
+4 -20
View File
@@ -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;
}
} }
} }
+44 -6
View File
@@ -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;
}
} }
} }
+1 -1
View File
@@ -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).**