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

DeathMod

【Terraria】DeathMod (now aka Soul Harvest)

公开
关注 0 Fork 0 Star 0
UTF-8
using SoulHarvest.Common;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using ReLogic.Content;
using System;
using System.Collections.Generic;
using Terraria;
using Terraria.GameContent;
using Terraria.Localization;
using Terraria.ModLoader;
using Terraria.UI;

namespace SoulHarvest.UI;


[Autoload(Side = ModSide.Client)]
public class SoulIconUISystem : ModSystem
{
    private UserInterface? soulIconInterface;
    private SoulIconState? soulIconState;

    public override void Load()
    {
        soulIconState = new SoulIconState();
        soulIconState.Activate();
        soulIconInterface = new UserInterface();
        soulIconInterface.SetState(soulIconState);
    }

    public override void UpdateUI(GameTime gameTime)
    {
        if (!Main.gameMenu)
            soulIconInterface?.Update(gameTime);
    }

    public override void ModifyInterfaceLayers(List<GameInterfaceLayer> layers)
    {
        int resourceBarIndex = layers.FindIndex(layer => layer.Name == "Vanilla: Resource Bars");
        if (resourceBarIndex < 0)
            return;

        layers.Insert(resourceBarIndex, new LegacyGameInterfaceLayer(
            "SoulHarvest: Soul Icon",
            () =>
            {
                if (!Main.gameMenu)
                    soulIconInterface?.Draw(Main.spriteBatch, new GameTime());
                return true;
            },
            InterfaceScaleType.UI));
    }

    internal static void RequestEssenceExtraction()
    {
        if (Main.netMode == Terraria.ID.NetmodeID.SinglePlayer)
        {
            Main.LocalPlayer.GetModPlayer<MyPlayer>().TryExtractEssence();
            return;
        }

        ModPacket packet = ModContent.GetInstance<SoulHarvest>().GetPacket();
        packet.Write((byte)SoulHarvest.MessageType.RequestExtractEssence);
        packet.Send();
    }

    internal static void RequestEssenceAbsorption()
    {
        if (Main.netMode == Terraria.ID.NetmodeID.SinglePlayer)
        {
            Main.LocalPlayer.GetModPlayer<MyPlayer>().TryAbsorbEssence();
            return;
        }

        ModPacket packet = ModContent.GetInstance<SoulHarvest>().GetPacket();
        packet.Write((byte)SoulHarvest.MessageType.RequestAbsorbEssence);
        packet.Send();
    }
}