// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.UI.Elements.UIBestiaryEntryButton // 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 ReLogic.Content; using System; using System.Collections.Generic; using System.Linq; using Terraria.Audio; using Terraria.GameContent.Bestiary; using Terraria.UI; namespace Terraria.GameContent.UI.Elements { public class UIBestiaryEntryButton : UIElement { private UIImage _bordersGlow; private UIImage _bordersOverlay; private UIImage _borders; private UIBestiaryEntryIcon _icon; public BestiaryEntry Entry { get; private set; } public UIBestiaryEntryButton(BestiaryEntry entry, bool isAPrettyPortrait) { this.Entry = entry; this.Height.Set(72f, 0.0f); this.Width.Set(72f, 0.0f); this.SetPadding(0.0f); UIElement element = new UIElement() { Width = new StyleDimension(-4f, 1f), Height = new StyleDimension(-4f, 1f), IgnoresMouseInteraction = true, OverflowHidden = true, HAlign = 0.5f, VAlign = 0.5f }; element.SetPadding(0.0f); UIImage uiImage1 = new UIImage(Main.Assets.Request("Images/UI/Bestiary/Slot_Back", (AssetRequestMode) 1)); uiImage1.VAlign = 0.5f; uiImage1.HAlign = 0.5f; element.Append((UIElement) uiImage1); if (isAPrettyPortrait) { Asset texture = this.TryGettingBackgroundImageProvider(entry); if (texture != null) { UIElement uiElement = element; UIImage uiImage2 = new UIImage(texture); uiImage2.HAlign = 0.5f; uiImage2.VAlign = 0.5f; uiElement.Append((UIElement) uiImage2); } } UIBestiaryEntryIcon bestiaryEntryIcon = new UIBestiaryEntryIcon(entry, isAPrettyPortrait); element.Append((UIElement) bestiaryEntryIcon); this.Append(element); this._icon = bestiaryEntryIcon; int? nullable = this.TryGettingDisplayIndex(entry); if (nullable.HasValue) { UIText uiText = new UIText(nullable.Value.ToString(), 0.9f); uiText.Top = new StyleDimension(10f, 0.0f); uiText.Left = new StyleDimension(10f, 0.0f); uiText.IgnoresMouseInteraction = true; this.Append((UIElement) uiText); } UIImage uiImage3 = new UIImage(Main.Assets.Request("Images/UI/Bestiary/Slot_Selection", (AssetRequestMode) 1)); uiImage3.VAlign = 0.5f; uiImage3.HAlign = 0.5f; uiImage3.IgnoresMouseInteraction = true; this._bordersGlow = uiImage3; UIImage uiImage4 = new UIImage(Main.Assets.Request("Images/UI/Bestiary/Slot_Overlay", (AssetRequestMode) 1)); uiImage4.VAlign = 0.5f; uiImage4.HAlign = 0.5f; uiImage4.IgnoresMouseInteraction = true; uiImage4.Color = Color.White * 0.6f; this._bordersOverlay = uiImage4; this.Append((UIElement) this._bordersOverlay); UIImage uiImage5 = new UIImage(Main.Assets.Request("Images/UI/Bestiary/Slot_Front", (AssetRequestMode) 1)); uiImage5.VAlign = 0.5f; uiImage5.HAlign = 0.5f; uiImage5.IgnoresMouseInteraction = true; this.Append((UIElement) uiImage5); this._borders = uiImage5; if (isAPrettyPortrait) this.RemoveChild((UIElement) this._bordersOverlay); if (isAPrettyPortrait) return; this.OnMouseOver += new UIElement.MouseEvent(this.MouseOver); this.OnMouseOut += new UIElement.MouseEvent(this.MouseOut); } private Asset TryGettingBackgroundImageProvider(BestiaryEntry entry) { IEnumerable source = entry.Info.Where((Func) (x => x is IBestiaryBackgroundImagePathAndColorProvider)).Select((Func) (x => x as IBestiaryBackgroundImagePathAndColorProvider)); IEnumerable preferences = entry.Info.OfType(); foreach (IBestiaryBackgroundImagePathAndColorProvider andColorProvider in source.Where((Func) (provider => preferences.Any((Func) (preference => preference.Matches(provider)))))) { Asset backgroundImage = andColorProvider.GetBackgroundImage(); if (backgroundImage != null) return backgroundImage; } foreach (IBestiaryBackgroundImagePathAndColorProvider andColorProvider in source) { Asset backgroundImage = andColorProvider.GetBackgroundImage(); if (backgroundImage != null) return backgroundImage; } return (Asset) null; } private int? TryGettingDisplayIndex(BestiaryEntry entry) { int? nullable = new int?(); IBestiaryInfoElement bestiaryInfoElement = entry.Info.FirstOrDefault((Func) (x => x is IBestiaryEntryDisplayIndex)); if (bestiaryInfoElement != null) nullable = new int?((bestiaryInfoElement as IBestiaryEntryDisplayIndex).BestiaryDisplayIndex); return nullable; } protected override void DrawSelf(SpriteBatch spriteBatch) { if (!this.IsMouseHovering) return; Main.instance.MouseText(this._icon.GetHoverText()); } private void MouseOver(UIMouseEvent evt, UIElement listeningElement) { SoundEngine.PlaySound(12); this.RemoveChild((UIElement) this._borders); this.RemoveChild((UIElement) this._bordersGlow); this.RemoveChild((UIElement) this._bordersOverlay); this.Append((UIElement) this._borders); this.Append((UIElement) this._bordersGlow); this._icon.ForceHover = true; } private void MouseOut(UIMouseEvent evt, UIElement listeningElement) { this.RemoveChild((UIElement) this._borders); this.RemoveChild((UIElement) this._bordersGlow); this.RemoveChild((UIElement) this._bordersOverlay); this.Append((UIElement) this._bordersOverlay); this.Append((UIElement) this._borders); this._icon.ForceHover = false; } } }