XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

DeathMod

【Terraria】DeathMod (now aka Soul Harvest)

公开
关注 0 Fork 0 Star 0
UTF-8
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;
    }
}