188 lines
7.1 KiB
C#
188 lines
7.1 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.GameContent.UI.Elements.UIBestiaryEntryInfoPage
|
|
// 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 System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Terraria.GameContent.Bestiary;
|
|
using Terraria.UI;
|
|
|
|
namespace Terraria.GameContent.UI.Elements
|
|
{
|
|
public class UIBestiaryEntryInfoPage : UIPanel
|
|
{
|
|
private UIList _list;
|
|
private UIScrollbar _scrollbar;
|
|
private bool _isScrollbarAttached;
|
|
|
|
public UIBestiaryEntryInfoPage()
|
|
{
|
|
this.Width.Set(230f, 0.0f);
|
|
this.Height.Set(0.0f, 1f);
|
|
this.SetPadding(0.0f);
|
|
this.BorderColor = new Color(89, 116, 213, (int) byte.MaxValue);
|
|
this.BackgroundColor = new Color(73, 94, 171);
|
|
UIList uiList1 = new UIList();
|
|
uiList1.Width = StyleDimension.FromPixelsAndPercent(0.0f, 1f);
|
|
uiList1.Height = StyleDimension.FromPixelsAndPercent(0.0f, 1f);
|
|
UIList uiList2 = uiList1;
|
|
uiList2.SetPadding(2f);
|
|
uiList2.PaddingBottom = 4f;
|
|
uiList2.PaddingTop = 4f;
|
|
this.Append((UIElement) uiList2);
|
|
this._list = uiList2;
|
|
uiList2.ListPadding = 4f;
|
|
uiList2.ManualSortMethod = new Action<List<UIElement>>(this.ManualIfnoSortingMethod);
|
|
UIScrollbar uiScrollbar = new UIScrollbar();
|
|
uiScrollbar.SetView(100f, 1000f);
|
|
uiScrollbar.Height.Set(-20f, 1f);
|
|
uiScrollbar.HAlign = 1f;
|
|
uiScrollbar.VAlign = 0.5f;
|
|
uiScrollbar.Left.Set(-6f, 0.0f);
|
|
this._scrollbar = uiScrollbar;
|
|
this._list.SetScrollbar(this._scrollbar);
|
|
this.CheckScrollBar();
|
|
this.AppendBorderOverEverything();
|
|
}
|
|
|
|
public void UpdateScrollbar(int scrollWheelValue)
|
|
{
|
|
if (this._scrollbar == null)
|
|
return;
|
|
this._scrollbar.ViewPosition -= (float) scrollWheelValue;
|
|
}
|
|
|
|
private void AppendBorderOverEverything()
|
|
{
|
|
UIPanel uiPanel1 = new UIPanel();
|
|
uiPanel1.Width = new StyleDimension(0.0f, 1f);
|
|
uiPanel1.Height = new StyleDimension(0.0f, 1f);
|
|
uiPanel1.IgnoresMouseInteraction = true;
|
|
UIPanel uiPanel2 = uiPanel1;
|
|
uiPanel2.BorderColor = new Color(89, 116, 213, (int) byte.MaxValue);
|
|
uiPanel2.BackgroundColor = Color.Transparent;
|
|
this.Append((UIElement) uiPanel2);
|
|
}
|
|
|
|
private void ManualIfnoSortingMethod(List<UIElement> list)
|
|
{
|
|
}
|
|
|
|
public override void Recalculate()
|
|
{
|
|
base.Recalculate();
|
|
this.CheckScrollBar();
|
|
}
|
|
|
|
private void CheckScrollBar()
|
|
{
|
|
if (this._scrollbar == null)
|
|
return;
|
|
bool canScroll = this._scrollbar.CanScroll;
|
|
bool flag = true;
|
|
if (this._isScrollbarAttached && !flag)
|
|
{
|
|
this.RemoveChild((UIElement) this._scrollbar);
|
|
this._isScrollbarAttached = false;
|
|
this._list.Width.Set(0.0f, 1f);
|
|
}
|
|
else
|
|
{
|
|
if (!(!this._isScrollbarAttached & flag))
|
|
return;
|
|
this.Append((UIElement) this._scrollbar);
|
|
this._isScrollbarAttached = true;
|
|
this._list.Width.Set(-20f, 1f);
|
|
}
|
|
}
|
|
|
|
public void FillInfoForEntry(BestiaryEntry entry, ExtraBestiaryInfoPageInformation extraInfo)
|
|
{
|
|
this._list.Clear();
|
|
if (entry == null)
|
|
return;
|
|
this.AddInfoToList(entry, extraInfo);
|
|
this.Recalculate();
|
|
}
|
|
|
|
private BestiaryUICollectionInfo GetUICollectionInfo(
|
|
BestiaryEntry entry,
|
|
ExtraBestiaryInfoPageInformation extraInfo)
|
|
{
|
|
IBestiaryUICollectionInfoProvider uiInfoProvider = entry.UIInfoProvider;
|
|
BestiaryUICollectionInfo uiCollectionInfo = uiInfoProvider == null ? new BestiaryUICollectionInfo() : uiInfoProvider.GetEntryUICollectionInfo();
|
|
uiCollectionInfo.OwnerEntry = entry;
|
|
return uiCollectionInfo;
|
|
}
|
|
|
|
private void AddInfoToList(BestiaryEntry entry, ExtraBestiaryInfoPageInformation extraInfo)
|
|
{
|
|
BestiaryUICollectionInfo uiCollectionInfo = this.GetUICollectionInfo(entry, extraInfo);
|
|
IOrderedEnumerable<IGrouping<UIBestiaryEntryInfoPage.BestiaryInfoCategory, IBestiaryInfoElement>> orderedEnumerable = new List<IBestiaryInfoElement>((IEnumerable<IBestiaryInfoElement>) entry.Info).GroupBy<IBestiaryInfoElement, UIBestiaryEntryInfoPage.BestiaryInfoCategory>(new Func<IBestiaryInfoElement, UIBestiaryEntryInfoPage.BestiaryInfoCategory>(this.GetBestiaryInfoCategory)).OrderBy<IGrouping<UIBestiaryEntryInfoPage.BestiaryInfoCategory, IBestiaryInfoElement>, UIBestiaryEntryInfoPage.BestiaryInfoCategory>((Func<IGrouping<UIBestiaryEntryInfoPage.BestiaryInfoCategory, IBestiaryInfoElement>, UIBestiaryEntryInfoPage.BestiaryInfoCategory>) (x => x.Key));
|
|
UIElement uiElement1 = (UIElement) null;
|
|
foreach (IGrouping<UIBestiaryEntryInfoPage.BestiaryInfoCategory, IBestiaryInfoElement> source in (IEnumerable<IGrouping<UIBestiaryEntryInfoPage.BestiaryInfoCategory, IBestiaryInfoElement>>) orderedEnumerable)
|
|
{
|
|
if (source.Count<IBestiaryInfoElement>() != 0)
|
|
{
|
|
bool flag = false;
|
|
foreach (IBestiaryInfoElement bestiaryInfoElement in (IEnumerable<IBestiaryInfoElement>) source)
|
|
{
|
|
UIElement uiElement2 = bestiaryInfoElement.ProvideUIElement(uiCollectionInfo);
|
|
if (uiElement2 != null)
|
|
{
|
|
this._list.Add(uiElement2);
|
|
flag = true;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
UIHorizontalSeparator horizontalSeparator1 = new UIHorizontalSeparator();
|
|
horizontalSeparator1.Width = StyleDimension.FromPixelsAndPercent(0.0f, 1f);
|
|
horizontalSeparator1.Color = new Color(89, 116, 213, (int) byte.MaxValue) * 0.9f;
|
|
UIHorizontalSeparator horizontalSeparator2 = horizontalSeparator1;
|
|
this._list.Add((UIElement) horizontalSeparator2);
|
|
uiElement1 = (UIElement) horizontalSeparator2;
|
|
}
|
|
}
|
|
}
|
|
this._list.Remove(uiElement1);
|
|
}
|
|
|
|
private UIBestiaryEntryInfoPage.BestiaryInfoCategory GetBestiaryInfoCategory(
|
|
IBestiaryInfoElement element)
|
|
{
|
|
switch (element)
|
|
{
|
|
case NPCPortraitInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.Portrait;
|
|
case FlavorTextBestiaryInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.FlavorText;
|
|
case NamePlateInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.Nameplate;
|
|
case ItemFromCatchingNPCBestiaryInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.ItemsFromCatchingNPC;
|
|
case ItemDropBestiaryInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.ItemsFromDrops;
|
|
case NPCStatsReportInfoElement _:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.Stats;
|
|
default:
|
|
return UIBestiaryEntryInfoPage.BestiaryInfoCategory.Misc;
|
|
}
|
|
}
|
|
|
|
private enum BestiaryInfoCategory
|
|
{
|
|
Nameplate,
|
|
Portrait,
|
|
FlavorText,
|
|
Stats,
|
|
ItemsFromCatchingNPC,
|
|
ItemsFromDrops,
|
|
Misc,
|
|
}
|
|
}
|
|
}
|