using Terraria;
using Terraria.ModLoader;
namespace SoulHarvest.Common;
/// <summary>
/// Resolves the authoritative Death Reaper world-stop once per game tick. NPC
/// hooks query this cached value, so a full battlefield does not rescan every
/// player once for every NPC.
/// </summary>
internal sealed class ReaperDeathUltimateFreezeSystem : ModSystem
{
private static ulong cachedTick = ulong.MaxValue;
private static bool cachedFrozen;
internal static bool IsWorldFrozen
{
get
{
if (Main.gameMenu)
return false;
if (cachedTick == Main.GameUpdateCount)
return cachedFrozen;
cachedTick = Main.GameUpdateCount;
cachedFrozen = false;
foreach (Player player in Main.ActivePlayers)
{
if (!player.dead && player.GetModPlayer<ReaperCombatPlayer>()
.FreezesWorldForDeathUltimate)
{
cachedFrozen = true;
break;
}
}
return cachedFrozen;
}
}
public override void OnWorldLoad() => ResetCache();
public override void OnWorldUnload() => ResetCache();
public override void Unload() => ResetCache();
private static void ResetCache()
{
cachedTick = ulong.MaxValue;
cachedFrozen = false;
}
}
using Terraria;
using Terraria.ModLoader;
namespace SoulHarvest.Common;
/// <summary>
/// Resolves the authoritative Death Reaper world-stop once per game tick. NPC
/// hooks query this cached value, so a full battlefield does not rescan every
/// player once for every NPC.
/// </summary>
internal sealed class ReaperDeathUltimateFreezeSystem : ModSystem
{
private static ulong cachedTick = ulong.MaxValue;
private static bool cachedFrozen;
internal static bool IsWorldFrozen
{
get
{
if (Main.gameMenu)
return false;
if (cachedTick == Main.GameUpdateCount)
return cachedFrozen;
cachedTick = Main.GameUpdateCount;
cachedFrozen = false;
foreach (Player player in Main.ActivePlayers)
{
if (!player.dead && player.GetModPlayer<ReaperCombatPlayer>()
.FreezesWorldForDeathUltimate)
{
cachedFrozen = true;
break;
}
}
return cachedFrozen;
}
}
public override void OnWorldLoad() => ResetCache();
public override void OnWorldUnload() => ResetCache();
public override void Unload() => ResetCache();
private static void ResetCache()
{
cachedTick = ulong.MaxValue;
cachedFrozen = false;
}
}