refactor BuyBackCollectables
This commit formats/documents/simplifies code, standardises naming conventions, removes unused code, etc.
This commit is contained in:
parent
18fc258f80
commit
6c2555d748
|
@ -35,7 +35,6 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Class1.cs" />
|
||||
<Compile Include="Collections_Buy_Back.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UpdatedCollections.cs" />
|
||||
</ItemGroup>
|
||||
|
|
|
@ -1,122 +1,111 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using StardewModdingAPI;
|
||||
using StardewModdingAPI.Events;
|
||||
using StardewValley;
|
||||
using StardewValley.Menus;
|
||||
|
||||
namespace Omegasis.BuyBackCollectables
|
||||
{
|
||||
public class Class1 : Mod
|
||||
/// <summary>The mod entry point.</summary>
|
||||
public class BuyBackCollectables : Mod
|
||||
{
|
||||
string key_binding = "B";
|
||||
public static double cost = 3.0;
|
||||
bool game_loaded = false;
|
||||
/*********
|
||||
** Properties
|
||||
*********/
|
||||
/// <summary>The key which shows the menu.</summary>
|
||||
private string KeyBinding = "B";
|
||||
|
||||
/// <summary>The multiplier applied to the cost of buying back a collectable.</summary>
|
||||
private double CostMultiplier = 3.0;
|
||||
|
||||
/// <summary>Whether the player loaded a save.</summary>
|
||||
private bool IsGameLoaded;
|
||||
|
||||
|
||||
public static List<String> debugList;
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>The mod entry point, called after the mod is first loaded.</summary>
|
||||
/// <param name="helper">Provides simplified APIs for writing mods.</param>
|
||||
public override void Entry(IModHelper helper)
|
||||
{
|
||||
//set up all of my events here
|
||||
StardewModdingAPI.Events.SaveEvents.AfterLoad+= PlayerEvents_LoadedGame;
|
||||
StardewModdingAPI.Events.ControlEvents.KeyPressed += ControlEvents_KeyPressed;
|
||||
StardewModdingAPI.Events.GameEvents.OneSecondTick += GameEvents_OneSecondTick;
|
||||
debugList = new List<string>();
|
||||
SaveEvents.AfterLoad += this.SaveEvents_AfterLoad;
|
||||
ControlEvents.KeyPressed += this.ControlEvents_KeyPressed;
|
||||
}
|
||||
|
||||
private void GameEvents_OneSecondTick(object sender, EventArgs e)
|
||||
|
||||
/*********
|
||||
** Private methods
|
||||
*********/
|
||||
/// <summary>The method invoked after the player loads a save.</summary>
|
||||
/// <param name="sender">The event sender.</param>
|
||||
/// <param name="e">The event data.</param>
|
||||
public void SaveEvents_AfterLoad(object sender, EventArgs e)
|
||||
{
|
||||
if (debugList.Count == 0) return;
|
||||
foreach(var v in debugList)
|
||||
{
|
||||
this.Monitor.Log(v);
|
||||
}
|
||||
debugList.Clear();
|
||||
this.IsGameLoaded = true;
|
||||
this.LoadConfig();
|
||||
this.WriteConfig();
|
||||
}
|
||||
|
||||
public void ControlEvents_KeyPressed(object sender, StardewModdingAPI.Events.EventArgsKeyPressed e)
|
||||
/// <summary>The method invoked when the presses a keyboard button.</summary>
|
||||
/// <param name="sender">The event sender.</param>
|
||||
/// <param name="e">The event data.</param>
|
||||
public void ControlEvents_KeyPressed(object sender, EventArgsKeyPressed e)
|
||||
{
|
||||
if (Game1.player == null) return;
|
||||
if (Game1.player.currentLocation == null) return;
|
||||
if (game_loaded == false) return;
|
||||
if (Game1.player == null || Game1.player.currentLocation == null || !this.IsGameLoaded || Game1.activeClickableMenu != null)
|
||||
return;
|
||||
|
||||
if (e.KeyPressed.ToString() == key_binding) //if the key is pressed, load my cusom save function
|
||||
{
|
||||
if (Game1.activeClickableMenu != null) return;
|
||||
else
|
||||
{
|
||||
Game1.activeClickableMenu = new UpdatedCollectionsPage(Game1.viewport.Width / 2 - (800 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2, 800 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2);
|
||||
}
|
||||
}
|
||||
if (e.KeyPressed.ToString() == this.KeyBinding)
|
||||
Game1.activeClickableMenu = new BuyBackMenu(this.CostMultiplier);
|
||||
}
|
||||
|
||||
public void PlayerEvents_LoadedGame(object sender, EventArgs e)
|
||||
{
|
||||
game_loaded = true;
|
||||
DataLoader_Settings();
|
||||
MyWritter_Settings();
|
||||
}
|
||||
|
||||
void DataLoader_Settings()
|
||||
/// <summary>Load the configuration settings.</summary>
|
||||
private void LoadConfig()
|
||||
{
|
||||
//loads the data to the variables upon loading the game.
|
||||
string myname = StardewValley.Game1.player.name;
|
||||
string mylocation = Path.Combine(Helper.DirectoryPath, "BuyBack_Config");
|
||||
string mylocation2 = mylocation;
|
||||
string mylocation3 = mylocation2 + ".txt";
|
||||
if (!File.Exists(mylocation3)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out.
|
||||
string path = Path.Combine(Helper.DirectoryPath, "BuyBack_Config.txt");
|
||||
if (!File.Exists(path)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out.
|
||||
{
|
||||
key_binding = "B";
|
||||
cost = 3.0;
|
||||
this.KeyBinding = "B";
|
||||
this.CostMultiplier = 3.0;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
string[] readtext = File.ReadAllLines(mylocation3);
|
||||
key_binding = Convert.ToString(readtext[3]);
|
||||
cost = Convert.ToDouble(readtext[5]);
|
||||
string[] text = File.ReadAllLines(path);
|
||||
this.KeyBinding = Convert.ToString(text[3]);
|
||||
this.CostMultiplier = Convert.ToDouble(text[5]);
|
||||
}
|
||||
}
|
||||
|
||||
void MyWritter_Settings()
|
||||
/// <summary>Save the configuration settings.</summary>
|
||||
private void WriteConfig()
|
||||
{
|
||||
//write all of my info to a text file.
|
||||
string myname = StardewValley.Game1.player.name;
|
||||
string mylocation = Path.Combine(Helper.DirectoryPath, "BuyBack_Config");
|
||||
string mylocation2 = mylocation;
|
||||
string mylocation3 = mylocation2 + ".txt";
|
||||
string[] mystring3 = new string[20];
|
||||
if (!File.Exists(mylocation3))
|
||||
string path = Path.Combine(Helper.DirectoryPath, "BuyBack_Config.txt");
|
||||
string[] text = new string[20];
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
Monitor.Log("BuyBack Collections: Config not found. Creating it now.");
|
||||
this.Monitor.Log("BuyBack Collections: Config not found. Creating it now.");
|
||||
|
||||
mystring3[0] = "Config: Buy Back Collections. Feel free to mess with these settings.";
|
||||
mystring3[1] = "====================================================================================";
|
||||
mystring3[2] = "Key binding";
|
||||
mystring3[3] = key_binding.ToString();
|
||||
mystring3[4] = "Collectables Multiplier Cost: Sell Value * value listed below";
|
||||
mystring3[5] = cost.ToString();
|
||||
File.WriteAllLines(mylocation3, mystring3);
|
||||
text[0] = "Config: Buy Back Collections. Feel free to mess with these settings.";
|
||||
text[1] = "====================================================================================";
|
||||
text[2] = "Key binding";
|
||||
text[3] = this.KeyBinding;
|
||||
text[4] = "Collectables Multiplier Cost: Sell Value * value listed below";
|
||||
text[5] = this.CostMultiplier.ToString();
|
||||
File.WriteAllLines(path, text);
|
||||
}
|
||||
else
|
||||
{
|
||||
//write out the info to a text file at the end of a day. This will run if it doesnt exist.
|
||||
mystring3[0] = "Config: Buy Back Collections. Feel free to mess with these settings.";
|
||||
mystring3[1] = "====================================================================================";
|
||||
mystring3[2] = "Key binding";
|
||||
mystring3[3] = key_binding.ToString();
|
||||
mystring3[4] = "Collectables Multiplier Cost: Sell Value * value listed below";
|
||||
mystring3[5] = cost.ToString();
|
||||
File.WriteAllLines(mylocation3, mystring3);
|
||||
text[0] = "Config: Buy Back Collections. Feel free to mess with these settings.";
|
||||
text[1] = "====================================================================================";
|
||||
text[2] = "Key binding";
|
||||
text[3] = this.KeyBinding;
|
||||
text[4] = "Collectables Multiplier Cost: Sell Value * value listed below";
|
||||
text[5] = this.CostMultiplier.ToString();
|
||||
File.WriteAllLines(path, text);
|
||||
}
|
||||
}
|
||||
|
||||
public void debugMessage(string s)
|
||||
{
|
||||
this.Monitor.Log(s);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//end class
|
|
@ -1,445 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using StardewModdingAPI;
|
||||
using StardewValley;
|
||||
using StardewValley.Menus;
|
||||
using Object = StardewValley.Object;
|
||||
|
||||
namespace Omegasis.BuyBackCollectables
|
||||
{
|
||||
public class Collections_Buy_Back : IClickableMenu
|
||||
{
|
||||
public const int organicsTab = 0;
|
||||
|
||||
public const int fishTab = 1;
|
||||
|
||||
public const int archaeologyTab = 2;
|
||||
|
||||
public const int mineralsTab = 3;
|
||||
|
||||
public const int cookingTab = 4;
|
||||
|
||||
public const int achievementsTab = 5;
|
||||
|
||||
public const int distanceFromMenuBottomBeforeNewPage = 128;
|
||||
|
||||
public static int widthToMoveActiveTab = Game1.tileSize / 8;
|
||||
|
||||
public string descriptionText = "";
|
||||
|
||||
public string hoverText = "";
|
||||
|
||||
public ClickableTextureComponent backButton;
|
||||
|
||||
public ClickableTextureComponent forwardButton;
|
||||
|
||||
public List<ClickableTextureComponent> sideTabs = new List<ClickableTextureComponent>();
|
||||
|
||||
public int currentTab;
|
||||
|
||||
public int currentPage;
|
||||
|
||||
public Dictionary<int, List<List<ClickableTextureComponent>>> collections = new Dictionary<int, List<List<ClickableTextureComponent>>>();
|
||||
|
||||
public int value;
|
||||
|
||||
public Item new_item;
|
||||
|
||||
public Collections_Buy_Back(int x, int y, int width, int height) : base(x, y, width, height, false)
|
||||
{
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + CollectionsPage.widthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", "Items Shipped (Farm & Forage)", Game1.mouseCursors, new Rectangle(640, 80, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(0, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", "Fish", Game1.mouseCursors, new Rectangle(640, 64, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(1, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", "Artifacts", Game1.mouseCursors, new Rectangle(656, 64, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(2, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", "Minerals", Game1.mouseCursors, new Rectangle(672, 64, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(3, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", "Cooking", Game1.mouseCursors, new Rectangle(688, 64, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(4, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", "Achievements", Game1.mouseCursors, new Rectangle(656, 80, 16, 16), (float)Game1.pixelZoom));
|
||||
this.collections.Add(5, new List<List<ClickableTextureComponent>>());
|
||||
Collections_Buy_Back.widthToMoveActiveTab = Game1.tileSize / 8;
|
||||
this.backButton = new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(352, 495, 12, 11), (float)Game1.pixelZoom, false);
|
||||
this.forwardButton = new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(365, 495, 12, 11), (float)Game1.pixelZoom, false);
|
||||
int[] array = new int[this.sideTabs.Count<ClickableTextureComponent>()];
|
||||
int num = this.xPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearSideBorder;
|
||||
int num2 = this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4;
|
||||
int num3 = 10;
|
||||
foreach (KeyValuePair<int, string> current in Game1.objectInformation)
|
||||
{
|
||||
string text = current.Value.Split(new char[]
|
||||
{
|
||||
'/'
|
||||
})[3];
|
||||
bool flag = false;
|
||||
int num4;
|
||||
if (text.Contains("Arch"))
|
||||
{
|
||||
num4 = 2;
|
||||
if (Game1.player.archaeologyFound.ContainsKey(current.Key))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Fish"))
|
||||
{
|
||||
if (current.Key >= 167 && current.Key < 173)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
num4 = 1;
|
||||
if (Game1.player.fishCaught.ContainsKey(current.Key))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Mineral") || text.Substring(text.Count<char>() - 3).Equals("-2"))
|
||||
{
|
||||
num4 = 3;
|
||||
if (Game1.player.mineralsFound.ContainsKey(current.Key))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Cooking") || text.Substring(text.Count<char>() - 3).Equals("-7"))
|
||||
{
|
||||
num4 = 4;
|
||||
if (Game1.player.recipesCooked.ContainsKey(current.Key))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
if (current.Key == 217 || current.Key == 772)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (current.Key == 773)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!StardewValley.Object.isPotentialBasicShippedCategory(current.Key, text.Substring(text.Count<char>() - 3)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
num4 = 0;
|
||||
if (Game1.player.basicShipped.ContainsKey(current.Key))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
int x2 = num + array[num4] % num3 * (Game1.tileSize + 4);
|
||||
int num5 = num2 + array[num4] / num3 * (Game1.tileSize + 4);
|
||||
if (num5 > this.yPositionOnScreen + height - 128)
|
||||
{
|
||||
this.collections[num4].Add(new List<ClickableTextureComponent>());
|
||||
array[num4] = 0;
|
||||
x2 = num;
|
||||
num5 = num2;
|
||||
}
|
||||
if (this.collections[num4].Count<List<ClickableTextureComponent>>() == 0)
|
||||
{
|
||||
this.collections[num4].Add(new List<ClickableTextureComponent>());
|
||||
}
|
||||
this.collections[num4].Last<List<ClickableTextureComponent>>().Add(new ClickableTextureComponent("",new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), current.Key + " " + flag, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, current.Key, 16, 16), (float)Game1.pixelZoom, false));
|
||||
array[num4]++;
|
||||
}
|
||||
if (this.collections[5].Count<List<ClickableTextureComponent>>() == 0)
|
||||
{
|
||||
this.collections[5].Add(new List<ClickableTextureComponent>());
|
||||
}
|
||||
foreach (KeyValuePair<int, string> current2 in Game1.achievements)
|
||||
{
|
||||
bool flag2 = Game1.player.achievements.Contains(current2.Key);
|
||||
string[] array2 = current2.Value.Split(new char[]
|
||||
{
|
||||
'^'
|
||||
});
|
||||
if (flag2 || (array2[2].Equals("true") && (array2[3].Equals("-1") || this.farmerHasAchievements(array2[3]))))
|
||||
{
|
||||
int x3 = num + array[5] % num3 * (Game1.tileSize + 4);
|
||||
int y2 = num2 + array[5] / num3 * (Game1.tileSize + 4);
|
||||
this.collections[5][0].Add(new ClickableTextureComponent("",new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), current2.Key + " " + flag2, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25, -1, -1), 1f, false));
|
||||
array[5]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool farmerHasAchievements(string listOfAchievementNumbers)
|
||||
{
|
||||
string[] array = listOfAchievementNumbers.Split(new char[]
|
||||
{
|
||||
' '
|
||||
});
|
||||
string[] array2 = array;
|
||||
for (int i = 0; i < array2.Length; i++)
|
||||
{
|
||||
string text = array2[i];
|
||||
if (!Game1.player.achievements.Contains(Convert.ToInt32(text)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void receiveLeftClick(int x, int y, bool playSound = true)
|
||||
{
|
||||
for (int i = 0; i < this.sideTabs.Count; i++)
|
||||
{
|
||||
if (this.sideTabs[i].containsPoint(x, y) && this.currentTab != i)
|
||||
{
|
||||
Game1.playSound("smallSelect");
|
||||
ClickableTextureComponent expr_45_cp_0 = this.sideTabs[this.currentTab];
|
||||
expr_45_cp_0.bounds.X = expr_45_cp_0.bounds.X - CollectionsPage.widthToMoveActiveTab;
|
||||
this.currentTab = i;
|
||||
this.currentPage = 0;
|
||||
ClickableTextureComponent expr_75_cp_0 = this.sideTabs[i];
|
||||
expr_75_cp_0.bounds.X = expr_75_cp_0.bounds.X + CollectionsPage.widthToMoveActiveTab;
|
||||
}
|
||||
}
|
||||
if (this.currentPage > 0 && this.backButton.containsPoint(x, y))
|
||||
{
|
||||
this.currentPage--;
|
||||
Game1.playSound("shwip");
|
||||
this.backButton.scale = this.backButton.baseScale;
|
||||
this.new_item = null;
|
||||
}
|
||||
if (this.currentPage < this.collections[this.currentTab].Count<List<ClickableTextureComponent>>() - 1 && this.forwardButton.containsPoint(x, y))
|
||||
{
|
||||
this.currentPage++;
|
||||
Game1.playSound("shwip");
|
||||
this.forwardButton.scale = this.forwardButton.baseScale;
|
||||
this.new_item = null;
|
||||
}
|
||||
|
||||
|
||||
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
|
||||
{
|
||||
if (current2.containsPoint(x, y))
|
||||
{
|
||||
if (new_item != null)
|
||||
{
|
||||
if (Game1.player.money > new_item.salePrice() * Class1.cost)
|
||||
{
|
||||
Game1.player.money -= value;
|
||||
Game1.player.addItemByMenuIfNecessary(new_item);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override void receiveRightClick(int x, int y, bool playSound = true)
|
||||
{
|
||||
if (new_item != null)
|
||||
{
|
||||
if (Game1.player.money > new_item.salePrice() * Class1.cost)
|
||||
{
|
||||
|
||||
Game1.player.money -= value;
|
||||
Game1.player.addItemByMenuIfNecessary(new_item);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void performHoverAction(int x, int y)
|
||||
{
|
||||
this.descriptionText = "";
|
||||
this.hoverText = "";
|
||||
this.value = -1;
|
||||
|
||||
try {
|
||||
foreach (ClickableTextureComponent current in this.sideTabs)
|
||||
{
|
||||
if (current.containsPoint(x, y))
|
||||
{
|
||||
this.hoverText = current.hoverText;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Class1.debugList.Add(e.ToString());
|
||||
}
|
||||
try {
|
||||
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
|
||||
{
|
||||
if (current2.containsPoint(x, y))
|
||||
{
|
||||
current2.scale = Math.Min(current2.scale + 0.02f, current2.baseScale + 0.1f);
|
||||
if (Convert.ToBoolean(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[1]) || this.currentTab == 5)
|
||||
{
|
||||
this.hoverText = this.createDescription(Convert.ToInt32(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.hoverText = "???";
|
||||
this.new_item = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
current2.scale = Math.Max(current2.scale - 0.02f, current2.baseScale);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Log.AsyncM(this.currentTab);
|
||||
Log.AsyncM(this.currentPage);
|
||||
Log.AsyncM(e);
|
||||
}
|
||||
this.forwardButton.tryHover(x, y, 0.5f);
|
||||
this.backButton.tryHover(x, y, 0.5f);
|
||||
}
|
||||
|
||||
public virtual string createDescription(int index)
|
||||
{
|
||||
string text = "";
|
||||
if (this.currentTab == 5)
|
||||
{
|
||||
string[] array = Game1.achievements[index].Split(new char[]
|
||||
{
|
||||
'^'
|
||||
});
|
||||
text = text + array[0] + Environment.NewLine + Environment.NewLine;
|
||||
text += array[1];
|
||||
new_item = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] array2 = Game1.objectInformation[index].Split(new char[]
|
||||
{
|
||||
'/'
|
||||
});
|
||||
|
||||
string text2 = text;
|
||||
foreach(KeyValuePair<int, string> meh in Game1.objectInformation)
|
||||
{
|
||||
string[] array3 = meh.Value.Split(new char[]
|
||||
{
|
||||
'/'
|
||||
});
|
||||
if (array3[0] == array2[0])
|
||||
{
|
||||
new_item = (Item)new Object(Convert.ToInt32(meh.Key), 1, false, -1, 0);
|
||||
if (new_item.Name == "Stone" || new_item.Name=="stone") new_item = (Item)new Object(390, 1, false, -1, 0);
|
||||
}
|
||||
}
|
||||
text = string.Concat(new string[]
|
||||
{
|
||||
text2,
|
||||
array2[0],
|
||||
Environment.NewLine,
|
||||
Environment.NewLine,
|
||||
Game1.parseText(array2[4], Game1.smallFont, Game1.tileSize * 4),
|
||||
Environment.NewLine,
|
||||
Environment.NewLine
|
||||
});
|
||||
if (array2[3].Contains("Arch"))
|
||||
{
|
||||
text += (Game1.player.archaeologyFound.ContainsKey(index) ? ("Total Found: " + Game1.player.archaeologyFound[index][0]) : "");
|
||||
}
|
||||
else if (array2[3].Contains("Cooking"))
|
||||
{
|
||||
text += (Game1.player.recipesCooked.ContainsKey(index) ? ("Times Cooked: " + Game1.player.recipesCooked[index]) : "");
|
||||
}
|
||||
else if (array2[3].Contains("Fish"))
|
||||
{
|
||||
text = text + "Number Caught: " + (Game1.player.fishCaught.ContainsKey(index) ? Game1.player.fishCaught[index][0] : 0);
|
||||
if (Game1.player.fishCaught.ContainsKey(index) && Game1.player.fishCaught[index][1] > 0)
|
||||
{
|
||||
object obj = text;
|
||||
text = string.Concat(new object[]
|
||||
{
|
||||
obj,
|
||||
Environment.NewLine,
|
||||
"Biggest Catch: ",
|
||||
Game1.player.fishCaught[index][1],
|
||||
" in."
|
||||
});
|
||||
}
|
||||
}
|
||||
else if (array2[3].Contains("Minerals") || array2[3].Substring(array2[3].Count<char>() - 3).Equals("-2"))
|
||||
{
|
||||
text = text + "Number Found: " + (Game1.player.mineralsFound.ContainsKey(index) ? Game1.player.mineralsFound[index] : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
text = text + "Number Shipped: " + (Game1.player.basicShipped.ContainsKey(index) ? Game1.player.basicShipped[index] : 0);
|
||||
}
|
||||
this.value = Convert.ToInt32(array2[1]);
|
||||
this.value =(int)(this.value * Class1.cost);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
public override void draw(SpriteBatch b)
|
||||
{
|
||||
|
||||
foreach (ClickableTextureComponent current in this.sideTabs)
|
||||
{
|
||||
current.draw(b);
|
||||
}
|
||||
if (this.currentPage > 0)
|
||||
{
|
||||
this.backButton.draw(b);
|
||||
}
|
||||
if (this.currentPage < this.collections[this.currentTab].Count<List<ClickableTextureComponent>>() - 1)
|
||||
{
|
||||
this.forwardButton.draw(b);
|
||||
}
|
||||
b.End();
|
||||
b.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null);
|
||||
try
|
||||
{
|
||||
foreach (ClickableTextureComponent current2 in this.collections[1][0])
|
||||
{
|
||||
bool flag = Convert.ToBoolean(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[1]);
|
||||
current2.draw(b, flag ? Color.White : (Color.Black * 0.2f), 0.86f);
|
||||
if (this.currentTab == 5 && flag)
|
||||
{
|
||||
int num = new Random(Convert.ToInt32(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[0])).Next(12);
|
||||
b.Draw(Game1.mouseCursors, new Vector2((float)(current2.bounds.X + 16 + Game1.tileSize / 4), (float)(current2.bounds.Y + 20 + Game1.tileSize / 4)), new Rectangle?(new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2)), Color.White, 0f, new Vector2((float)(Game1.tileSize / 4), (float)(Game1.tileSize / 4)), current2.scale, SpriteEffects.None, 0.88f);
|
||||
}
|
||||
}
|
||||
b.End();
|
||||
b.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);
|
||||
if (!this.hoverText.Equals(""))
|
||||
{
|
||||
IClickableMenu.drawHoverText(b, this.hoverText, Game1.smallFont, 0, 0, this.value, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null);
|
||||
}
|
||||
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getOldMouseX(), (float)Game1.getOldMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, Game1.options.gamepadControls ? 44 : 0, 16, 16)), Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Log.AsyncY(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,421 +9,361 @@ using Object = StardewValley.Object;
|
|||
|
||||
namespace Omegasis.BuyBackCollectables
|
||||
{
|
||||
public class UpdatedCollectionsPage : IClickableMenu
|
||||
/// <summary>The clickable menu which lets the player buy back collectables.</summary>
|
||||
internal class BuyBackMenu : IClickableMenu
|
||||
{
|
||||
public static int widthToMoveActiveTab = Game1.tileSize / 8;
|
||||
/*********
|
||||
** Properties
|
||||
*********/
|
||||
/// <summary>The organics tab ID.</summary>
|
||||
private const int OrganicsTab = 0;
|
||||
|
||||
public const int organicsTab = 0;
|
||||
/// <summary>The fish tab ID.</summary>
|
||||
private const int FishTab = 1;
|
||||
|
||||
public const int fishTab = 1;
|
||||
/// <summary>The archaeology tab ID.</summary>
|
||||
private const int ArchaeologyTab = 2;
|
||||
|
||||
public const int archaeologyTab = 2;
|
||||
/// <summary>The minerals tab ID.</summary>
|
||||
private const int MineralsTab = 3;
|
||||
|
||||
public const int mineralsTab = 3;
|
||||
/// <summary>The cooking tab ID.</summary>
|
||||
private const int CookingTab = 4;
|
||||
|
||||
public const int cookingTab = 4;
|
||||
/// <summary>The achievements tab ID.</summary>
|
||||
private const int AchievementsTab = 5;
|
||||
|
||||
public const int achievementsTab = 5;
|
||||
/// <summary>The offset to apply to the selected tab.</summary>
|
||||
private readonly int WidthToMoveActiveTab = Game1.tileSize / 8;
|
||||
|
||||
public const int distanceFromMenuBottomBeforeNewPage = 128;
|
||||
/// <summary>The multiplier applied to the cost of buying back a collectable.</summary>
|
||||
private readonly double CostMultiplier;
|
||||
|
||||
private string descriptionText = "";
|
||||
/// <summary>The back button.</summary>
|
||||
private readonly ClickableTextureComponent BackButton;
|
||||
|
||||
private string hoverText = "";
|
||||
/// <summary>The forward button.</summary>
|
||||
private readonly ClickableTextureComponent ForwardButton;
|
||||
|
||||
private ClickableTextureComponent backButton;
|
||||
/// <summary>The category tabs shown along the side.</summary>
|
||||
private readonly List<ClickableTextureComponent> SideTabs = new List<ClickableTextureComponent>();
|
||||
|
||||
private ClickableTextureComponent forwardButton;
|
||||
/// <summary>The text to display in a hover tooltip.</summary>
|
||||
private string HoverText = "";
|
||||
|
||||
private List<ClickableTextureComponent> sideTabs = new List<ClickableTextureComponent>();
|
||||
/// <summary>The selected tab.</summary>
|
||||
private int CurrentTab;
|
||||
|
||||
private int currentTab;
|
||||
/// <summary>The selected page.</summary>
|
||||
private int CurrentPage;
|
||||
|
||||
private int currentPage;
|
||||
/// <summary>The buttons to show for each tab.</summary>
|
||||
private readonly Dictionary<int, List<List<ClickableTextureComponent>>> Collections = new Dictionary<int, List<List<ClickableTextureComponent>>>();
|
||||
|
||||
private Dictionary<int, List<List<ClickableTextureComponent>>> collections = new Dictionary<int, List<List<ClickableTextureComponent>>>();
|
||||
/// <summary>The cost to buy back the selected item.</summary>
|
||||
private int Value;
|
||||
|
||||
private int value;
|
||||
/// <summary>The selected item.</summary>
|
||||
public Item NewItem;
|
||||
|
||||
public Item new_item;
|
||||
public int newItemValue;
|
||||
/// <summary>The cost to buy back the selected item.</summary>
|
||||
public int NewItemValue;
|
||||
|
||||
public UpdatedCollectionsPage(int x, int y, int width, int height) : base(x, y, width, height, false)
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="costMultiplier">The multiplier applied to the cost of buying back a collectable.</param>
|
||||
public BuyBackMenu(double costMultiplier)
|
||||
: base(Game1.viewport.Width / 2 - (800 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2, 800 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2)
|
||||
{
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + UpdatedCollectionsPage.widthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Shipped", new object[0]), Game1.mouseCursors, new Rectangle(640, 80, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(0, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Fish", new object[0]), Game1.mouseCursors, new Rectangle(640, 64, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(1, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Artifacts", new object[0]), Game1.mouseCursors, new Rectangle(656, 64, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(2, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Minerals", new object[0]), Game1.mouseCursors, new Rectangle(672, 64, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(3, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Cooking", new object[0]), Game1.mouseCursors, new Rectangle(688, 64, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(4, new List<List<ClickableTextureComponent>>());
|
||||
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Achievements", new object[0]), Game1.mouseCursors, new Rectangle(656, 80, 16, 16), (float)Game1.pixelZoom, false));
|
||||
this.collections.Add(5, new List<List<ClickableTextureComponent>>());
|
||||
UpdatedCollectionsPage.widthToMoveActiveTab = Game1.tileSize / 8;
|
||||
this.backButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(352, 495, 12, 11), (float)Game1.pixelZoom, false);
|
||||
this.forwardButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(365, 495, 12, 11), (float)Game1.pixelZoom, false);
|
||||
int[] array = new int[this.sideTabs.Count];
|
||||
// initialise
|
||||
this.CostMultiplier = costMultiplier;
|
||||
|
||||
// create components
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + this.WidthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Shipped"), Game1.mouseCursors, new Rectangle(640, 80, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.OrganicsTab, new List<List<ClickableTextureComponent>>());
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Fish"), Game1.mouseCursors, new Rectangle(640, 64, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.FishTab, new List<List<ClickableTextureComponent>>());
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Artifacts"), Game1.mouseCursors, new Rectangle(656, 64, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.ArchaeologyTab, new List<List<ClickableTextureComponent>>());
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Minerals"), Game1.mouseCursors, new Rectangle(672, 64, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.MineralsTab, new List<List<ClickableTextureComponent>>());
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Cooking"), Game1.mouseCursors, new Rectangle(688, 64, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.CookingTab, new List<List<ClickableTextureComponent>>());
|
||||
this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Achievements"), Game1.mouseCursors, new Rectangle(656, 80, 16, 16), Game1.pixelZoom));
|
||||
this.Collections.Add(BuyBackMenu.AchievementsTab, new List<List<ClickableTextureComponent>>());
|
||||
this.BackButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(352, 495, 12, 11), Game1.pixelZoom);
|
||||
this.ForwardButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(365, 495, 12, 11), Game1.pixelZoom);
|
||||
int[] array = new int[this.SideTabs.Count];
|
||||
int num = this.xPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearSideBorder;
|
||||
int num2 = this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4;
|
||||
int num3 = 10;
|
||||
foreach (KeyValuePair<int, string> current in Game1.objectInformation)
|
||||
foreach (KeyValuePair<int, string> entry in Game1.objectInformation)
|
||||
{
|
||||
string text = current.Value.Split(new char[]
|
||||
{
|
||||
'/'
|
||||
})[3];
|
||||
string fields = entry.Value.Split('/')[3];
|
||||
bool drawShadow = false;
|
||||
int num4;
|
||||
if (text.Contains("Arch"))
|
||||
int selectedTab;
|
||||
if (fields.Contains("Arch"))
|
||||
{
|
||||
num4 = 2;
|
||||
if (Game1.player.archaeologyFound.ContainsKey(current.Key))
|
||||
{
|
||||
selectedTab = BuyBackMenu.ArchaeologyTab;
|
||||
if (Game1.player.archaeologyFound.ContainsKey(entry.Key))
|
||||
drawShadow = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Fish"))
|
||||
else if (fields.Contains("Fish"))
|
||||
{
|
||||
if (current.Key >= 167 && current.Key < 173)
|
||||
{
|
||||
if (entry.Key >= 167 && entry.Key < 173)
|
||||
continue;
|
||||
}
|
||||
num4 = 1;
|
||||
if (Game1.player.fishCaught.ContainsKey(current.Key))
|
||||
{
|
||||
selectedTab = BuyBackMenu.FishTab;
|
||||
if (Game1.player.fishCaught.ContainsKey(entry.Key))
|
||||
drawShadow = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Mineral") || text.Substring(text.Length - 3).Equals("-2"))
|
||||
else if (fields.Contains("Mineral") || fields.Substring(fields.Length - 3).Equals("-2"))
|
||||
{
|
||||
num4 = 3;
|
||||
if (Game1.player.mineralsFound.ContainsKey(current.Key))
|
||||
{
|
||||
selectedTab = BuyBackMenu.MineralsTab;
|
||||
if (Game1.player.mineralsFound.ContainsKey(entry.Key))
|
||||
drawShadow = true;
|
||||
}
|
||||
}
|
||||
else if (text.Contains("Cooking") || text.Substring(text.Length - 3).Equals("-7"))
|
||||
else if (fields.Contains("Cooking") || fields.Substring(fields.Length - 3).Equals("-7"))
|
||||
{
|
||||
num4 = 4;
|
||||
if (Game1.player.recipesCooked.ContainsKey(current.Key))
|
||||
{
|
||||
selectedTab = BuyBackMenu.CookingTab;
|
||||
if (Game1.player.recipesCooked.ContainsKey(entry.Key))
|
||||
drawShadow = true;
|
||||
}
|
||||
if (current.Key == 217 || current.Key == 772)
|
||||
{
|
||||
if (entry.Key == 217 || entry.Key == 772 || entry.Key == 773)
|
||||
continue;
|
||||
}
|
||||
if (current.Key == 773)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!StardewValley.Object.isPotentialBasicShippedCategory(current.Key, text.Substring(text.Length - 3)))
|
||||
{
|
||||
if (!Object.isPotentialBasicShippedCategory(entry.Key, fields.Substring(fields.Length - 3)))
|
||||
continue;
|
||||
}
|
||||
num4 = 0;
|
||||
if (Game1.player.basicShipped.ContainsKey(current.Key))
|
||||
{
|
||||
selectedTab = BuyBackMenu.OrganicsTab;
|
||||
if (Game1.player.basicShipped.ContainsKey(entry.Key))
|
||||
drawShadow = true;
|
||||
}
|
||||
}
|
||||
int x2 = num + array[num4] % num3 * (Game1.tileSize + 4);
|
||||
int num5 = num2 + array[num4] / num3 * (Game1.tileSize + 4);
|
||||
int x2 = num + array[selectedTab] % num3 * (Game1.tileSize + 4);
|
||||
int num5 = num2 + array[selectedTab] / num3 * (Game1.tileSize + 4);
|
||||
if (num5 > this.yPositionOnScreen + height - 128)
|
||||
{
|
||||
this.collections[num4].Add(new List<ClickableTextureComponent>());
|
||||
array[num4] = 0;
|
||||
this.Collections[selectedTab].Add(new List<ClickableTextureComponent>());
|
||||
array[selectedTab] = 0;
|
||||
x2 = num;
|
||||
num5 = num2;
|
||||
}
|
||||
if (this.collections[num4].Count == 0)
|
||||
{
|
||||
this.collections[num4].Add(new List<ClickableTextureComponent>());
|
||||
}
|
||||
this.collections[num4].Last<List<ClickableTextureComponent>>().Add(new ClickableTextureComponent(current.Key + " " + drawShadow.ToString(), new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), null, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, current.Key, 16, 16), (float)Game1.pixelZoom, drawShadow));
|
||||
array[num4]++;
|
||||
}
|
||||
if (this.collections[5].Count == 0)
|
||||
{
|
||||
this.collections[5].Add(new List<ClickableTextureComponent>());
|
||||
if (this.Collections[selectedTab].Count == 0)
|
||||
this.Collections[selectedTab].Add(new List<ClickableTextureComponent>());
|
||||
this.Collections[selectedTab].Last().Add(new ClickableTextureComponent(entry.Key + " " + drawShadow, new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), null, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, entry.Key, 16, 16), Game1.pixelZoom, drawShadow));
|
||||
array[selectedTab]++;
|
||||
}
|
||||
if (this.Collections[5].Count == 0)
|
||||
this.Collections[5].Add(new List<ClickableTextureComponent>());
|
||||
foreach (KeyValuePair<int, string> current2 in Game1.achievements)
|
||||
{
|
||||
bool flag = Game1.player.achievements.Contains(current2.Key);
|
||||
string[] array2 = current2.Value.Split(new char[]
|
||||
{
|
||||
'^'
|
||||
});
|
||||
if (flag || (array2[2].Equals("true") && (array2[3].Equals("-1") || this.farmerHasAchievements(array2[3]))))
|
||||
string[] array2 = current2.Value.Split('^');
|
||||
if (flag || (array2[2].Equals("true") && (array2[3].Equals("-1") || this.FarmerHasAchievements(array2[3]))))
|
||||
{
|
||||
int x3 = num + array[5] % num3 * (Game1.tileSize + 4);
|
||||
int y2 = num2 + array[5] / num3 * (Game1.tileSize + 4);
|
||||
this.collections[5][0].Add(new ClickableTextureComponent(current2.Key + " " + flag.ToString(), new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), null, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25, -1, -1), 1f, false));
|
||||
this.Collections[5][0].Add(new ClickableTextureComponent(current2.Key + " " + flag, new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), null, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25), 1f));
|
||||
array[5]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool farmerHasAchievements(string listOfAchievementNumbers)
|
||||
|
||||
/*********
|
||||
** Private methods
|
||||
*********/
|
||||
/// <summary>Get whether the farmer has the given achievements.</summary>
|
||||
/// <param name="listOfAchievementNumbers">The achievement IDs as a space-separated list.</param>
|
||||
private bool FarmerHasAchievements(string listOfAchievementNumbers)
|
||||
{
|
||||
string[] array = listOfAchievementNumbers.Split(new char[]
|
||||
string[] array = listOfAchievementNumbers.Split(' ');
|
||||
foreach (string text in array)
|
||||
{
|
||||
' '
|
||||
});
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
string text = array[i];
|
||||
if (!Game1.player.achievements.Contains(Convert.ToInt32(text)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>The method invoked when the player left-clicks on the menu.</summary>
|
||||
/// <param name="x">The X-position of the cursor.</param>
|
||||
/// <param name="y">The Y-position of the cursor.</param>
|
||||
/// <param name="playSound">Whether to enable sound.</param>
|
||||
public override void receiveLeftClick(int x, int y, bool playSound = true)
|
||||
{
|
||||
for (int i = 0; i < this.sideTabs.Count; i++)
|
||||
for (int i = 0; i < this.SideTabs.Count; i++)
|
||||
{
|
||||
if (this.sideTabs[i].containsPoint(x, y) && this.currentTab != i)
|
||||
if (this.SideTabs[i].containsPoint(x, y) && this.CurrentTab != i)
|
||||
{
|
||||
Game1.playSound("smallSelect");
|
||||
ClickableTextureComponent expr_47_cp_0_cp_0 = this.sideTabs[this.currentTab];
|
||||
expr_47_cp_0_cp_0.bounds.X = expr_47_cp_0_cp_0.bounds.X - UpdatedCollectionsPage.widthToMoveActiveTab;
|
||||
this.currentTab = i;
|
||||
this.currentPage = 0;
|
||||
ClickableTextureComponent expr_74_cp_0_cp_0 = this.sideTabs[i];
|
||||
expr_74_cp_0_cp_0.bounds.X = expr_74_cp_0_cp_0.bounds.X + UpdatedCollectionsPage.widthToMoveActiveTab;
|
||||
ClickableTextureComponent curTab = this.SideTabs[this.CurrentTab];
|
||||
curTab.bounds.X = curTab.bounds.X - this.WidthToMoveActiveTab;
|
||||
this.CurrentTab = i;
|
||||
this.CurrentPage = 0;
|
||||
ClickableTextureComponent newTab = this.SideTabs[i];
|
||||
newTab.bounds.X = newTab.bounds.X + this.WidthToMoveActiveTab;
|
||||
}
|
||||
}
|
||||
if (this.currentPage > 0 && this.backButton.containsPoint(x, y))
|
||||
if (this.CurrentPage > 0 && this.BackButton.containsPoint(x, y))
|
||||
{
|
||||
this.currentPage--;
|
||||
this.CurrentPage--;
|
||||
Game1.playSound("shwip");
|
||||
this.backButton.scale = this.backButton.baseScale;
|
||||
this.BackButton.scale = this.BackButton.baseScale;
|
||||
}
|
||||
if (this.currentPage < this.collections[this.currentTab].Count - 1 && this.forwardButton.containsPoint(x, y))
|
||||
if (this.CurrentPage < this.Collections[this.CurrentTab].Count - 1 && this.ForwardButton.containsPoint(x, y))
|
||||
{
|
||||
this.currentPage++;
|
||||
this.CurrentPage++;
|
||||
Game1.playSound("shwip");
|
||||
this.forwardButton.scale = this.forwardButton.baseScale;
|
||||
this.ForwardButton.scale = this.ForwardButton.baseScale;
|
||||
}
|
||||
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
|
||||
foreach (ClickableTextureComponent current2 in this.Collections[this.CurrentTab][this.CurrentPage])
|
||||
{
|
||||
if (current2.containsPoint(x, y))
|
||||
if (current2.containsPoint(x, y) && this.NewItem != null && Game1.player.money >= this.Value)
|
||||
{
|
||||
if (new_item != null)
|
||||
{
|
||||
if (Game1.player.money >= value)
|
||||
{
|
||||
Game1.player.money -= value;
|
||||
Game1.player.addItemByMenuIfNecessary(new_item);
|
||||
}
|
||||
|
||||
}
|
||||
Game1.player.money -= this.Value;
|
||||
Game1.player.addItemByMenuIfNecessary(this.NewItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>The method invoked when the player right-clicks on the lookup UI.</summary>
|
||||
/// <param name="x">The X-position of the cursor.</param>
|
||||
/// <param name="y">The Y-position of the cursor.</param>
|
||||
/// <param name="playSound">Whether to enable sound.</param>
|
||||
public override void receiveRightClick(int x, int y, bool playSound = true)
|
||||
{
|
||||
if (new_item != null)
|
||||
if (this.NewItem != null && Game1.player.money >= this.Value)
|
||||
{
|
||||
if (Game1.player.money >= value)
|
||||
{
|
||||
|
||||
Game1.player.money -= value;
|
||||
Game1.player.addItemByMenuIfNecessary(new_item);
|
||||
}
|
||||
|
||||
Game1.player.money -= this.Value;
|
||||
Game1.player.addItemByMenuIfNecessary(this.NewItem);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>The method invoked when the player hovers the cursor over the menu.</summary>
|
||||
/// <param name="x">The X-position of the cursor.</param>
|
||||
/// <param name="y">The Y-position of the cursor.</param>
|
||||
public override void performHoverAction(int x, int y)
|
||||
{
|
||||
this.descriptionText = "";
|
||||
this.hoverText = "";
|
||||
this.value = -1;
|
||||
foreach (ClickableTextureComponent current in this.sideTabs)
|
||||
this.HoverText = "";
|
||||
this.Value = -1;
|
||||
foreach (ClickableTextureComponent current in this.SideTabs)
|
||||
{
|
||||
if (current.containsPoint(x, y))
|
||||
{
|
||||
this.hoverText = current.hoverText;
|
||||
this.HoverText = current.hoverText;
|
||||
return;
|
||||
}
|
||||
}
|
||||
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
|
||||
foreach (ClickableTextureComponent current2 in this.Collections[this.CurrentTab][this.CurrentPage])
|
||||
{
|
||||
if (current2.containsPoint(x, y))
|
||||
{
|
||||
current2.scale = Math.Min(current2.scale + 0.02f, current2.baseScale + 0.1f);
|
||||
if (Convert.ToBoolean(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[1]) || this.currentTab == 5)
|
||||
{
|
||||
this.hoverText = this.createDescription(Convert.ToInt32(current2.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[0]));
|
||||
}
|
||||
if (Convert.ToBoolean(current2.name.Split(' ')[1]) || this.CurrentTab == 5)
|
||||
this.HoverText = this.CreateDescription(Convert.ToInt32(current2.name.Split(' ')[0]));
|
||||
else
|
||||
{
|
||||
this.hoverText = "???";
|
||||
}
|
||||
this.HoverText = "???";
|
||||
}
|
||||
else
|
||||
{
|
||||
current2.scale = Math.Max(current2.scale - 0.02f, current2.baseScale);
|
||||
}
|
||||
}
|
||||
this.forwardButton.tryHover(x, y, 0.5f);
|
||||
this.backButton.tryHover(x, y, 0.5f);
|
||||
this.ForwardButton.tryHover(x, y, 0.5f);
|
||||
this.BackButton.tryHover(x, y, 0.5f);
|
||||
}
|
||||
|
||||
public string createDescription(int index)
|
||||
/// <summary>Generate the item description for an item ID.</summary>
|
||||
/// <param name="index">The item ID.</param>
|
||||
private string CreateDescription(int index)
|
||||
{
|
||||
string text = "";
|
||||
if (this.currentTab == 5)
|
||||
if (this.CurrentTab == 5)
|
||||
{
|
||||
string[] array = Game1.achievements[index].Split(new char[]
|
||||
{
|
||||
'^'
|
||||
});
|
||||
string[] array = Game1.achievements[index].Split('^');
|
||||
text = text + array[0] + Environment.NewLine + Environment.NewLine;
|
||||
text += array[1];
|
||||
new_item = null;
|
||||
this.NewItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] array2 = Game1.objectInformation[index].Split(new char[]
|
||||
{
|
||||
'/'
|
||||
});
|
||||
string[] array2 = Game1.objectInformation[index].Split('/');
|
||||
foreach (KeyValuePair<int, string> meh in Game1.objectInformation)
|
||||
{
|
||||
string[] array3 = meh.Value.Split(new char[]
|
||||
{
|
||||
'/'
|
||||
});
|
||||
string[] array3 = meh.Value.Split('/');
|
||||
if (array3[0] == array2[0])
|
||||
{
|
||||
new_item = (Item)new Object(Convert.ToInt32(meh.Key), 1, false, -1, 0);
|
||||
if (new_item.Name == "Stone" || new_item.Name == "stone") new_item = (Item)new Object(390, 1, false, -1, 0);
|
||||
this.NewItem = new Object(Convert.ToInt32(meh.Key), 1);
|
||||
if (this.NewItem.Name == "Stone" || this.NewItem.Name == "stone") this.NewItem = new Object(390, 1);
|
||||
}
|
||||
}
|
||||
text = string.Concat(new string[]
|
||||
{
|
||||
text,
|
||||
array2[0],
|
||||
Environment.NewLine,
|
||||
Environment.NewLine,
|
||||
Game1.parseText(array2[4], Game1.smallFont, Game1.tileSize * 4),
|
||||
Environment.NewLine,
|
||||
Environment.NewLine
|
||||
});
|
||||
text = string.Concat(text, array2[0], Environment.NewLine, Environment.NewLine, Game1.parseText(array2[4], Game1.smallFont, Game1.tileSize * 4), Environment.NewLine, Environment.NewLine);
|
||||
if (array2[3].Contains("Arch"))
|
||||
{
|
||||
text += (Game1.player.archaeologyFound.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_ArtifactsFound", new object[]
|
||||
{
|
||||
Game1.player.archaeologyFound[index][0]
|
||||
}) : "");
|
||||
text += (Game1.player.archaeologyFound.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_ArtifactsFound", Game1.player.archaeologyFound[index][0]) : "");
|
||||
}
|
||||
else if (array2[3].Contains("Cooking"))
|
||||
{
|
||||
text += (Game1.player.recipesCooked.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_RecipesCooked", new object[]
|
||||
{
|
||||
Game1.player.recipesCooked[index]
|
||||
}) : "");
|
||||
text += (Game1.player.recipesCooked.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_RecipesCooked", Game1.player.recipesCooked[index]) : "");
|
||||
}
|
||||
else if (array2[3].Contains("Fish"))
|
||||
{
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_FishCaught", new object[]
|
||||
{
|
||||
Game1.player.fishCaught.ContainsKey(index) ? Game1.player.fishCaught[index][0] : 0
|
||||
});
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_FishCaught", Game1.player.fishCaught.ContainsKey(index) ? Game1.player.fishCaught[index][0] : 0);
|
||||
if (Game1.player.fishCaught.ContainsKey(index) && Game1.player.fishCaught[index][1] > 0)
|
||||
{
|
||||
text = text + Environment.NewLine + Game1.content.LoadString("Strings\\UI:Collections_Description_BiggestCatch", new object[]
|
||||
{
|
||||
Game1.player.fishCaught[index][1]
|
||||
});
|
||||
text = text + Environment.NewLine + Game1.content.LoadString("Strings\\UI:Collections_Description_BiggestCatch", Game1.player.fishCaught[index][1]);
|
||||
}
|
||||
}
|
||||
else if (array2[3].Contains("Minerals") || array2[3].Substring(array2[3].Length - 3).Equals("-2"))
|
||||
{
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_MineralsFound", new object[]
|
||||
{
|
||||
Game1.player.mineralsFound.ContainsKey(index) ? Game1.player.mineralsFound[index] : 0
|
||||
});
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_MineralsFound", Game1.player.mineralsFound.ContainsKey(index) ? Game1.player.mineralsFound[index] : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_NumberShipped", new object[]
|
||||
{
|
||||
Game1.player.basicShipped.ContainsKey(index) ? Game1.player.basicShipped[index] : 0
|
||||
});
|
||||
text += Game1.content.LoadString("Strings\\UI:Collections_Description_NumberShipped", Game1.player.basicShipped.ContainsKey(index) ? Game1.player.basicShipped[index] : 0);
|
||||
}
|
||||
this.value = Convert.ToInt32(array2[1]);
|
||||
this.value = (int)(this.value * Class1.cost);
|
||||
newItemValue = this.value;
|
||||
this.Value = Convert.ToInt32(array2[1]);
|
||||
this.Value = (int)(this.Value * this.CostMultiplier);
|
||||
this.NewItemValue = this.Value;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
/// <summary>Draw the menu to the screen.</summary>
|
||||
/// <param name="b">The sprite batch.</param>
|
||||
public override void draw(SpriteBatch b)
|
||||
{
|
||||
Game1.drawDialogueBox(this.xPositionOnScreen, this.yPositionOnScreen, this.width, this.height, false, true, null, false);
|
||||
using (List<ClickableTextureComponent>.Enumerator enumerator = this.sideTabs.GetEnumerator())
|
||||
{
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
enumerator.Current.draw(b);
|
||||
}
|
||||
}
|
||||
if (this.currentPage > 0)
|
||||
{
|
||||
this.backButton.draw(b);
|
||||
}
|
||||
if (this.currentPage < this.collections[this.currentTab].Count - 1)
|
||||
{
|
||||
this.forwardButton.draw(b);
|
||||
}
|
||||
Game1.drawDialogueBox(this.xPositionOnScreen, this.yPositionOnScreen, this.width, this.height, false, true);
|
||||
|
||||
foreach (var tab in this.SideTabs)
|
||||
tab.draw(b);
|
||||
|
||||
if (this.CurrentPage > 0)
|
||||
this.BackButton.draw(b);
|
||||
if (this.CurrentPage < this.Collections[this.CurrentTab].Count - 1)
|
||||
this.ForwardButton.draw(b);
|
||||
b.End();
|
||||
b.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null);
|
||||
foreach (ClickableTextureComponent current in this.collections[this.currentTab][this.currentPage])
|
||||
foreach (ClickableTextureComponent current in this.Collections[this.CurrentTab][this.CurrentPage])
|
||||
{
|
||||
bool flag = Convert.ToBoolean(current.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[1]);
|
||||
bool flag = Convert.ToBoolean(current.name.Split(' ')[1]);
|
||||
current.draw(b, flag ? Color.White : (Color.Black * 0.2f), 0.86f);
|
||||
if (this.currentTab == 5 & flag)
|
||||
if (this.CurrentTab == 5 & flag)
|
||||
{
|
||||
int num = new Random(Convert.ToInt32(current.name.Split(new char[]
|
||||
{
|
||||
' '
|
||||
})[0])).Next(12);
|
||||
b.Draw(Game1.mouseCursors, new Vector2((float)(current.bounds.X + 16 + Game1.tileSize / 4), (float)(current.bounds.Y + 20 + Game1.tileSize / 4)), new Rectangle?(new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2)), Color.White, 0f, new Vector2((float)(Game1.tileSize / 4), (float)(Game1.tileSize / 4)), current.scale, SpriteEffects.None, 0.88f);
|
||||
int num = new Random(Convert.ToInt32(current.name.Split(' ')[0])).Next(12);
|
||||
b.Draw(Game1.mouseCursors, new Vector2(current.bounds.X + 16 + Game1.tileSize / 4, current.bounds.Y + 20 + Game1.tileSize / 4), new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2), Color.White, 0f, new Vector2(Game1.tileSize / 4, Game1.tileSize / 4), current.scale, SpriteEffects.None, 0.88f);
|
||||
}
|
||||
}
|
||||
b.End();
|
||||
b.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);
|
||||
if (!this.hoverText.Equals(""))
|
||||
{
|
||||
IClickableMenu.drawHoverText(b, this.hoverText, Game1.smallFont, 0, 0, this.value, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null);
|
||||
}
|
||||
if (!this.HoverText.Equals(""))
|
||||
IClickableMenu.drawHoverText(b, this.HoverText, Game1.smallFont, 0, 0, this.Value);
|
||||
if (!Game1.options.hardwareCursor)
|
||||
{
|
||||
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getMouseX(), (float)Game1.getMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 0, 16, 16)), Color.White * Game1.mouseCursorTransparency, 0f, Vector2.Zero, (float)Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
|
||||
}
|
||||
|
||||
b.Draw(Game1.mouseCursors, new Vector2(Game1.getMouseX(), Game1.getMouseY()), Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 0, 16, 16), Color.White * Game1.mouseCursorTransparency, 0f, Vector2.Zero, Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,4 +11,4 @@
|
|||
"UniqueID": "BuyBackCollectables",
|
||||
"PerSaveConfigs": false,
|
||||
"EntryDll": "BuyBackCollectables.dll"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue