- Added support for animated projectiles - Refactoring - Removed useless fields - Fixed swords not dealing damages - Added Hour Hand (from Evie's PR)
55 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
} |