Terraria 1.4.0.5 Source Code

This commit is contained in:
MikeyIsBaeYT 2021-10-26 12:45:26 -04:00
commit 05205f009e
1059 changed files with 563450 additions and 0 deletions

View file

@ -0,0 +1,236 @@
// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Creative.CreativeUI
// 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 Terraria.Audio;
using Terraria.GameContent.NetModules;
using Terraria.GameContent.UI.Elements;
using Terraria.GameContent.UI.States;
using Terraria.Localization;
using Terraria.Net;
using Terraria.UI;
using Terraria.UI.Gamepad;
namespace Terraria.GameContent.Creative
{
public class CreativeUI
{
public const int ItemSlotIndexes_SacrificeItem = 0;
public const int ItemSlotIndexes_Count = 1;
private bool _initialized;
private Asset<Texture2D> _buttonTexture;
private Asset<Texture2D> _buttonBorderTexture;
private Item[] _itemSlotsForUI = new Item[1];
private List<int> _itemIdsAvailableInfinitely = new List<int>();
private UserInterface _powersUI = new UserInterface();
public int GamepadPointIdForInfiniteItemSearchHack = -1;
public bool GamepadMoveToSearchButtonHack;
private UICreativePowersMenu _uiState;
public bool Enabled { get; private set; }
public bool Blocked => Main.LocalPlayer.talkNPC != -1 || Main.LocalPlayer.chest != -1;
public CreativeUI()
{
for (int index = 0; index < this._itemSlotsForUI.Length; ++index)
this._itemSlotsForUI[index] = new Item();
}
public void Initialize()
{
this._buttonTexture = Main.Assets.Request<Texture2D>("Images/UI/Creative/Journey_Toggle", (AssetRequestMode) 1);
this._buttonBorderTexture = Main.Assets.Request<Texture2D>("Images/UI/Creative/Journey_Toggle_MouseOver", (AssetRequestMode) 1);
this._itemIdsAvailableInfinitely.Clear();
this._uiState = new UICreativePowersMenu();
this._powersUI.SetState((UIState) this._uiState);
this._initialized = true;
}
public void Update(GameTime gameTime)
{
if (!this.Enabled || !Main.playerInventory)
return;
this._powersUI.Update(gameTime);
}
public void Draw(SpriteBatch spriteBatch)
{
if (!this._initialized)
this.Initialize();
if (Main.LocalPlayer.difficulty != (byte) 3)
{
this.Enabled = false;
}
else
{
if (this.Blocked)
return;
Vector2 location = new Vector2(28f, 267f);
Vector2 vector2_1 = new Vector2(353f, 258f);
Vector2 vector2_2 = new Vector2(40f, 267f);
Vector2 vector2_3 = new Vector2(50f, 50f);
Vector2 vector2_4 = vector2_1 + vector2_3;
if (Main.screenHeight < 650 && this.Enabled)
location.X += 52f * Main.inventoryScale;
this.DrawToggleButton(spriteBatch, location);
if (!this.Enabled)
return;
this._powersUI.Draw(spriteBatch, Main.gameTimeCache);
}
}
public UIElement ProvideItemSlotElement(int itemSlotContext) => itemSlotContext != 0 ? (UIElement) null : (UIElement) new UIItemSlot(this._itemSlotsForUI, itemSlotContext, 30);
public Item GetItemByIndex(int itemSlotContext) => itemSlotContext != 0 ? (Item) null : this._itemSlotsForUI[itemSlotContext];
public void SetItembyIndex(Item item, int itemSlotContext)
{
if (itemSlotContext != 0)
return;
this._itemSlotsForUI[itemSlotContext] = item;
}
private void DrawToggleButton(SpriteBatch spritebatch, Vector2 location)
{
Vector2 size = this._buttonTexture.Size();
Rectangle rectangle = Utils.CenteredRectangle(location + size / 2f, size);
UILinkPointNavigator.SetPosition(311, rectangle.Center.ToVector2());
spritebatch.Draw(this._buttonTexture.Value, location, new Rectangle?(), Color.White, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
Main.LocalPlayer.creativeInterface = false;
if (!rectangle.Contains(Main.MouseScreen.ToPoint()))
return;
Main.LocalPlayer.creativeInterface = true;
Main.LocalPlayer.mouseInterface = true;
if (this.Enabled)
Main.instance.MouseText(Language.GetTextValue("CreativePowers.PowersMenuOpen"));
else
Main.instance.MouseText(Language.GetTextValue("CreativePowers.PowersMenuClosed"));
spritebatch.Draw(this._buttonBorderTexture.Value, location, new Rectangle?(), Color.White, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
if (!Main.mouseLeft || !Main.mouseLeftRelease)
return;
this.ToggleMenu();
}
public void SwapItem(ref Item item) => Utils.Swap<Item>(ref item, ref this._itemSlotsForUI[0]);
public void CloseMenu()
{
this.Enabled = false;
if (this._itemSlotsForUI[0].stack <= 0)
return;
this._itemSlotsForUI[0] = Main.LocalPlayer.GetItem(Main.myPlayer, this._itemSlotsForUI[0], GetItemSettings.InventoryUIToInventorySettings);
}
public void ToggleMenu()
{
this.Enabled = !this.Enabled;
SoundEngine.PlaySound(12);
if (this.Enabled)
{
Recipe.FindRecipes();
Main.LocalPlayer.tileEntityAnchor.Clear();
this.RefreshAvailableInfiniteItemsList();
}
else
{
if (this._itemSlotsForUI[0].stack <= 0)
return;
this._itemSlotsForUI[0] = Main.LocalPlayer.GetItem(Main.myPlayer, this._itemSlotsForUI[0], GetItemSettings.InventoryUIToInventorySettings);
}
}
public bool IsShowingResearchMenu() => this.Enabled && this._uiState != null && this._uiState.IsShowingResearchMenu;
public bool ShouldDrawSacrificeArea()
{
if (!this._itemSlotsForUI[0].IsAir)
return true;
Item mouseItem = Main.mouseItem;
int amountNeeded;
return !mouseItem.IsAir && CreativeItemSacrificesCatalog.Instance.TryGetSacrificeCountCapToUnlockInfiniteItems(mouseItem.type, out amountNeeded) && Main.LocalPlayerCreativeTracker.ItemSacrifices.GetSacrificeCount(mouseItem.type) < amountNeeded;
}
public bool GetSacrificeNumbers(
out int itemIdChecked,
out int amountWeHave,
out int amountNeededTotal)
{
amountWeHave = 0;
amountNeededTotal = 0;
itemIdChecked = 0;
Item obj = this._itemSlotsForUI[0];
if (!obj.IsAir)
itemIdChecked = obj.type;
if (!CreativeItemSacrificesCatalog.Instance.TryGetSacrificeCountCapToUnlockInfiniteItems(obj.type, out amountNeededTotal))
return false;
Main.LocalPlayerCreativeTracker.ItemSacrifices.SacrificesCountByItemIdCache.TryGetValue(obj.type, out amountWeHave);
return true;
}
public CreativeUI.ItemSacrificeResult SacrificeItem(out int amountWeSacrificed)
{
int amountNeeded = 0;
amountWeSacrificed = 0;
Item newItem = this._itemSlotsForUI[0];
if (!CreativeItemSacrificesCatalog.Instance.TryGetSacrificeCountCapToUnlockInfiniteItems(newItem.type, out amountNeeded))
return CreativeUI.ItemSacrificeResult.CannotSacrifice;
int num1 = 0;
Main.LocalPlayerCreativeTracker.ItemSacrifices.SacrificesCountByItemIdCache.TryGetValue(newItem.type, out num1);
int val1 = Utils.Clamp<int>(amountNeeded - num1, 0, amountNeeded);
if (val1 == 0)
return CreativeUI.ItemSacrificeResult.CannotSacrifice;
int amount = Math.Min(val1, newItem.stack);
if (!Main.ServerSideCharacter)
{
Main.LocalPlayerCreativeTracker.ItemSacrifices.RegisterItemSacrifice(newItem.type, amount);
}
else
{
NetPacket packet = NetCreativeUnlocksPlayerReportModule.SerializeSacrificeRequest(newItem.type, amount);
NetManager.Instance.SendToServerOrLoopback(packet);
}
int num2 = amount == val1 ? 1 : 0;
newItem.stack -= amount;
if (newItem.stack <= 0)
newItem.TurnToAir();
amountWeSacrificed = amount;
this.RefreshAvailableInfiniteItemsList();
if (newItem.stack > 0)
{
newItem.position.X = Main.player[Main.myPlayer].Center.X - (float) (newItem.width / 2);
newItem.position.Y = Main.player[Main.myPlayer].Center.Y - (float) (newItem.height / 2);
this._itemSlotsForUI[0] = Main.LocalPlayer.GetItem(Main.myPlayer, newItem, GetItemSettings.InventoryUIToInventorySettings);
}
return num2 == 0 ? CreativeUI.ItemSacrificeResult.SacrificedButNotDone : CreativeUI.ItemSacrificeResult.SacrificedAndDone;
}
private void RefreshAvailableInfiniteItemsList()
{
this._itemIdsAvailableInfinitely.Clear();
CreativeItemSacrificesCatalog.Instance.FillListOfItemsThatCanBeObtainedInfinitely(this._itemIdsAvailableInfinitely);
}
public void Reset()
{
for (int index = 0; index < this._itemSlotsForUI.Length; ++index)
this._itemSlotsForUI[index].TurnToAir();
this._initialized = false;
this.Enabled = false;
}
public enum ItemSacrificeResult
{
CannotSacrifice,
SacrificedButNotDone,
SacrificedAndDone,
}
}
}