// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.UI.Elements.UIWorldListItem // Assembly: Terraria, Version=1.3.5.3, Culture=neutral, PublicKeyToken=null // MVID: 68659D26-2BE6-448F-8663-74FA559E6F08 // 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.OS; using Terraria.Graphics; using Terraria.IO; using Terraria.Localization; using Terraria.Social; using Terraria.UI; namespace Terraria.GameContent.UI.Elements { public class UIWorldListItem : UIPanel { private WorldFileData _data; private Texture2D _dividerTexture; private Texture2D _innerPanelTexture; private UIImage _worldIcon; private UIText _buttonLabel; private UIText _deleteButtonLabel; private Texture2D _buttonCloudActiveTexture; private Texture2D _buttonCloudInactiveTexture; private Texture2D _buttonFavoriteActiveTexture; private Texture2D _buttonFavoriteInactiveTexture; private Texture2D _buttonPlayTexture; private Texture2D _buttonSeedTexture; private Texture2D _buttonDeleteTexture; private UIImageButton _deleteButton; public bool IsFavorite => this._data.IsFavorite; public UIWorldListItem(WorldFileData data, int snapPointIndex) { this._data = data; this.LoadTextures(); this.InitializeAppearance(); this._worldIcon = new UIImage(this.GetIcon()); this._worldIcon.Left.Set(4f, 0.0f); this._worldIcon.OnDoubleClick += new UIElement.MouseEvent(this.PlayGame); this.Append((UIElement) this._worldIcon); float pixels1 = 4f; UIImageButton uiImageButton1 = new UIImageButton(this._buttonPlayTexture); uiImageButton1.VAlign = 1f; uiImageButton1.Left.Set(pixels1, 0.0f); uiImageButton1.OnClick += new UIElement.MouseEvent(this.PlayGame); this.OnDoubleClick += new UIElement.MouseEvent(this.PlayGame); uiImageButton1.OnMouseOver += new UIElement.MouseEvent(this.PlayMouseOver); uiImageButton1.OnMouseOut += new UIElement.MouseEvent(this.ButtonMouseOut); this.Append((UIElement) uiImageButton1); float pixels2 = pixels1 + 24f; UIImageButton uiImageButton2 = new UIImageButton(this._data.IsFavorite ? this._buttonFavoriteActiveTexture : this._buttonFavoriteInactiveTexture); uiImageButton2.VAlign = 1f; uiImageButton2.Left.Set(pixels2, 0.0f); uiImageButton2.OnClick += new UIElement.MouseEvent(this.FavoriteButtonClick); uiImageButton2.OnMouseOver += new UIElement.MouseEvent(this.FavoriteMouseOver); uiImageButton2.OnMouseOut += new UIElement.MouseEvent(this.ButtonMouseOut); uiImageButton2.SetVisibility(1f, this._data.IsFavorite ? 0.8f : 0.4f); this.Append((UIElement) uiImageButton2); float pixels3 = pixels2 + 24f; if (SocialAPI.Cloud != null) { UIImageButton uiImageButton3 = new UIImageButton(this._data.IsCloudSave ? this._buttonCloudActiveTexture : this._buttonCloudInactiveTexture); uiImageButton3.VAlign = 1f; uiImageButton3.Left.Set(pixels3, 0.0f); uiImageButton3.OnClick += new UIElement.MouseEvent(this.CloudButtonClick); uiImageButton3.OnMouseOver += new UIElement.MouseEvent(this.CloudMouseOver); uiImageButton3.OnMouseOut += new UIElement.MouseEvent(this.ButtonMouseOut); uiImageButton3.SetSnapPoint("Cloud", snapPointIndex); this.Append((UIElement) uiImageButton3); pixels3 += 24f; } if (Main.UseSeedUI && this._data.WorldGeneratorVersion != 0UL) { UIImageButton uiImageButton4 = new UIImageButton(this._buttonSeedTexture); uiImageButton4.VAlign = 1f; uiImageButton4.Left.Set(pixels3, 0.0f); uiImageButton4.OnClick += new UIElement.MouseEvent(this.SeedButtonClick); uiImageButton4.OnMouseOver += new UIElement.MouseEvent(this.SeedMouseOver); uiImageButton4.OnMouseOut += new UIElement.MouseEvent(this.ButtonMouseOut); uiImageButton4.SetSnapPoint("Seed", snapPointIndex); this.Append((UIElement) uiImageButton4); pixels3 += 24f; } UIImageButton uiImageButton5 = new UIImageButton(this._buttonDeleteTexture); uiImageButton5.VAlign = 1f; uiImageButton5.HAlign = 1f; uiImageButton5.OnClick += new UIElement.MouseEvent(this.DeleteButtonClick); uiImageButton5.OnMouseOver += new UIElement.MouseEvent(this.DeleteMouseOver); uiImageButton5.OnMouseOut += new UIElement.MouseEvent(this.DeleteMouseOut); this._deleteButton = uiImageButton5; if (!this._data.IsFavorite) this.Append((UIElement) uiImageButton5); float pixels4 = pixels3 + 4f; this._buttonLabel = new UIText(""); this._buttonLabel.VAlign = 1f; this._buttonLabel.Left.Set(pixels4, 0.0f); this._buttonLabel.Top.Set(-3f, 0.0f); this.Append((UIElement) this._buttonLabel); this._deleteButtonLabel = new UIText(""); this._deleteButtonLabel.VAlign = 1f; this._deleteButtonLabel.HAlign = 1f; this._deleteButtonLabel.Left.Set(-30f, 0.0f); this._deleteButtonLabel.Top.Set(-3f, 0.0f); this.Append((UIElement) this._deleteButtonLabel); uiImageButton1.SetSnapPoint("Play", snapPointIndex); uiImageButton2.SetSnapPoint("Favorite", snapPointIndex); uiImageButton5.SetSnapPoint("Delete", snapPointIndex); } private void LoadTextures() { this._dividerTexture = TextureManager.Load("Images/UI/Divider"); this._innerPanelTexture = TextureManager.Load("Images/UI/InnerPanelBackground"); this._buttonCloudActiveTexture = TextureManager.Load("Images/UI/ButtonCloudActive"); this._buttonCloudInactiveTexture = TextureManager.Load("Images/UI/ButtonCloudInactive"); this._buttonFavoriteActiveTexture = TextureManager.Load("Images/UI/ButtonFavoriteActive"); this._buttonFavoriteInactiveTexture = TextureManager.Load("Images/UI/ButtonFavoriteInactive"); this._buttonPlayTexture = TextureManager.Load("Images/UI/ButtonPlay"); this._buttonSeedTexture = TextureManager.Load("Images/UI/ButtonSeed"); this._buttonDeleteTexture = TextureManager.Load("Images/UI/ButtonDelete"); } private void InitializeAppearance() { this.Height.Set(96f, 0.0f); this.Width.Set(0.0f, 1f); this.SetPadding(6f); this.BorderColor = new Color(89, 116, 213) * 0.7f; } private Texture2D GetIcon() => TextureManager.Load("Images/UI/Icon" + (this._data.IsHardMode ? "Hallow" : "") + (this._data.HasCorruption ? "Corruption" : "Crimson")); private void FavoriteMouseOver(UIMouseEvent evt, UIElement listeningElement) { if (this._data.IsFavorite) this._buttonLabel.SetText(Language.GetTextValue("UI.Unfavorite")); else this._buttonLabel.SetText(Language.GetTextValue("UI.Favorite")); } private void CloudMouseOver(UIMouseEvent evt, UIElement listeningElement) { if (this._data.IsCloudSave) this._buttonLabel.SetText(Language.GetTextValue("UI.MoveOffCloud")); else this._buttonLabel.SetText(Language.GetTextValue("UI.MoveToCloud")); } private void PlayMouseOver(UIMouseEvent evt, UIElement listeningElement) => this._buttonLabel.SetText(Language.GetTextValue("UI.Play")); private void SeedMouseOver(UIMouseEvent evt, UIElement listeningElement) => this._buttonLabel.SetText(Language.GetTextValue("UI.CopySeed", (object) this._data.SeedText)); private void DeleteMouseOver(UIMouseEvent evt, UIElement listeningElement) => this._deleteButtonLabel.SetText(Language.GetTextValue("UI.Delete")); private void DeleteMouseOut(UIMouseEvent evt, UIElement listeningElement) => this._deleteButtonLabel.SetText(""); private void ButtonMouseOut(UIMouseEvent evt, UIElement listeningElement) => this._buttonLabel.SetText(""); private void CloudButtonClick(UIMouseEvent evt, UIElement listeningElement) { if (this._data.IsCloudSave) this._data.MoveToLocal(); else this._data.MoveToCloud(); ((UIImageButton) evt.Target).SetImage(this._data.IsCloudSave ? this._buttonCloudActiveTexture : this._buttonCloudInactiveTexture); if (this._data.IsCloudSave) this._buttonLabel.SetText(Language.GetTextValue("UI.MoveOffCloud")); else this._buttonLabel.SetText(Language.GetTextValue("UI.MoveToCloud")); } private void DeleteButtonClick(UIMouseEvent evt, UIElement listeningElement) { for (int index = 0; index < Main.WorldList.Count; ++index) { if (Main.WorldList[index] == this._data) { Main.PlaySound(10); Main.selectedWorld = index; Main.menuMode = 9; break; } } } private void PlayGame(UIMouseEvent evt, UIElement listeningElement) { if (listeningElement != evt.Target) return; this._data.SetAsActive(); Main.PlaySound(10); Main.GetInputText(""); Main.menuMode = !Main.menuMultiplayer || SocialAPI.Network == null ? (!Main.menuMultiplayer ? 10 : 30) : 889; if (Main.menuMultiplayer) return; WorldGen.playWorld(); } private void FavoriteButtonClick(UIMouseEvent evt, UIElement listeningElement) { this._data.ToggleFavorite(); ((UIImageButton) evt.Target).SetImage(this._data.IsFavorite ? this._buttonFavoriteActiveTexture : this._buttonFavoriteInactiveTexture); ((UIImageButton) evt.Target).SetVisibility(1f, this._data.IsFavorite ? 0.8f : 0.4f); if (this._data.IsFavorite) { this._buttonLabel.SetText(Language.GetTextValue("UI.Unfavorite")); this.RemoveChild((UIElement) this._deleteButton); } else { this._buttonLabel.SetText(Language.GetTextValue("UI.Favorite")); this.Append((UIElement) this._deleteButton); } if (!(this.Parent.Parent is UIList parent)) return; parent.UpdateOrder(); } private void SeedButtonClick(UIMouseEvent evt, UIElement listeningElement) { ((Platform) Platform.Current).Clipboard = this._data.SeedText; this._buttonLabel.SetText(Language.GetTextValue("UI.SeedCopied")); } public override int CompareTo(object obj) { if (!(obj is UIWorldListItem uiWorldListItem)) return base.CompareTo(obj); if (this.IsFavorite && !uiWorldListItem.IsFavorite) return -1; if (!this.IsFavorite && uiWorldListItem.IsFavorite) return 1; return this._data.Name.CompareTo(uiWorldListItem._data.Name) != 0 ? this._data.Name.CompareTo(uiWorldListItem._data.Name) : this._data.GetFileName().CompareTo(uiWorldListItem._data.GetFileName()); } public override void MouseOver(UIMouseEvent evt) { base.MouseOver(evt); this.BackgroundColor = new Color(73, 94, 171); this.BorderColor = new Color(89, 116, 213); } public override void MouseOut(UIMouseEvent evt) { base.MouseOut(evt); this.BackgroundColor = new Color(63, 82, 151) * 0.7f; this.BorderColor = new Color(89, 116, 213) * 0.7f; } private void DrawPanel(SpriteBatch spriteBatch, Vector2 position, float width) { spriteBatch.Draw(this._innerPanelTexture, position, new Rectangle?(new Rectangle(0, 0, 8, this._innerPanelTexture.Height)), Color.White); spriteBatch.Draw(this._innerPanelTexture, new Vector2(position.X + 8f, position.Y), new Rectangle?(new Rectangle(8, 0, 8, this._innerPanelTexture.Height)), Color.White, 0.0f, Vector2.Zero, new Vector2((float) (((double) width - 16.0) / 8.0), 1f), SpriteEffects.None, 0.0f); spriteBatch.Draw(this._innerPanelTexture, new Vector2((float) ((double) position.X + (double) width - 8.0), position.Y), new Rectangle?(new Rectangle(16, 0, 8, this._innerPanelTexture.Height)), Color.White); } protected override void DrawSelf(SpriteBatch spriteBatch) { base.DrawSelf(spriteBatch); CalculatedStyle innerDimensions = this.GetInnerDimensions(); CalculatedStyle dimensions = this._worldIcon.GetDimensions(); float x1 = dimensions.X + dimensions.Width; Color color = this._data.IsValid ? Color.White : Color.Red; Utils.DrawBorderString(spriteBatch, this._data.Name, new Vector2(x1 + 6f, dimensions.Y - 2f), color); spriteBatch.Draw(this._dividerTexture, new Vector2(x1, innerDimensions.Y + 21f), new Rectangle?(), Color.White, 0.0f, Vector2.Zero, new Vector2((float) (((double) this.GetDimensions().X + (double) this.GetDimensions().Width - (double) x1) / 8.0), 1f), SpriteEffects.None, 0.0f); Vector2 position = new Vector2(x1 + 6f, innerDimensions.Y + 29f); float width1 = 100f; this.DrawPanel(spriteBatch, position, width1); string text = this._data.IsExpertMode ? Language.GetTextValue("UI.Expert") : Language.GetTextValue("UI.Normal"); float x2 = Main.fontMouseText.MeasureString(text).X; float x3 = (float) ((double) width1 * 0.5 - (double) x2 * 0.5); Utils.DrawBorderString(spriteBatch, text, position + new Vector2(x3, 3f), this._data.IsExpertMode ? new Color(217, 143, 244) : Color.White); position.X += width1 + 5f; float width2 = 150f; if (!GameCulture.English.IsActive) width2 += 40f; this.DrawPanel(spriteBatch, position, width2); string textValue1 = Language.GetTextValue("UI.WorldSizeFormat", (object) this._data.WorldSizeName); float x4 = Main.fontMouseText.MeasureString(textValue1).X; float x5 = (float) ((double) width2 * 0.5 - (double) x4 * 0.5); Utils.DrawBorderString(spriteBatch, textValue1, position + new Vector2(x5, 3f), Color.White); position.X += width2 + 5f; float width3 = innerDimensions.X + innerDimensions.Width - position.X; this.DrawPanel(spriteBatch, position, width3); string textValue2 = Language.GetTextValue("UI.WorldCreatedFormat", !GameCulture.English.IsActive ? (object) this._data.CreationTime.ToShortDateString() : (object) this._data.CreationTime.ToString("d MMMM yyyy")); float x6 = Main.fontMouseText.MeasureString(textValue2).X; float x7 = (float) ((double) width3 * 0.5 - (double) x6 * 0.5); Utils.DrawBorderString(spriteBatch, textValue2, position + new Vector2(x7, 3f), Color.White); position.X += width3 + 5f; } } }