new-horizons/NewHorizons/Handlers/InvulnerabilityHandler.cs
AnonymousStrangerOW 187bf415dc fixes warping to other systems death bug
- the player no longer violently gets hurled out of the vessel when warping to custom-made system
- possible issues involving violent hurling also happening with the ship when warping into other nh systems may have been fixed as well
2025-02-09 21:08:51 -05:00

51 lines
1.6 KiB
C#

using HarmonyLib;
using NewHorizons.Utility.OWML;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace NewHorizons.Handlers
{
[HarmonyPatch]
internal class InvulnerabilityHandler
{
private static float _defaultImpactDeathSpeed = -1f;
private static bool _invulnerable;
public static void MakeInvulnerable(bool invulnerable)
{
NHLogger.Log($"Toggling immortality: {invulnerable}");
_invulnerable = invulnerable;
var deathManager = GetDeathManager();
var resources = GetPlayerResouces();
if (invulnerable)
{
deathManager._invincible = true;
}
else
{
resources._currentHealth = 100f;
deathManager._invincible = false;
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(DeathManager), nameof(DeathManager.KillPlayer))]
[HarmonyPatch(typeof(PlayerResources), nameof(PlayerResources.ApplyInstantDamage))]
[HarmonyPatch(typeof(PlayerImpactAudio), nameof(PlayerImpactAudio.OnImpact))]
public static bool DeathManager_KillPlayer_Prefix()
{
return !_invulnerable;
}
private static DeathManager GetDeathManager() => GameObject.FindObjectOfType<DeathManager>();
private static PlayerResources GetPlayerResouces() => GameObject.FindObjectOfType<PlayerResources>();
static InvulnerabilityHandler()
{
SceneManager.sceneUnloaded += (_) => _invulnerable = false;
}
}
}