terraria-source-code/GameContent/UI/States/UIAchievementsMenu.cs
2021-10-26 12:45:26 -04:00

229 lines
9.4 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.UI.States.UIAchievementsMenu
// 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.Collections.Generic;
using Terraria.Achievements;
using Terraria.Audio;
using Terraria.GameContent.UI.Elements;
using Terraria.GameInput;
using Terraria.ID;
using Terraria.Localization;
using Terraria.UI;
using Terraria.UI.Gamepad;
namespace Terraria.GameContent.UI.States
{
public class UIAchievementsMenu : UIState
{
private UIList _achievementsList;
private List<UIAchievementListItem> _achievementElements = new List<UIAchievementListItem>();
private List<UIToggleImage> _categoryButtons = new List<UIToggleImage>();
private UIElement _backpanel;
private UIElement _outerContainer;
public void InitializePage()
{
this.RemoveAllChildren();
this._categoryButtons.Clear();
this._achievementElements.Clear();
this._achievementsList = (UIList) null;
bool largeForOtherLanguages = true;
int num = largeForOtherLanguages.ToInt() * 100;
UIElement element1 = new UIElement();
element1.Width.Set(0.0f, 0.8f);
element1.MaxWidth.Set(800f + (float) num, 0.0f);
element1.MinWidth.Set(600f + (float) num, 0.0f);
element1.Top.Set(220f, 0.0f);
element1.Height.Set(-220f, 1f);
element1.HAlign = 0.5f;
this._outerContainer = element1;
this.Append(element1);
UIPanel uiPanel = new UIPanel();
uiPanel.Width.Set(0.0f, 1f);
uiPanel.Height.Set(-110f, 1f);
uiPanel.BackgroundColor = new Color(33, 43, 79) * 0.8f;
uiPanel.PaddingTop = 0.0f;
element1.Append((UIElement) uiPanel);
this._achievementsList = new UIList();
this._achievementsList.Width.Set(-25f, 1f);
this._achievementsList.Height.Set(-50f, 1f);
this._achievementsList.Top.Set(50f, 0.0f);
this._achievementsList.ListPadding = 5f;
uiPanel.Append((UIElement) this._achievementsList);
UITextPanel<LocalizedText> uiTextPanel1 = new UITextPanel<LocalizedText>(Language.GetText("UI.Achievements"), large: true);
uiTextPanel1.HAlign = 0.5f;
uiTextPanel1.Top.Set(-33f, 0.0f);
uiTextPanel1.SetPadding(13f);
uiTextPanel1.BackgroundColor = new Color(73, 94, 171);
element1.Append((UIElement) uiTextPanel1);
UITextPanel<LocalizedText> uiTextPanel2 = new UITextPanel<LocalizedText>(Language.GetText("UI.Back"), 0.7f, true);
uiTextPanel2.Width.Set(-10f, 0.5f);
uiTextPanel2.Height.Set(50f, 0.0f);
uiTextPanel2.VAlign = 1f;
uiTextPanel2.HAlign = 0.5f;
uiTextPanel2.Top.Set(-45f, 0.0f);
uiTextPanel2.OnMouseOver += new UIElement.MouseEvent(this.FadedMouseOver);
uiTextPanel2.OnMouseOut += new UIElement.MouseEvent(this.FadedMouseOut);
uiTextPanel2.OnClick += new UIElement.MouseEvent(this.GoBackClick);
element1.Append((UIElement) uiTextPanel2);
this._backpanel = (UIElement) uiTextPanel2;
List<Achievement> achievementsList = Main.Achievements.CreateAchievementsList();
for (int index = 0; index < achievementsList.Count; ++index)
{
UIAchievementListItem achievementListItem = new UIAchievementListItem(achievementsList[index], largeForOtherLanguages);
this._achievementsList.Add((UIElement) achievementListItem);
this._achievementElements.Add(achievementListItem);
}
UIScrollbar scrollbar = new UIScrollbar();
scrollbar.SetView(100f, 1000f);
scrollbar.Height.Set(-50f, 1f);
scrollbar.Top.Set(50f, 0.0f);
scrollbar.HAlign = 1f;
uiPanel.Append((UIElement) scrollbar);
this._achievementsList.SetScrollbar(scrollbar);
UIElement element2 = new UIElement();
element2.Width.Set(0.0f, 1f);
element2.Height.Set(32f, 0.0f);
element2.Top.Set(10f, 0.0f);
Asset<Texture2D> texture = Main.Assets.Request<Texture2D>("Images/UI/Achievement_Categories", (AssetRequestMode) 1);
for (int index = 0; index < 4; ++index)
{
UIToggleImage uiToggleImage = new UIToggleImage(texture, 32, 32, new Point(34 * index, 0), new Point(34 * index, 34));
uiToggleImage.Left.Set((float) (index * 36 + 8), 0.0f);
uiToggleImage.SetState(true);
uiToggleImage.OnClick += new UIElement.MouseEvent(this.FilterList);
this._categoryButtons.Add(uiToggleImage);
element2.Append((UIElement) uiToggleImage);
}
uiPanel.Append(element2);
}
public override void Draw(SpriteBatch spriteBatch)
{
base.Draw(spriteBatch);
for (int index = 0; index < this._categoryButtons.Count; ++index)
{
if (this._categoryButtons[index].IsMouseHovering)
{
string textValue;
switch (index)
{
case -1:
textValue = Language.GetTextValue("Achievements.NoCategory");
break;
case 0:
textValue = Language.GetTextValue("Achievements.SlayerCategory");
break;
case 1:
textValue = Language.GetTextValue("Achievements.CollectorCategory");
break;
case 2:
textValue = Language.GetTextValue("Achievements.ExplorerCategory");
break;
case 3:
textValue = Language.GetTextValue("Achievements.ChallengerCategory");
break;
default:
textValue = Language.GetTextValue("Achievements.NoCategory");
break;
}
float x = FontAssets.MouseText.Value.MeasureString(textValue).X;
Vector2 vector2 = new Vector2((float) Main.mouseX, (float) Main.mouseY) + new Vector2(16f);
if ((double) vector2.Y > (double) (Main.screenHeight - 30))
vector2.Y = (float) (Main.screenHeight - 30);
if ((double) vector2.X > (double) Main.screenWidth - (double) x)
vector2.X = (float) (Main.screenWidth - 460);
Utils.DrawBorderStringFourWay(spriteBatch, FontAssets.MouseText.Value, textValue, vector2.X, vector2.Y, new Color((int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor), Color.Black, Vector2.Zero);
break;
}
}
this.SetupGamepadPoints(spriteBatch);
}
public void GotoAchievement(Achievement achievement) => this._achievementsList.Goto((UIList.ElementSearchMethod) (element => element is UIAchievementListItem achievementListItem && achievementListItem.GetAchievement() == achievement));
private void GoBackClick(UIMouseEvent evt, UIElement listeningElement)
{
Main.menuMode = 0;
IngameFancyUI.Close();
}
private void FadedMouseOver(UIMouseEvent evt, UIElement listeningElement)
{
SoundEngine.PlaySound(12);
((UIPanel) evt.Target).BackgroundColor = new Color(73, 94, 171);
((UIPanel) evt.Target).BorderColor = Colors.FancyUIFatButtonMouseOver;
}
private void FadedMouseOut(UIMouseEvent evt, UIElement listeningElement)
{
((UIPanel) evt.Target).BackgroundColor = new Color(63, 82, 151) * 0.8f;
((UIPanel) evt.Target).BorderColor = Color.Black;
}
private void FilterList(UIMouseEvent evt, UIElement listeningElement)
{
SoundEngine.PlaySound(12);
this._achievementsList.Clear();
foreach (UIAchievementListItem achievementElement in this._achievementElements)
{
if (this._categoryButtons[(int) achievementElement.GetAchievement().Category].IsOn)
this._achievementsList.Add((UIElement) achievementElement);
}
this.Recalculate();
}
public override void OnActivate()
{
this.InitializePage();
if (Main.gameMenu)
{
this._outerContainer.Top.Set(220f, 0.0f);
this._outerContainer.Height.Set(-220f, 1f);
}
else
{
this._outerContainer.Top.Set(120f, 0.0f);
this._outerContainer.Height.Set(-120f, 1f);
}
this._achievementsList.UpdateOrder();
if (!PlayerInput.UsingGamepadUI)
return;
UILinkPointNavigator.ChangePoint(3002);
}
private void SetupGamepadPoints(SpriteBatch spriteBatch)
{
UILinkPointNavigator.Shortcuts.BackButtonCommand = 3;
int ID = 3000;
UILinkPointNavigator.SetPosition(ID, this._backpanel.GetInnerDimensions().ToRectangle().Center.ToVector2());
UILinkPointNavigator.SetPosition(ID + 1, this._outerContainer.GetInnerDimensions().ToRectangle().Center.ToVector2());
int key = ID;
UILinkPoint point1 = UILinkPointNavigator.Points[key];
point1.Unlink();
point1.Up = key + 1;
int num = key + 1;
UILinkPoint point2 = UILinkPointNavigator.Points[num];
point2.Unlink();
point2.Up = num + 1;
point2.Down = num - 1;
for (int index = 0; index < this._categoryButtons.Count; ++index)
{
++num;
UILinkPointNavigator.Shortcuts.FANCYUI_HIGHEST_INDEX = num;
UILinkPointNavigator.SetPosition(num, this._categoryButtons[index].GetInnerDimensions().ToRectangle().Center.ToVector2());
UILinkPoint point3 = UILinkPointNavigator.Points[num];
point3.Unlink();
point3.Left = index == 0 ? -3 : num - 1;
point3.Right = index == this._categoryButtons.Count - 1 ? -4 : num + 1;
point3.Down = ID;
}
}
}
}