// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.UI.Elements.UIDynamicItemCollection // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; using Terraria.GameInput; using Terraria.ID; using Terraria.UI; using Terraria.UI.Gamepad; namespace Terraria.GameContent.UI.Elements { public class UIDynamicItemCollection : UIElement { private List _itemIdsAvailableToShow = new List(); private List _itemIdsToLoadTexturesFor = new List(); private int _itemsPerLine; private const int sizePerEntryX = 44; private const int sizePerEntryY = 44; private List _dummySnapPoints = new List(); public UIDynamicItemCollection() { this.Width = new StyleDimension(0.0f, 1f); this.HAlign = 0.5f; this.UpdateSize(); } protected override void DrawSelf(SpriteBatch spriteBatch) { Main.inventoryScale = 0.8461539f; int startX; int startY; int startItemIndex; int endItemIndex; this.GetGridParameters(out startX, out startY, out startItemIndex, out endItemIndex); int itemsPerLine = this._itemsPerLine; for (int index = startItemIndex; index < endItemIndex; ++index) { int key = this._itemIdsAvailableToShow[index]; Rectangle itemSlotHitbox = this.GetItemSlotHitbox(startX, startY, startItemIndex, index); Item inv = ContentSamples.ItemsByType[key]; int context = 29; if (TextureAssets.Item[key].State == null) --itemsPerLine; bool flag = false; if (this.IsMouseHovering && itemSlotHitbox.Contains(Main.MouseScreen.ToPoint()) && !PlayerInput.IgnoreMouseInterface) { Main.LocalPlayer.mouseInterface = true; ItemSlot.OverrideHover(ref inv, context); ItemSlot.LeftClick(ref inv, context); ItemSlot.RightClick(ref inv, context); ItemSlot.MouseHover(ref inv, context); flag = true; } UILinkPointNavigator.Shortcuts.CREATIVE_ItemSlotShouldHighlightAsSelected = flag; ItemSlot.Draw(spriteBatch, ref inv, context, itemSlotHitbox.TopLeft()); if (itemsPerLine <= 0) break; } while (this._itemIdsToLoadTexturesFor.Count > 0 && itemsPerLine > 0) { int i = this._itemIdsToLoadTexturesFor[0]; this._itemIdsToLoadTexturesFor.RemoveAt(0); if (TextureAssets.Item[i].State == null) { Main.instance.LoadItem(i); itemsPerLine -= 4; } } } private Rectangle GetItemSlotHitbox( int startX, int startY, int startItemIndex, int i) { int num1 = i - startItemIndex; int num2 = num1 % this._itemsPerLine; int num3 = num1 / this._itemsPerLine; return new Rectangle(startX + num2 * 44, startY + num3 * 44, 44, 44); } private void GetGridParameters( out int startX, out int startY, out int startItemIndex, out int endItemIndex) { Rectangle rectangle = this.GetDimensions().ToRectangle(); Rectangle viewCullingArea = this.Parent.GetViewCullingArea(); int x = rectangle.Center.X; startX = x - (int) ((double) (44 * this._itemsPerLine) * 0.5); startY = rectangle.Top; startItemIndex = 0; endItemIndex = this._itemIdsAvailableToShow.Count; int num1 = (Math.Min(viewCullingArea.Top, rectangle.Top) - viewCullingArea.Top) / 44; startY += -num1 * 44; startItemIndex += -num1 * this._itemsPerLine; int num2 = (int) Math.Ceiling((double) viewCullingArea.Height / 44.0) * this._itemsPerLine; if (endItemIndex <= num2 + startItemIndex + this._itemsPerLine) return; endItemIndex = num2 + startItemIndex + this._itemsPerLine; } public override void Recalculate() { base.Recalculate(); this.UpdateSize(); } public override void Update(GameTime gameTime) { base.Update(gameTime); if (!this.IsMouseHovering) return; Main.LocalPlayer.mouseInterface = true; } public void SetContentsToShow(List itemIdsToShow) { this._itemIdsAvailableToShow.Clear(); this._itemIdsToLoadTexturesFor.Clear(); this._itemIdsAvailableToShow.AddRange((IEnumerable) itemIdsToShow); this._itemIdsToLoadTexturesFor.AddRange((IEnumerable) itemIdsToShow); this.UpdateSize(); } public int GetItemsPerLine() => this._itemsPerLine; public override List GetSnapPoints() { List snapPointList = new List(); int startX; int startY; int startItemIndex; int endItemIndex; this.GetGridParameters(out startX, out startY, out startItemIndex, out endItemIndex); int itemsPerLine = this._itemsPerLine; Rectangle viewCullingArea = this.Parent.GetViewCullingArea(); int num1 = endItemIndex - startItemIndex; while (this._dummySnapPoints.Count < num1) this._dummySnapPoints.Add(new SnapPoint("CreativeInfinitesSlot", 0, Vector2.Zero, Vector2.Zero)); int num2 = 0; Vector2 vector2 = this.GetDimensions().Position(); for (int i = startItemIndex; i < endItemIndex; ++i) { Point center = this.GetItemSlotHitbox(startX, startY, startItemIndex, i).Center; if (viewCullingArea.Contains(center)) { SnapPoint dummySnapPoint = this._dummySnapPoints[num2]; dummySnapPoint.ThisIsAHackThatChangesTheSnapPointsInfo(Vector2.Zero, center.ToVector2() - vector2, num2); dummySnapPoint.Calculate((UIElement) this); ++num2; snapPointList.Add(dummySnapPoint); } } foreach (UIElement element in this.Elements) snapPointList.AddRange((IEnumerable) element.GetSnapPoints()); return snapPointList; } public void UpdateSize() { int num = this.GetDimensions().ToRectangle().Width / 44; this._itemsPerLine = num; this.MinHeight.Set((float) (44 * (int) Math.Ceiling((double) this._itemIdsAvailableToShow.Count / (double) num)), 0.0f); } } }