Decimation_Mod/Content/UI/VanillaItemSlotWrapper.cs
FyloZ ec4585bed5 - Changed Bloodshot Eye's music to Boss 1 Orchestra ( https://www.youtube.com/watch?time_continue=120&v=r-9nKGc85FQ )
- Added support for animated projectiles
- Refactoring
- Removed useless fields
- Fixed swords not dealing damages
- Added Hour Hand (from Evie's PR)
2020-03-21 00:11:07 -04:00

55 lines
2.5 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using Terraria;
using Terraria.GameInput;
using Terraria.UI;
// This class is from Example Mod
namespace Decimation.Content.UI
{
// This class wraps the vanilla ItemSlot class into a UIElement. The ItemSlot class was made before the UI system was made, so it can't be used normally with UIState.
// By wrapping the vanilla ItemSlot class, we can easily use ItemSlot.
// ItemSlot isn't very modder friendly and operates based on a "Context" number that dictates how the slot behaves when left, right, or shift clicked and the background used when drawn.
// If you want more control, you might need to write your own UIElement.
// I've added basic functionality for validating the item attempting to be placed in the slot via the validItem Func.
// See ExamplePersonUI for usage and use the Awesomify chat option of Example Person to see in action.
internal class VanillaItemSlotWrapper : UIElement
{
internal Item Item;
private readonly int _context;
private readonly float _scale;
internal Func<Item, bool> ValidItemFunc;
public VanillaItemSlotWrapper(int context = ItemSlot.Context.BankItem, float scale = 1f)
{
_context = context;
_scale = scale;
Item = new Item();
Item.SetDefaults(0);
Width.Set(Main.inventoryBack9Texture.Width * scale, 0f);
Height.Set(Main.inventoryBack9Texture.Height * scale, 0f);
}
protected override void DrawSelf(SpriteBatch spriteBatch)
{
float oldScale = Main.inventoryScale;
Main.inventoryScale = _scale;
Rectangle rectangle = GetDimensions().ToRectangle();
if (ContainsPoint(Main.MouseScreen) && !PlayerInput.IgnoreMouseInterface)
{
Main.LocalPlayer.mouseInterface = true;
if (ValidItemFunc == null || ValidItemFunc(Main.mouseItem))
{
// Handle handles all the click and hover actions based on the context.
ItemSlot.Handle(ref Item, _context);
}
}
// Draw draws the slot itself and Item. Depending on context, the color will change, as will drawing other things like stack counts.
ItemSlot.Draw(spriteBatch, ref Item, _context, rectangle.TopLeft());
Main.inventoryScale = oldScale;
}
}
}