terraria-source-code/GameContent/Bestiary/NPCPortraitInfoElement.cs
2021-10-26 12:45:26 -04:00

137 lines
6.6 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Bestiary.NPCPortraitInfoElement
// 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.GameContent.UI.Elements;
using Terraria.UI;
namespace Terraria.GameContent.Bestiary
{
public class NPCPortraitInfoElement : IBestiaryInfoElement
{
private int? _filledStarsCount;
public NPCPortraitInfoElement(int? rarityStars = null) => this._filledStarsCount = rarityStars;
public UIElement ProvideUIElement(BestiaryUICollectionInfo info)
{
UIElement uiElement = new UIElement()
{
Width = new StyleDimension(0.0f, 1f),
Height = new StyleDimension(112f, 0.0f)
};
uiElement.SetPadding(0.0f);
BestiaryEntry entry = new BestiaryEntry();
Asset<Texture2D> portraitBackgroundAsset = (Asset<Texture2D>) null;
Color white = Color.White;
entry.Icon = info.OwnerEntry.Icon.CreateClone();
entry.UIInfoProvider = info.OwnerEntry.UIInfoProvider;
List<IBestiaryBackgroundOverlayAndColorProvider> overlays = new List<IBestiaryBackgroundOverlayAndColorProvider>();
bool flag1 = info.UnlockState > BestiaryEntryUnlockState.NotKnownAtAll_0;
if (flag1)
{
List<IBestiaryInfoElement> source1 = new List<IBestiaryInfoElement>();
IEnumerable<IBestiaryBackgroundImagePathAndColorProvider> source2 = info.OwnerEntry.Info.OfType<IBestiaryBackgroundImagePathAndColorProvider>();
IEnumerable<IPreferenceProviderElement> preferences = info.OwnerEntry.Info.OfType<IPreferenceProviderElement>();
Func<IBestiaryBackgroundImagePathAndColorProvider, bool> predicate = (Func<IBestiaryBackgroundImagePathAndColorProvider, bool>) (provider => preferences.Any<IPreferenceProviderElement>((Func<IPreferenceProviderElement, bool>) (preference => preference.Matches(provider))));
IEnumerable<IBestiaryBackgroundImagePathAndColorProvider> andColorProviders = source2.Where<IBestiaryBackgroundImagePathAndColorProvider>(predicate);
bool flag2 = false;
foreach (IBestiaryBackgroundImagePathAndColorProvider andColorProvider in andColorProviders)
{
Asset<Texture2D> backgroundImage = andColorProvider.GetBackgroundImage();
if (backgroundImage != null)
{
portraitBackgroundAsset = backgroundImage;
flag2 = true;
Color? backgroundColor = andColorProvider.GetBackgroundColor();
if (backgroundColor.HasValue)
{
white = backgroundColor.Value;
break;
}
break;
}
}
foreach (IBestiaryInfoElement bestiaryInfoElement in info.OwnerEntry.Info)
{
if (bestiaryInfoElement is IBestiaryBackgroundImagePathAndColorProvider andColorProvider9)
{
Asset<Texture2D> backgroundImage = andColorProvider9.GetBackgroundImage();
if (backgroundImage != null)
{
if (!flag2)
portraitBackgroundAsset = backgroundImage;
Color? backgroundColor = andColorProvider9.GetBackgroundColor();
if (backgroundColor.HasValue)
white = backgroundColor.Value;
}
else
continue;
}
if (!flag2 && bestiaryInfoElement is IBestiaryBackgroundOverlayAndColorProvider andColorProvider10 && andColorProvider10.GetBackgroundOverlayImage() != null)
source1.Add(bestiaryInfoElement);
}
overlays.AddRange(source1.OrderBy<IBestiaryInfoElement, float>(new Func<IBestiaryInfoElement, float>(this.GetSortingValueForElement)).Select<IBestiaryInfoElement, IBestiaryBackgroundOverlayAndColorProvider>((Func<IBestiaryInfoElement, IBestiaryBackgroundOverlayAndColorProvider>) (x => x as IBestiaryBackgroundOverlayAndColorProvider)));
}
UIBestiaryNPCEntryPortrait npcEntryPortrait1 = new UIBestiaryNPCEntryPortrait(entry, portraitBackgroundAsset, white, overlays);
npcEntryPortrait1.Left = new StyleDimension(4f, 0.0f);
npcEntryPortrait1.HAlign = 0.0f;
UIBestiaryNPCEntryPortrait npcEntryPortrait2 = npcEntryPortrait1;
uiElement.Append((UIElement) npcEntryPortrait2);
if (flag1 && this._filledStarsCount.HasValue)
{
UIElement starsContainer = this.CreateStarsContainer();
uiElement.Append(starsContainer);
}
return uiElement;
}
private float GetSortingValueForElement(IBestiaryInfoElement element) => element is IBestiaryBackgroundOverlayAndColorProvider andColorProvider ? andColorProvider.DisplayPriority : 0.0f;
private UIElement CreateStarsContainer()
{
int num1 = 14;
int num2 = 14;
int num3 = -4;
int num4 = num1 + num3;
int val2 = 5;
int val1 = 5;
int num5 = this._filledStarsCount.Value;
float num6 = 1f;
int num7 = num4 * Math.Min(val1, val2) - num3;
double num8 = (double) num4 * Math.Ceiling((double) val2 / (double) val1) - (double) num3;
UIPanel uiPanel = new UIPanel(Main.Assets.Request<Texture2D>("Images/UI/Bestiary/Stat_Panel", (AssetRequestMode) 1), (Asset<Texture2D>) null, 5, 21);
uiPanel.Width = new StyleDimension((float) num7 + num6 * 2f, 0.0f);
uiPanel.Height = new StyleDimension((float) num8 + num6 * 2f, 0.0f);
uiPanel.BackgroundColor = Color.Gray * 0.0f;
uiPanel.BorderColor = Color.Transparent;
uiPanel.Left = new StyleDimension(10f, 0.0f);
uiPanel.Top = new StyleDimension(6f, 0.0f);
uiPanel.VAlign = 0.0f;
UIElement uiElement = (UIElement) uiPanel;
uiElement.SetPadding(0.0f);
for (int index = val2 - 1; index >= 0; --index)
{
string str = "Images/UI/Bestiary/Icon_Rank_Light";
if (index >= num5)
str = "Images/UI/Bestiary/Icon_Rank_Dim";
UIImage uiImage1 = new UIImage(Main.Assets.Request<Texture2D>(str, (AssetRequestMode) 1));
uiImage1.Left = new StyleDimension((float) ((double) (num4 * (index % val1)) - (double) num7 * 0.5 + (double) num1 * 0.5), 0.0f);
uiImage1.Top = new StyleDimension((float) ((double) (num4 * (index / val1)) - num8 * 0.5 + (double) num2 * 0.5), 0.0f);
uiImage1.HAlign = 0.5f;
uiImage1.VAlign = 0.5f;
UIImage uiImage2 = uiImage1;
uiElement.Append((UIElement) uiImage2);
}
return uiElement;
}
}
}