Version 1.6.0.

This commit is contained in:
Cdaragorn 2017-11-27 22:27:52 -07:00
parent 803788a1d3
commit a87ccaec1c
42 changed files with 808 additions and 1688 deletions

View File

@ -23,5 +23,7 @@ namespace UIInfoSuite
public const string LevelUp = "LevelUp"; public const string LevelUp = "LevelUp";
public const string Calendar = "Calendar"; public const string Calendar = "Calendar";
public const string Billboard = "Billboard"; public const string Billboard = "Billboard";
public const string DaysUntilToolIsUpgraded = "DaysUntilToolIsUpgraded";
public const string ToolIsFinishedBeingUpgraded = "ToolIsFinishedBeingUpgraded";
} }
} }

View File

@ -75,35 +75,49 @@ namespace UIInfoSuite
private void SaveModData(object sender, EventArgs e) private void SaveModData(object sender, EventArgs e)
{ {
if (File.Exists(_modDataFileName)) if (!String.IsNullOrWhiteSpace(_modDataFileName))
File.Delete(_modDataFileName);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
using (XmlWriter writer = XmlWriter.Create(File.Open(_modDataFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite), settings))
{ {
writer.WriteStartElement("options"); if (File.Exists(_modDataFileName))
File.Delete(_modDataFileName);
foreach (var option in _options) XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
using (XmlWriter writer = XmlWriter.Create(File.Open(_modDataFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite), settings))
{ {
writer.WriteStartElement("option"); writer.WriteStartElement("options");
writer.WriteAttributeString("name", option.Key);
writer.WriteValue(option.Value); foreach (var option in _options)
{
writer.WriteStartElement("option");
writer.WriteAttributeString("name", option.Key);
writer.WriteValue(option.Value);
writer.WriteEndElement();
}
writer.WriteEndElement(); writer.WriteEndElement();
} }
writer.WriteEndElement();
} }
} }
private void LoadModData(object sender, EventArgs e) private void LoadModData(object sender, EventArgs e)
{ {
_modDataFileName = Path.Combine(Helper.DirectoryPath, Game1.player.name + "_modData.xml"); String playerName = Game1.player.Name;
if (File.Exists(_modDataFileName)) try
{ {
XmlDocument document = new XmlDocument();
try try
{ {
_modDataFileName = Path.Combine(Helper.DirectoryPath, Game1.player.name + "_modData.xml");
}
catch
{
Monitor.Log("Error: Player name contains character that cannot be used in file name. Using generic file name." + Environment.NewLine +
"Options may not be able to be different between characters.", LogLevel.Warn);
_modDataFileName = Path.Combine(Helper.DirectoryPath, "default_modData.xml");
}
if (File.Exists(_modDataFileName))
{
XmlDocument document = new XmlDocument();
document.Load(_modDataFileName); document.Load(_modDataFileName);
XmlNodeList nodes = document.GetElementsByTagName("option"); XmlNodeList nodes = document.GetElementsByTagName("option");
@ -115,11 +129,12 @@ namespace UIInfoSuite
if (key != null) if (key != null)
_options[key] = value; _options[key] = value;
} }
} }
catch (Exception ex) }
{ catch (Exception ex)
Monitor.Log("Error loading mod config. " + ex.Message + Environment.NewLine + ex.StackTrace, LogLevel.Error); {
} Monitor.Log("Error loading mod config. " + ex.Message + Environment.NewLine + ex.StackTrace, LogLevel.Error);
} }
_modOptionsPageHandler = new ModOptionsPageHandler(Helper, _options); _modOptionsPageHandler = new ModOptionsPageHandler(Helper, _options);

View File

@ -236,7 +236,7 @@ namespace UIInfoSuite.Options
else if (_upArrow.containsPoint(x, y) && _currentItemIndex > 0) else if (_upArrow.containsPoint(x, y) && _currentItemIndex > 0)
{ {
UpArrowPressed(); UpArrowPressed();
Game1.playSound("shwip)"); Game1.playSound("shwip");
} }
else if (_scrollBar.containsPoint(x, y)) else if (_scrollBar.containsPoint(x, y))
{ {
@ -335,26 +335,26 @@ namespace UIInfoSuite.Options
if (_hoverText != "") if (_hoverText != "")
IClickableMenu.drawHoverText(batch, _hoverText, Game1.smallFont); IClickableMenu.drawHoverText(batch, _hoverText, Game1.smallFont);
if (Game1.options.hardwareCursor) //if (Game1.options.hardwareCursor)
{ //{
Game1.spriteBatch.Draw( // Game1.spriteBatch.Draw(
Game1.mouseCursors, // Game1.mouseCursors,
new Vector2( // new Vector2(
Game1.getMouseX(), // Game1.getMouseX(),
Game1.getMouseY()), // Game1.getMouseY()),
new Rectangle?( // new Rectangle?(
Game1.getSourceRectForStandardTileSheet( // Game1.getSourceRectForStandardTileSheet(
Game1.mouseCursors, // Game1.mouseCursors,
Game1.mouseCursor, // Game1.mouseCursor,
16, // 16,
16)), // 16)),
Color.White, // Color.White,
0.0f, // 0.0f,
Vector2.Zero, // Vector2.Zero,
(float)(Game1.pixelZoom + (Game1.dialogueButtonScale / 150.0)), // (float)(Game1.pixelZoom + (Game1.dialogueButtonScale / 150.0)),
SpriteEffects.None, // SpriteEffects.None,
1f); // 1f);
} //}
} }
} }
} }

View File

@ -9,6 +9,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Reflection; using System.Reflection;
using UIInfoSuite.Extensions;
namespace UIInfoSuite.Options namespace UIInfoSuite.Options
{ {
@ -36,6 +37,7 @@ namespace UIInfoSuite.Options
private readonly ShowTravelingMerchant _showTravelingMerchant; private readonly ShowTravelingMerchant _showTravelingMerchant;
private readonly ShopHarvestPrices _shopHarvestPrices; private readonly ShopHarvestPrices _shopHarvestPrices;
private readonly ShowQueenOfSauceIcon _showQueenOfSauceIcon; private readonly ShowQueenOfSauceIcon _showQueenOfSauceIcon;
private readonly ShowToolUpgradeStatus _showToolUpgradeStatus;
public ModOptionsPageHandler(IModHelper helper, IDictionary<String, String> options) public ModOptionsPageHandler(IModHelper helper, IDictionary<String, String> options)
{ {
@ -47,13 +49,14 @@ namespace UIInfoSuite.Options
_luckOfDay = new LuckOfDay(helper); _luckOfDay = new LuckOfDay(helper);
_locationOfTownsfolk = new LocationOfTownsfolk(_helper, _options); _locationOfTownsfolk = new LocationOfTownsfolk(_helper, _options);
_showWhenAnimalNeedsPet = new ShowWhenAnimalNeedsPet(_helper); _showWhenAnimalNeedsPet = new ShowWhenAnimalNeedsPet(_helper);
_showCalendarAndBillboardOnGameMenuButton = new ShowCalendarAndBillboardOnGameMenuButton(_options, helper); _showCalendarAndBillboardOnGameMenuButton = new ShowCalendarAndBillboardOnGameMenuButton(helper);
_showScarecrowAndSprinklerRange = new ShowItemEffectRanges(modConfig); _showScarecrowAndSprinklerRange = new ShowItemEffectRanges(modConfig);
_experienceBar = new ExperienceBar(helper); _experienceBar = new ExperienceBar(helper);
_shopHarvestPrices = new ShopHarvestPrices(helper); _shopHarvestPrices = new ShopHarvestPrices(helper);
_showQueenOfSauceIcon = new ShowQueenOfSauceIcon(helper); _showQueenOfSauceIcon = new ShowQueenOfSauceIcon(helper);
_showTravelingMerchant = new ShowTravelingMerchant(helper); _showTravelingMerchant = new ShowTravelingMerchant(helper);
_showCropAndBarrelTime = new ShowCropAndBarrelTime(helper); _showCropAndBarrelTime = new ShowCropAndBarrelTime(helper);
_showToolUpgradeStatus = new ShowToolUpgradeStatus(helper);
_elementsToDispose = new List<IDisposable>() _elementsToDispose = new List<IDisposable>()
{ {
@ -68,29 +71,31 @@ namespace UIInfoSuite.Options
_showItemHoverInformation, _showItemHoverInformation,
_showTravelingMerchant, _showTravelingMerchant,
_shopHarvestPrices, _shopHarvestPrices,
_showQueenOfSauceIcon _showQueenOfSauceIcon,
_showToolUpgradeStatus
}; };
int whichOption = 1; int whichOption = 1;
Version thisVersion = Assembly.GetAssembly(this.GetType()).GetName().Version; Version thisVersion = Assembly.GetAssembly(this.GetType()).GetName().Version;
_optionsElements.Add(new ModOptionsElement("UI Info Suite v" + _optionsElements.Add(new ModOptionsElement("UI Info Suite v" +
thisVersion.Major + "." + thisVersion.Minor + "." + thisVersion.Build)); thisVersion.Major + "." + thisVersion.Minor + "." + thisVersion.Build));
_optionsElements.Add(new ModOptionsCheckbox("Show luck icon", whichOption++, _luckOfDay.Toggle, _options, OptionKeys.ShowLuckIcon)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowLuckIcon), whichOption++, _luckOfDay.Toggle, _options, OptionKeys.ShowLuckIcon));
_optionsElements.Add(new ModOptionsCheckbox("Show level up animation", whichOption++, _experienceBar.ToggleLevelUpAnimation, _options, OptionKeys.ShowLevelUpAnimation)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowLevelUpAnimation), whichOption++, _experienceBar.ToggleLevelUpAnimation, _options, OptionKeys.ShowLevelUpAnimation));
_optionsElements.Add(new ModOptionsCheckbox("Show experience bar", whichOption++, _experienceBar.ToggleShowExperienceBar, _options, OptionKeys.ShowExperienceBar)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowExperienceBar), whichOption++, _experienceBar.ToggleShowExperienceBar, _options, OptionKeys.ShowExperienceBar));
_optionsElements.Add(new ModOptionsCheckbox("Allow experience bar to fade out", whichOption++, _experienceBar.ToggleExperienceBarFade, _options, OptionKeys.AllowExperienceBarToFadeOut)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.AllowExperienceBarToFadeOut), whichOption++, _experienceBar.ToggleExperienceBarFade, _options, OptionKeys.AllowExperienceBarToFadeOut));
_optionsElements.Add(new ModOptionsCheckbox("Show experience gain", whichOption++, _experienceBar.ToggleShowExperienceGain, _options, OptionKeys.ShowExperienceGain)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowExperienceGain), whichOption++, _experienceBar.ToggleShowExperienceGain, _options, OptionKeys.ShowExperienceGain));
_optionsElements.Add(new ModOptionsCheckbox("Show townspeople on map", whichOption++, _locationOfTownsfolk.ToggleShowNPCLocationsOnMap, _options, OptionKeys.ShowLocationOfTownsPeople)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowLocationOfTownsPeople), whichOption++, _locationOfTownsfolk.ToggleShowNPCLocationsOnMap, _options, OptionKeys.ShowLocationOfTownsPeople));
_optionsElements.Add(new ModOptionsCheckbox("Show Birthday icon", whichOption++, _showBirthdayIcon.ToggleOption, _options, OptionKeys.ShowBirthdayIcon)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowBirthdayIcon), whichOption++, _showBirthdayIcon.ToggleOption, _options, OptionKeys.ShowBirthdayIcon));
_optionsElements.Add(new ModOptionsCheckbox("Show heart fills", whichOption++, _showAccurateHearts.ToggleOption, _options, OptionKeys.ShowHeartFills)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowHeartFills), whichOption++, _showAccurateHearts.ToggleOption, _options, OptionKeys.ShowHeartFills));
_optionsElements.Add(new ModOptionsCheckbox("Show when animals need pets", whichOption++, _showWhenAnimalNeedsPet.ToggleOption, _options, OptionKeys.ShowAnimalsNeedPets)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowAnimalsNeedPets), whichOption++, _showWhenAnimalNeedsPet.ToggleOption, _options, OptionKeys.ShowAnimalsNeedPets));
_optionsElements.Add(new ModOptionsCheckbox("Show calendar/billboard button", whichOption++, _showCalendarAndBillboardOnGameMenuButton.ToggleOption, _options, OptionKeys.DisplayCalendarAndBillboard)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.DisplayCalendarAndBillboard), whichOption++, _showCalendarAndBillboardOnGameMenuButton.ToggleOption, _options, OptionKeys.DisplayCalendarAndBillboard));
_optionsElements.Add(new ModOptionsCheckbox("Show crop and barrel times", whichOption++, _showCropAndBarrelTime.ToggleOption, _options, OptionKeys.ShowCropAndBarrelTooltip)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowCropAndBarrelTooltip), whichOption++, _showCropAndBarrelTime.ToggleOption, _options, OptionKeys.ShowCropAndBarrelTooltip));
_optionsElements.Add(new ModOptionsCheckbox("Show scarecrow and sprinkler range", whichOption++, _showScarecrowAndSprinklerRange.ToggleOption, _options, OptionKeys.ShowItemEffectRanges)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowItemEffectRanges), whichOption++, _showScarecrowAndSprinklerRange.ToggleOption, _options, OptionKeys.ShowItemEffectRanges));
_optionsElements.Add(new ModOptionsCheckbox("Show Item hover information", whichOption++, _showItemHoverInformation.ToggleOption, _options, OptionKeys.ShowExtraItemInformation)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowExtraItemInformation), whichOption++, _showItemHoverInformation.ToggleOption, _options, OptionKeys.ShowExtraItemInformation));
_optionsElements.Add(new ModOptionsCheckbox("Show Traveling Merchant", whichOption++, _showTravelingMerchant.ToggleOption, _options, OptionKeys.ShowTravelingMerchant)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowTravelingMerchant), whichOption++, _showTravelingMerchant.ToggleOption, _options, OptionKeys.ShowTravelingMerchant));
_optionsElements.Add(new ModOptionsCheckbox("Show shop harvest prices", whichOption++, _shopHarvestPrices.ToggleOption, _options, OptionKeys.ShowHarvestPricesInShop)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowHarvestPricesInShop), whichOption++, _shopHarvestPrices.ToggleOption, _options, OptionKeys.ShowHarvestPricesInShop));
_optionsElements.Add(new ModOptionsCheckbox("Show when new recipes are available", whichOption++, _showQueenOfSauceIcon.ToggleOption, _options, OptionKeys.ShowWhenNewRecipesAreAvailable)); _optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowWhenNewRecipesAreAvailable), whichOption++, _showQueenOfSauceIcon.ToggleOption, _options, OptionKeys.ShowWhenNewRecipesAreAvailable));
_optionsElements.Add(new ModOptionsCheckbox(_helper.SafeGetString(OptionKeys.ShowToolUpgradeStatus), whichOption++, _showToolUpgradeStatus.ToggleOption, _options, OptionKeys.ShowToolUpgradeStatus));
} }
@ -113,7 +118,7 @@ namespace UIInfoSuite.Options
{ {
if (Game1.activeClickableMenu is GameMenu) if (Game1.activeClickableMenu is GameMenu)
{ {
GraphicsEvents.OnPostRenderEvent -= DrawButton; GraphicsEvents.OnPostRenderGuiEvent -= DrawButton;
_modOptionsPageButton.OnLeftClicked -= OnButtonLeftClicked; _modOptionsPageButton.OnLeftClicked -= OnButtonLeftClicked;
List<IClickableMenu> tabPages = _helper.Reflection.GetPrivateField<List<IClickableMenu>>(Game1.activeClickableMenu, "pages").GetValue(); List<IClickableMenu> tabPages = _helper.Reflection.GetPrivateField<List<IClickableMenu>>(Game1.activeClickableMenu, "pages").GetValue();
tabPages.Remove(_modOptionsPage); tabPages.Remove(_modOptionsPage);
@ -129,8 +134,8 @@ namespace UIInfoSuite.Options
_modOptionsPage = new ModOptionsPage(_optionsElements); _modOptionsPage = new ModOptionsPage(_optionsElements);
_modOptionsPageButton = new ModOptionsPageButton(); _modOptionsPageButton = new ModOptionsPageButton();
} }
GraphicsEvents.OnPostRenderEvent -= DrawButton; GraphicsEvents.OnPostRenderGuiEvent -= DrawButton;
GraphicsEvents.OnPostRenderEvent += DrawButton; GraphicsEvents.OnPostRenderGuiEvent += DrawButton;
_modOptionsPageButton.OnLeftClicked += OnButtonLeftClicked; _modOptionsPageButton.OnLeftClicked += OnButtonLeftClicked;
List<IClickableMenu> tabPages = _helper.Reflection.GetPrivateField<List<IClickableMenu>>(Game1.activeClickableMenu, "pages").GetValue(); List<IClickableMenu> tabPages = _helper.Reflection.GetPrivateField<List<IClickableMenu>>(Game1.activeClickableMenu, "pages").GetValue();

View File

@ -26,5 +26,6 @@ namespace UIInfoSuite.Options
public const string ShowHarvestPricesInShop = "ShowHarvestPricesInShop"; public const string ShowHarvestPricesInShop = "ShowHarvestPricesInShop";
public const string DisplayCalendarAndBillboard = "DisplayCalendarAndBillboard"; public const string DisplayCalendarAndBillboard = "DisplayCalendarAndBillboard";
public const string ShowWhenNewRecipesAreAvailable = "ShowWhenNewRecipesAreAvailable"; public const string ShowWhenNewRecipesAreAvailable = "ShowWhenNewRecipesAreAvailable";
public const string ShowToolUpgradeStatus = "ShowToolUpgradeStatus";
} }
} }

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.8.0")] [assembly: AssemblyVersion("1.6.0.0")]
[assembly: AssemblyFileVersion("1.2.8.0")] [assembly: AssemblyFileVersion("1.6.0.0")]

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>Anschlagtafel</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Kalender</value>
</data>
<data name="Days" xml:space="preserve">
<value>Tage</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>tage zu reifen</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>Du fühlst dich glücklich!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>Erntepreis</value>
</data>
<data name="Hours" xml:space="preserve">
<value>Stunden</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>Aufleveln</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>Gefühl 'glücklich ... aber nicht allzu glücklich</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>Vielleicht solltest du heute zu Hause bleiben</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>Minuten</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>Du fühlst dich heute gar nicht glücklich</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>Bereit zum Ernten!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>Heutiges Rezept: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>Reisehändler ist in der Stadt!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>Billboard</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Calendar</value>
</data>
<data name="Days" xml:space="preserve">
<value>days</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>days to mature</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>You're feelin' lucky!!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>Harvest price</value>
</data>
<data name="Hours" xml:space="preserve">
<value>hours</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>Level Up</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>Feelin' lucky... but not too lucky</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>Maybe you should stay home today...</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>minutes</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>You're not feeling lucky at all today...</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>Ready To Harvest!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>Today's Recipe: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>Traveling merchant is in town!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>Cartelera</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Calendario</value>
</data>
<data name="Days" xml:space="preserve">
<value>días</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>días para madurar</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>¡Tienes suerte!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>Precio de la cosecha</value>
</data>
<data name="Hours" xml:space="preserve">
<value>horas</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>Elevar a mismo nivel</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>Sintiendo con suerte ... pero no demasiado afortunado</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>Tal vez deberías quedarte en casa hoy</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>minutos</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>No te sientes afortunado en absoluto hoy ...</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>¡Listo para cosechar!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>Receta de hoy: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>¡El comerciante que viaja está en ciudad!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>ビルボード</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>カレンダー</value>
</data>
<data name="Days" xml:space="preserve">
<value>日々</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>成熟する日数</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>あなたは幸運を感じている!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>収穫価格</value>
</data>
<data name="Hours" xml:space="preserve">
<value>時間</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>レベルアップ</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>幸運を感じる...しかしあまりにも幸運ではない</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>多分あなたは今日家にいなければなりません...</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>分</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>あなたは今日も幸運を感じていません...</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>収穫準備!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>今日のレシピ: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>旅行中の商人が町にいる!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>Quadro de avisos</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Calendário</value>
</data>
<data name="Days" xml:space="preserve">
<value>dias</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>dias para amadurecer</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>Você está sentindo 'sorte!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>Preço de colheita</value>
</data>
<data name="Hours" xml:space="preserve">
<value>horas</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>Upar</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>Sentimento de sorte ... mas não muito sorte</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>Talvez você deva ficar em casa hoje ...</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>minutos</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>Você não está se sentindo sortudo de todo hoje ...</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>Apronte para colher!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>Receita de hoje: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>Comerciante ambulante está na cidade!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>рекламный щит</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Календарь</value>
</data>
<data name="Days" xml:space="preserve">
<value>дней</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>дней, чтобы созреть</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>Тебе повезло!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>Урожайность</value>
</data>
<data name="Hours" xml:space="preserve">
<value>часов</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>Уровень повышен</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>Чувство «повезло ... но не слишком повезло»</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>Может, тебе стоит остаться дома сегодня ...</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>минут</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>Сегодня вам совсем не везет ...</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>Готовы к сбору урожая!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>Сегодняшний рецепт: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>Путешественник в городе!</value>
</data>
</root>

View File

@ -1,172 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>บอร์ด</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>ปฏิทิน</value>
</data>
<data name="Days" xml:space="preserve">
<value>วัน</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>วันสำหรับผู้ใหญ่</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>คุณรู้สึกโชคดีมาก !!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>ราคาเก็บเกี่ยว</value>
</data>
<data name="Hours" xml:space="preserve">
<value>ชั่วโมง</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>ยกระดับ</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>รู้สึก 'โชคดี ... แต่ไม่โชคดีเกินไป</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>บางทีคุณควรจะอยู่บ้านวันนี้ ...</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>นาที</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>วันนี้คุณไม่รู้สึกโชคดีเลย</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>พร้อมที่จะเก็บเกี่ยว!</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="strings.en" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>strings.en.resx;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="strings.en.Designer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>strings.en.designer.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>สูตรวันนี้: </value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>พ่อค้าเดินทางอยู่ในเมือง!</value>
</data>
</root>

View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Billboard" xml:space="preserve">
<value>广告牌</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>日历</value>
</data>
<data name="Days" xml:space="preserve">
<value>天</value>
</data>
<data name="DaysToMature" xml:space="preserve">
<value>天成熟</value>
</data>
<data name="FeelingLucky" xml:space="preserve">
<value>你感觉很幸运!</value>
</data>
<data name="HarvestPrice" xml:space="preserve">
<value>收获价</value>
</data>
<data name="Hours" xml:space="preserve">
<value>小时</value>
</data>
<data name="LevelUp" xml:space="preserve">
<value>升级</value>
</data>
<data name="LuckyButNotTooLucky" xml:space="preserve">
<value>感觉幸运...但不是太幸运</value>
</data>
<data name="MaybeStayHome" xml:space="preserve">
<value>也许今天应该留在家里</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>分钟</value>
</data>
<data name="NotFeelingLuckyAtAll" xml:space="preserve">
<value>你今天没有感到幸运</value>
</data>
<data name="ReadyToHarvest" xml:space="preserve">
<value>准备收获!</value>
</data>
<data name="TodaysRecipe" xml:space="preserve">
<value>今日食谱:</value>
</data>
<data name="TravelingMerchantIsInTown" xml:space="preserve">
<value>旅行商在城里!</value>
</data>
</root>

View File

@ -52,16 +52,16 @@ namespace UIInfoSuite
{ {
int truePrice = 0; int truePrice = 0;
if (item is StardewValley.Object) if (item is StardewValley.Object objectItem)
{ {
truePrice = (item as StardewValley.Object).sellToStorePrice() * 2; truePrice = objectItem.sellToStorePrice() * 2;
} }
else else if (item is StardewValley.Item thing)
{ {
int parentSheetIndex = item.parentSheetIndex; truePrice = thing.salePrice();
//needs more
} }
return truePrice; return truePrice;
} }

View File

@ -59,39 +59,6 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Resource\strings.ja.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.ja.resx</DependentUpon>
</Compile>
<Compile Include="Resource\strings.de.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.de.resx</DependentUpon>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="Resource\strings.en.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.en.resx</DependentUpon>
</Compile>
<Compile Include="Resource\strings.es.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.es.resx</DependentUpon>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="Resource\strings.ru.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.ru.resx</DependentUpon>
</Compile>
<Compile Include="Resource\strings.zh.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>strings.zh.resx</DependentUpon>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="Tools.cs" /> <Compile Include="Tools.cs" />
<Compile Include="Extensions\StringExtensions.cs" /> <Compile Include="Extensions\StringExtensions.cs" />
<Compile Include="ModEntry.cs" /> <Compile Include="ModEntry.cs" />
@ -112,6 +79,7 @@
<Compile Include="UIElements\ShowItemHoverInformation.cs" /> <Compile Include="UIElements\ShowItemHoverInformation.cs" />
<Compile Include="UIElements\ShowItemEffectRanges.cs" /> <Compile Include="UIElements\ShowItemEffectRanges.cs" />
<Compile Include="UIElements\ShowQueenOfSauceIcon.cs" /> <Compile Include="UIElements\ShowQueenOfSauceIcon.cs" />
<Compile Include="UIElements\ShowToolUpgradeStatus.cs" />
<Compile Include="UIElements\ShowTravelingMerchant.cs" /> <Compile Include="UIElements\ShowTravelingMerchant.cs" />
<Compile Include="UIElements\ShowWhenAnimalNeedsPet.cs" /> <Compile Include="UIElements\ShowWhenAnimalNeedsPet.cs" />
<Compile Include="UIElements\SkipIntro.cs" /> <Compile Include="UIElements\SkipIntro.cs" />
@ -159,35 +127,6 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Resource\strings.ja.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>strings.ja.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resource\strings.de.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>strings.de.Designer.cs</LastGenOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Resource\strings.en.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>strings.en.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resource\strings.es.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>strings.es.Designer.cs</LastGenOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Resource\strings.pt.resx" />
<EmbeddedResource Include="Resource\strings.ru.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>strings.ru.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resource\strings.th.resx" />
<EmbeddedResource Include="Resource\strings.zh.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>strings.zh.Designer.cs</LastGenOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
@ -200,11 +139,11 @@
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll.mdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).dll.mdb')" /> <Copy SourceFiles="$(TargetDir)\$(TargetName).dll.mdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).dll.mdb')" />
<Copy SourceFiles="$(ProjectDir)manifest.json" DestinationFolder="$(ModPath)" /> <Copy SourceFiles="$(ProjectDir)manifest.json" DestinationFolder="$(ModPath)" />
</Target> </Target>
<Import Project="..\packages\Pathoschild.Stardew.ModBuildConfig.1.6.2\build\Pathoschild.Stardew.ModBuildConfig.targets" Condition="Exists('..\packages\Pathoschild.Stardew.ModBuildConfig.1.6.2\build\Pathoschild.Stardew.ModBuildConfig.targets')" /> <Import Project="..\packages\Pathoschild.Stardew.ModBuildConfig.2.0.0\build\Pathoschild.Stardew.ModBuildConfig.targets" Condition="Exists('..\packages\Pathoschild.Stardew.ModBuildConfig.2.0.0\build\Pathoschild.Stardew.ModBuildConfig.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\Pathoschild.Stardew.ModBuildConfig.1.6.2\build\Pathoschild.Stardew.ModBuildConfig.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Pathoschild.Stardew.ModBuildConfig.1.6.2\build\Pathoschild.Stardew.ModBuildConfig.targets'))" /> <Error Condition="!Exists('..\packages\Pathoschild.Stardew.ModBuildConfig.2.0.0\build\Pathoschild.Stardew.ModBuildConfig.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Pathoschild.Stardew.ModBuildConfig.2.0.0\build\Pathoschild.Stardew.ModBuildConfig.targets'))" />
</Target> </Target>
</Project> </Project>

View File

@ -23,7 +23,6 @@ namespace UIInfoSuite.UIElements
{ {
private const int MaxBarWidth = 175; private const int MaxBarWidth = 175;
private int _currentLevelIndex = 4; private int _currentLevelIndex = 4;
private int _levelOfCurrentlyDisplayedExperience = 0;
private float _currentExperience = 0; private float _currentExperience = 0;
private readonly List<ExperiencePointDisplay> _experiencePointDisplays = new List<ExperiencePointDisplay>(); private readonly List<ExperiencePointDisplay> _experiencePointDisplays = new List<ExperiencePointDisplay>();
private GameLocation _currentLocation = new GameLocation(); private GameLocation _currentLocation = new GameLocation();
@ -31,7 +30,7 @@ namespace UIInfoSuite.UIElements
private Color _iconColor = Color.White; private Color _iconColor = Color.White;
private Color _experienceFillColor = Color.Blue; private Color _experienceFillColor = Color.Blue;
private Item _previousItem = null; private Item _previousItem = null;
private bool _showExperienceBar = false; private bool _experienceBarShouldBeVisible = false;
private bool _shouldDrawLevelUp = false; private bool _shouldDrawLevelUp = false;
private System.Timers.Timer _timeToDisappear = new System.Timers.Timer(); private System.Timers.Timer _timeToDisappear = new System.Timers.Timer();
private readonly TimeSpan _timeBeforeExperienceBarFades = TimeSpan.FromSeconds(8); private readonly TimeSpan _timeBeforeExperienceBarFades = TimeSpan.FromSeconds(8);
@ -40,6 +39,7 @@ namespace UIInfoSuite.UIElements
private bool _allowExperienceBarToFadeOut = true; private bool _allowExperienceBarToFadeOut = true;
private bool _showExperienceGain = true; private bool _showExperienceGain = true;
private bool _showLevelUpAnimation = true; private bool _showLevelUpAnimation = true;
private bool _showExperienceBar = true;
private readonly IModHelper _helper; private readonly IModHelper _helper;
private SoundPlayer _player; private SoundPlayer _player;
@ -61,6 +61,8 @@ namespace UIInfoSuite.UIElements
ModEntry.MonitorObject.Log("Error loading sound file from " + path + ": " + ex.Message + Environment.NewLine + ex.StackTrace, LogLevel.Error); ModEntry.MonitorObject.Log("Error loading sound file from " + path + ": " + ex.Message + Environment.NewLine + ex.StackTrace, LogLevel.Error);
} }
_timeToDisappear.Elapsed += StopTimerAndFadeBarOut; _timeToDisappear.Elapsed += StopTimerAndFadeBarOut;
GraphicsEvents.OnPreRenderHudEvent += OnPreRenderHudEvent;
LocationEvents.CurrentLocationChanged += RemoveAllExperiencePointDisplays;
} }
public void Dispose() public void Dispose()
@ -95,14 +97,14 @@ namespace UIInfoSuite.UIElements
public void ToggleShowExperienceBar(bool showExperienceBar) public void ToggleShowExperienceBar(bool showExperienceBar)
{ {
GraphicsEvents.OnPreRenderHudEvent -= OnPreRenderHudEvent; //GraphicsEvents.OnPreRenderHudEvent -= OnPreRenderHudEvent;
LocationEvents.CurrentLocationChanged -= RemoveAllExperiencePointDisplays; //LocationEvents.CurrentLocationChanged -= RemoveAllExperiencePointDisplays;
_showExperienceBar = showExperienceBar;
if (showExperienceBar) //if (showExperienceBar)
{ //{
GraphicsEvents.OnPreRenderHudEvent += OnPreRenderHudEvent; // GraphicsEvents.OnPreRenderHudEvent += OnPreRenderHudEvent;
LocationEvents.CurrentLocationChanged += RemoveAllExperiencePointDisplays; // LocationEvents.CurrentLocationChanged += RemoveAllExperiencePointDisplays;
} //}
} }
private void OnLevelUp(object sender, EventArgsLevelUp e) private void OnLevelUp(object sender, EventArgsLevelUp e)
@ -120,7 +122,7 @@ namespace UIInfoSuite.UIElements
_shouldDrawLevelUp = true; _shouldDrawLevelUp = true;
_timeToDisappear.Interval = _timeBeforeExperienceBarFades.TotalMilliseconds; _timeToDisappear.Interval = _timeBeforeExperienceBarFades.TotalMilliseconds;
_timeToDisappear.Start(); _timeToDisappear.Start();
_showExperienceBar = true; _experienceBarShouldBeVisible = true;
float previousAmbientVolume = Game1.options.ambientVolumeLevel; float previousAmbientVolume = Game1.options.ambientVolumeLevel;
float previousMusicVolume = Game1.options.musicVolumeLevel; float previousMusicVolume = Game1.options.musicVolumeLevel;
@ -156,7 +158,7 @@ namespace UIInfoSuite.UIElements
private void StopTimerAndFadeBarOut(object sender, ElapsedEventArgs e) private void StopTimerAndFadeBarOut(object sender, ElapsedEventArgs e)
{ {
_timeToDisappear.Stop(); _timeToDisappear.Stop();
_showExperienceBar = false; _experienceBarShouldBeVisible = false;
} }
private void RemoveAllExperiencePointDisplays(object sender, EventArgsCurrentLocationChanged e) private void RemoveAllExperiencePointDisplays(object sender, EventArgsCurrentLocationChanged e)
@ -236,8 +238,46 @@ namespace UIInfoSuite.UIElements
_previousItem = currentItem; _previousItem = currentItem;
_currentExperience = experienceEarnedThisLevel; _currentExperience = experienceEarnedThisLevel;
if (_showExperienceBar && if (_shouldDrawLevelUp)
_levelOfCurrentlyDisplayedExperience != 10) {
Vector2 playerLocalPosition = Game1.player.getLocalPosition(Game1.viewport);
Game1.spriteBatch.Draw(
Game1.mouseCursors,
new Vector2(
playerLocalPosition.X - 74,
playerLocalPosition.Y - 130),
_levelUpIconRectangle,
_iconColor,
0,
Vector2.Zero,
Game1.pixelZoom,
SpriteEffects.None,
0.85f);
Game1.drawWithBorder(
_helper.SafeGetString(
LanguageKeys.LevelUp),
Color.DarkSlateGray,
Color.PaleTurquoise,
new Vector2(
playerLocalPosition.X - 28,
playerLocalPosition.Y - 130));
}
for (int i = _experiencePointDisplays.Count - 1; i >= 0; --i)
{
if (_experiencePointDisplays[i].IsInvisible)
{
_experiencePointDisplays.RemoveAt(i);
}
else
{
_experiencePointDisplays[i].Draw();
}
}
if (_experienceBarShouldBeVisible &&
_showExperienceBar)
{ {
int barWidth = (int)(_currentExperience / (experienceRequiredToLevel - experienceFromPreviousLevels) * MaxBarWidth); int barWidth = (int)(_currentExperience / (experienceRequiredToLevel - experienceFromPreviousLevels) * MaxBarWidth);
float leftSide = Game1.graphics.GraphicsDevice.Viewport.TitleSafeArea.Left; float leftSide = Game1.graphics.GraphicsDevice.Viewport.TitleSafeArea.Left;
@ -340,43 +380,7 @@ namespace UIInfoSuite.UIElements
Game1.graphics.GraphicsDevice.Viewport.TitleSafeArea.Bottom - 70)); Game1.graphics.GraphicsDevice.Viewport.TitleSafeArea.Bottom - 70));
} }
if (_shouldDrawLevelUp)
{
Vector2 playerLocalPosition = Game1.player.getLocalPosition(Game1.viewport);
Game1.spriteBatch.Draw(
Game1.mouseCursors,
new Vector2(
playerLocalPosition.X - 74,
playerLocalPosition.Y - 130),
_levelUpIconRectangle,
_iconColor,
0,
Vector2.Zero,
Game1.pixelZoom,
SpriteEffects.None,
0.85f);
Game1.drawWithBorder(
_helper.SafeGetString(
LanguageKeys.LevelUp),
Color.DarkSlateGray,
Color.PaleTurquoise,
new Vector2(
playerLocalPosition.X - 28,
playerLocalPosition.Y - 130));
}
for (int i = _experiencePointDisplays.Count - 1; i >= 0; --i)
{
if (_experiencePointDisplays[i].IsInvisible)
{
_experiencePointDisplays.RemoveAt(i);
}
else
{
_experiencePointDisplays[i].Draw();
}
}
} }
} }
@ -414,7 +418,7 @@ namespace UIInfoSuite.UIElements
_timeToDisappear.Stop(); _timeToDisappear.Stop();
} }
_showExperienceBar = true; _experienceBarShouldBeVisible = true;
} }
} }

View File

@ -41,6 +41,7 @@ namespace UIInfoSuite.UIElements
{ "HaleyHouse", new KeyValuePair<int, int>(652, 408) }, { "HaleyHouse", new KeyValuePair<int, int>(652, 408) },
{ "Hospital", new KeyValuePair<int, int>(677, 304) }, { "Hospital", new KeyValuePair<int, int>(677, 304) },
{ "FarmHouse", new KeyValuePair<int, int>(470, 260) }, { "FarmHouse", new KeyValuePair<int, int>(470, 260) },
{ "Farm", new KeyValuePair<int, int>(470, 260) },
{ "ScienceHouse", new KeyValuePair<int, int>(732, 148) }, { "ScienceHouse", new KeyValuePair<int, int>(732, 148) },
{ "ManorHouse", new KeyValuePair<int, int>(768, 395) }, { "ManorHouse", new KeyValuePair<int, int>(768, 395) },
{ "AdventureGuild", new KeyValuePair<int, int>(0, 0) }, { "AdventureGuild", new KeyValuePair<int, int>(0, 0) },
@ -153,12 +154,28 @@ namespace UIInfoSuite.UIElements
int hashCode = friendName.name.GetHashCode(); int hashCode = friendName.name.GetHashCode();
OptionsCheckbox checkbox = new OptionsCheckbox("", hashCode); OptionsCheckbox checkbox = new OptionsCheckbox("", hashCode);
_checkboxes.Add(checkbox); _checkboxes.Add(checkbox);
//default to on
bool optionForThisFriend = true;
if (!Game1.player.friendships.ContainsKey(friendName.name)) if (!Game1.player.friendships.ContainsKey(friendName.name))
{ {
checkbox.greyedOut = true; checkbox.greyedOut = true;
checkbox.isChecked = false; optionForThisFriend = false;
} }
checkbox.isChecked = _options.SafeGet(hashCode.ToString()).SafeParseBool(); else
{
String optionValue = _options.SafeGet(hashCode.ToString());
if (String.IsNullOrEmpty(optionValue))
{
_options[hashCode.ToString()] = optionForThisFriend.ToString();
}
else
{
optionForThisFriend = optionValue.SafeParseBool();
}
}
checkbox.isChecked = optionForThisFriend;
} }
} }
} }
@ -202,40 +219,94 @@ namespace UIInfoSuite.UIElements
GameMenu gameMenu = Game1.activeClickableMenu as GameMenu; GameMenu gameMenu = Game1.activeClickableMenu as GameMenu;
if (gameMenu.currentTab == 3) if (gameMenu.currentTab == 3)
{ {
List<String> namesToShow = new List<string>();
foreach (var character in _townsfolk) foreach (var character in _townsfolk)
{ {
try try
{ {
int hashCode = character.name.GetHashCode(); int hashCode = character.name.GetHashCode();
bool drawCharacter = _options.SafeGet(hashCode.ToString()).SafeParseBool(); bool drawCharacter = _options.SafeGet(hashCode.ToString()).SafeParseBool();
if (drawCharacter) if (drawCharacter)
{ {
KeyValuePair<int, int> location; KeyValuePair<int, int> location;
location = new KeyValuePair<int, int>((int)character.Position.X, (int)character.position.Y); location = new KeyValuePair<int, int>((int)character.Position.X, (int)character.position.Y);
String locationName = character.currentLocation?.name ?? character.DefaultMap;
if (character.currentLocation.Name == "Town") switch (locationName)
{ {
String locationName = character.currentLocation.Name; case "Town":
xTile.Map map = character.currentLocation.Map; case "Forest":
int xStart = 595; {
int yStart = 163; int xStart = 0;
int townWidth = 345; int yStart = 0;
int townHeight = 330; int areaWidth = 0;
int areaHeight = 0;
float xScale = (float)townWidth / (float)map.DisplayWidth; switch (locationName)
float yScale = (float)townHeight / (float)map.DisplayHeight; {
case "Town":
{
xStart = 595;
yStart = 163;
areaWidth = 345;
areaHeight = 330;
break;
}
float scaledX = character.position.X * xScale; case "Forest":
float scaledY = character.position.Y * yScale; {
int xPos = (int)scaledX + xStart; xStart = 183;
int yPos = (int)scaledY + yStart; yStart = 378;
location = new KeyValuePair<int, int>(xPos, yPos); areaWidth = 319;
} areaHeight = 261;
else break;
{ }
_mapLocations.TryGetValue(character.currentLocation.name, out location); }
xTile.Map map = character.currentLocation.Map;
float xScale = (float)areaWidth / (float)map.DisplayWidth;
float yScale = (float)areaHeight / (float)map.DisplayHeight;
float scaledX = character.position.X * xScale;
float scaledY = character.position.Y * yScale;
int xPos = (int)scaledX + xStart;
int yPos = (int)scaledY + yStart;
location = new KeyValuePair<int, int>(xPos, yPos);
break;
}
default:
{
_mapLocations.TryGetValue(locationName, out location);
break;
}
} }
//if (character.currentLocation.Name == "Town")
//{
// String locationName = character.currentLocation.Name;
// xTile.Map map = character.currentLocation.Map;
// int xStart = 595;
// int yStart = 163;
// int townWidth = 345;
// int townHeight = 330;
// float xScale = (float)townWidth / (float)map.DisplayWidth;
// float yScale = (float)townHeight / (float)map.DisplayHeight;
// float scaledX = character.position.X * xScale;
// float scaledY = character.position.Y * yScale;
// int xPos = (int)scaledX + xStart;
// int yPos = (int)scaledY + yStart;
// location = new KeyValuePair<int, int>(xPos, yPos);
//}
//else
//{
// _mapLocations.TryGetValue(character.currentLocation.name, out location);
//}
Rectangle headShot = character.GetHeadShot(); Rectangle headShot = character.GetHeadShot();
int xBase = Game1.activeClickableMenu.xPositionOnScreen - 158; int xBase = Game1.activeClickableMenu.xPositionOnScreen - 158;
int yBase = Game1.activeClickableMenu.yPositionOnScreen - 40; int yBase = Game1.activeClickableMenu.yPositionOnScreen - 40;
@ -254,6 +325,8 @@ namespace UIInfoSuite.UIElements
character.sprite.Texture, character.sprite.Texture,
headShot, headShot,
2.3f); 2.3f);
float headShotScale = 2f;
Game1.spriteBatch.Draw( Game1.spriteBatch.Draw(
character.sprite.Texture, character.sprite.Texture,
new Vector2(x, y), new Vector2(x, y),
@ -261,10 +334,19 @@ namespace UIInfoSuite.UIElements
color, color,
0.0f, 0.0f,
Vector2.Zero, Vector2.Zero,
2f, headShotScale,
SpriteEffects.None, SpriteEffects.None,
1f); 1f);
int mouseX = Game1.getMouseX();
int mouseY = Game1.getMouseY();
if (mouseX >= x && mouseX <= x + headShot.Width * headShotScale &&
mouseY >= y && mouseY <= y + headShot.Height * headShotScale)
{
namesToShow.Add(character.displayName);
}
foreach (var quest in Game1.player.questLog) foreach (var quest in Game1.player.questLog)
{ {
if (quest.accepted && quest.dailyQuest && !quest.completed) if (quest.accepted && quest.dailyQuest && !quest.completed)
@ -299,6 +381,40 @@ namespace UIInfoSuite.UIElements
} }
} }
if (namesToShow.Count > 0)
{
StringBuilder text = new StringBuilder();
int longestLength = 0;
foreach (String name in namesToShow)
{
text.AppendLine(name);
longestLength = Math.Max(longestLength, (int)Math.Ceiling(Game1.smallFont.MeasureString(name).Length()));
}
int windowHeight = Game1.smallFont.LineSpacing * namesToShow.Count + 25;
Vector2 windowPos = new Vector2(Game1.getMouseX() + 40, Game1.getMouseY() - windowHeight);
IClickableMenu.drawTextureBox(
Game1.spriteBatch,
(int)windowPos.X,
(int)windowPos.Y,
longestLength + 30,
Game1.smallFont.LineSpacing * namesToShow.Count + 25,
Color.White);
Game1.spriteBatch.DrawString(
Game1.smallFont,
text,
new Vector2(windowPos.X + 17, windowPos.Y + 17),
Game1.textShadowColor);
Game1.spriteBatch.DrawString(
Game1.smallFont,
text,
new Vector2(windowPos.X + 15, windowPos.Y + 15),
Game1.textColor);
}
//The cursor needs to show up in front of the character faces
if (!Game1.options.hardwareCursor) if (!Game1.options.hardwareCursor)
Game1.spriteBatch.Draw( Game1.spriteBatch.Draw(
Game1.mouseCursors, Game1.mouseCursors,
@ -387,22 +503,22 @@ namespace UIInfoSuite.UIElements
4), 4),
Color.BurlyWood); Color.BurlyWood);
} }
Game1.spriteBatch.Draw( //Game1.spriteBatch.Draw(
Game1.mouseCursors, // Game1.mouseCursors,
new Vector2( // new Vector2(
Game1.getMouseX(), // Game1.getMouseX(),
Game1.getMouseY()), // Game1.getMouseY()),
Game1.getSourceRectForStandardTileSheet( // Game1.getSourceRectForStandardTileSheet(
Game1.mouseCursors, // Game1.mouseCursors,
Game1.mouseCursor, // Game1.mouseCursor,
16, // 16,
16), // 16),
Color.White, // Color.White,
0.0f, // 0.0f,
Vector2.Zero, // Vector2.Zero,
Game1.pixelZoom + (Game1.dialogueButtonScale / 150.0f), // Game1.pixelZoom + (Game1.dialogueButtonScale / 150.0f),
SpriteEffects.None, // SpriteEffects.None,
1f); // 1f);
if (checkbox.bounds.Contains(Game1.getMouseX(), Game1.getMouseY())) if (checkbox.bounds.Contains(Game1.getMouseX(), Game1.getMouseY()))
IClickableMenu.drawHoverText( IClickableMenu.drawHoverText(

View File

@ -76,20 +76,20 @@ namespace UIInfoSuite.UIElements
friendshipRawValue < 2500) friendshipRawValue < 2500)
{ {
DrawEachIndividualSquare(numHearts, pointsToNextHeart, yPosition); DrawEachIndividualSquare(numHearts, pointsToNextHeart, yPosition);
if (!Game1.options.hardwareCursor) //if (!Game1.options.hardwareCursor)
Game1.spriteBatch.Draw( // Game1.spriteBatch.Draw(
Game1.mouseCursors, // Game1.mouseCursors,
new Vector2(Game1.getMouseX(), Game1.getMouseY()), // new Vector2(Game1.getMouseX(), Game1.getMouseY()),
Game1.getSourceRectForStandardTileSheet( // Game1.getSourceRectForStandardTileSheet(
Game1.mouseCursors, Game1.mouseCursor, // Game1.mouseCursors, Game1.mouseCursor,
16, // 16,
16), // 16),
Color.White, // Color.White,
0.0f, // 0.0f,
Vector2.Zero, // Vector2.Zero,
Game1.pixelZoom + (float)(Game1.dialogueButtonScale / 150.0), // Game1.pixelZoom + (float)(Game1.dialogueButtonScale / 150.0),
SpriteEffects.None, // SpriteEffects.None,
1f); // 1f);
} }
} }
} }

View File

@ -25,23 +25,19 @@ namespace UIInfoSuite.UIElements
Game1.content.Load<Texture2D>(Path.Combine("Maps", "summer_town")), Game1.content.Load<Texture2D>(Path.Combine("Maps", "summer_town")),
new Rectangle(122, 291, 35, 20), new Rectangle(122, 291, 35, 20),
3f); 3f);
private String _hoverText;
private readonly IDictionary<String, String> _options;
private readonly IModHelper _helper; private readonly IModHelper _helper;
private Item _hoverItem = null; private Item _hoverItem = null;
public ShowCalendarAndBillboardOnGameMenuButton(IDictionary<String, String> options, public ShowCalendarAndBillboardOnGameMenuButton(IModHelper helper)
IModHelper helper)
{ {
_options = options;
_helper = helper; _helper = helper;
} }
public void ToggleOption(bool showCalendarAndBillboard) public void ToggleOption(bool showCalendarAndBillboard)
{ {
GraphicsEvents.OnPostRenderGuiEvent -= RenderButtons; GraphicsEvents.OnPostRenderGuiEvent -= RenderButtons;
GraphicsEvents.OnPreRenderGuiEvent -= RemoveDefaultTooltips;
ControlEvents.MouseChanged -= OnBillboardIconClick; ControlEvents.MouseChanged -= OnBillboardIconClick;
ControlEvents.ControllerButtonPressed -= OnBillboardIconPressed; ControlEvents.ControllerButtonPressed -= OnBillboardIconPressed;
GraphicsEvents.OnPreRenderEvent -= GetHoverItem; GraphicsEvents.OnPreRenderEvent -= GetHoverItem;
@ -49,7 +45,6 @@ namespace UIInfoSuite.UIElements
if (showCalendarAndBillboard) if (showCalendarAndBillboard)
{ {
GraphicsEvents.OnPostRenderGuiEvent += RenderButtons; GraphicsEvents.OnPostRenderGuiEvent += RenderButtons;
GraphicsEvents.OnPreRenderGuiEvent += RemoveDefaultTooltips;
ControlEvents.MouseChanged += OnBillboardIconClick; ControlEvents.MouseChanged += OnBillboardIconClick;
ControlEvents.ControllerButtonPressed += OnBillboardIconPressed; ControlEvents.ControllerButtonPressed += OnBillboardIconPressed;
GraphicsEvents.OnPreRenderEvent += GetHoverItem; GraphicsEvents.OnPreRenderEvent += GetHoverItem;
@ -86,23 +81,16 @@ namespace UIInfoSuite.UIElements
(Game1.activeClickableMenu as GameMenu).currentTab == 0 && (Game1.activeClickableMenu as GameMenu).currentTab == 0 &&
_showBillboardButton.containsPoint(Game1.getMouseX(), Game1.getMouseY())) _showBillboardButton.containsPoint(Game1.getMouseX(), Game1.getMouseY()))
{ {
if (Game1.questOfTheDay != null &&
String.IsNullOrEmpty(Game1.questOfTheDay.currentObjective))
Game1.questOfTheDay.currentObjective = "wat?";
Game1.activeClickableMenu = Game1.activeClickableMenu =
new Billboard(!(Game1.getMouseX() < new Billboard(!(Game1.getMouseX() <
_showBillboardButton.bounds.X + _showBillboardButton.bounds.Width / 2)); _showBillboardButton.bounds.X + _showBillboardButton.bounds.Width / 2));
} }
} }
private void RemoveDefaultTooltips(object sender, EventArgs e)
{
if (Game1.activeClickableMenu is GameMenu &&
!_options.SafeGet(OptionKeys.ShowExtraItemInformation).SafeParseBool())
{
InventoryPage inventoryPage = (typeof(GameMenu).GetField("pages", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Game1.activeClickableMenu) as List<IClickableMenu>)[0] as InventoryPage;
_hoverText = typeof(InventoryPage).GetField("hoverText", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(inventoryPage) as String;
typeof(InventoryPage).GetField("hoverText", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(inventoryPage, "");
}
}
private void RenderButtons(object sender, EventArgs e) private void RenderButtons(object sender, EventArgs e)
{ {
if (_hoverItem == null && if (_hoverItem == null &&
@ -123,20 +111,6 @@ namespace UIInfoSuite.UIElements
_helper.SafeGetString(hoverText), _helper.SafeGetString(hoverText),
Game1.dialogueFont); Game1.dialogueFont);
} }
if (!_options.SafeGet(OptionKeys.ShowExtraItemInformation).SafeParseBool())
{
InventoryPage inventoryPage = (typeof(GameMenu).GetField("pages", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Game1.activeClickableMenu) as List<IClickableMenu>)[0] as InventoryPage;
String hoverTitle = typeof(InventoryPage).GetField("hoverTitle", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(inventoryPage) as String;
Item hoveredItem = typeof(InventoryPage).GetField("hoveredItem", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(inventoryPage) as Item;
Item heldItem = typeof(InventoryPage).GetField("heldItem", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(inventoryPage) as Item;
IClickableMenu.drawToolTip(
Game1.spriteBatch,
_hoverText,
hoverTitle,
hoveredItem,
heldItem != null);
}
} }
} }
} }

View File

@ -14,6 +14,8 @@ using System.Reflection;
using System.Globalization; using System.Globalization;
using StardewValley.Objects; using StardewValley.Objects;
using StardewModdingAPI; using StardewModdingAPI;
using StardewValley.Locations;
using StardewValley.Buildings;
namespace UIInfoSuite.UIElements namespace UIInfoSuite.UIElements
{ {
@ -22,6 +24,7 @@ namespace UIInfoSuite.UIElements
private Dictionary<int, String> _indexOfCropNames = new Dictionary<int, string>(); private Dictionary<int, String> _indexOfCropNames = new Dictionary<int, string>();
private StardewValley.Object _currentTile; private StardewValley.Object _currentTile;
private TerrainFeature _terrain; private TerrainFeature _terrain;
private Building _currentTileBuilding = null;
private readonly IModHelper _helper; private readonly IModHelper _helper;
public ShowCropAndBarrelTime(IModHelper helper) public ShowCropAndBarrelTime(IModHelper helper)
@ -43,6 +46,15 @@ namespace UIInfoSuite.UIElements
private void GetTileUnderCursor(object sender, EventArgs e) private void GetTileUnderCursor(object sender, EventArgs e)
{ {
if (Game1.currentLocation is BuildableGameLocation buildableLocation)
{
_currentTileBuilding = buildableLocation.getBuildingAt(Game1.currentCursorTile);
}
else
{
_currentTileBuilding = null;
}
_currentTile = Game1.currentLocation.Objects.SafeGet(Game1.currentCursorTile); _currentTile = Game1.currentLocation.Objects.SafeGet(Game1.currentCursorTile);
_terrain = Game1.currentLocation.terrainFeatures.SafeGet(Game1.currentCursorTile); _terrain = Game1.currentLocation.terrainFeatures.SafeGet(Game1.currentCursorTile);
} }
@ -57,8 +69,47 @@ namespace UIInfoSuite.UIElements
//StardewValley.Object tile = Game1.currentLocation.Objects.SafeGet(Game1.currentCursorTile); //StardewValley.Object tile = Game1.currentLocation.Objects.SafeGet(Game1.currentCursorTile);
//TerrainFeature feature = null; //TerrainFeature feature = null;
if (_currentTileBuilding != null)
{
if (_currentTileBuilding is Mill millBuilding)
{
if (!millBuilding.input.isEmpty())
{
int wheatCount = 0;
int beetCount = 0;
if (_currentTile != null && foreach (var item in millBuilding.input.items)
{
switch (item.Name)
{
case "Wheat": wheatCount = item.Stack; break;
case "Beet": beetCount = item.Stack; break;
}
}
StringBuilder builder = new StringBuilder();
if (wheatCount > 0)
builder.Append(wheatCount + " wheat");
if (beetCount > 0)
{
if (wheatCount > 0)
builder.Append(Environment.NewLine);
builder.Append(beetCount + " beets");
}
if (builder.Length > 0)
{
IClickableMenu.drawHoverText(
Game1.spriteBatch,
builder.ToString(),
Game1.smallFont);
}
}
}
}
else if (_currentTile != null &&
(!_currentTile.bigCraftable || (!_currentTile.bigCraftable ||
_currentTile.minutesUntilReady > 0)) _currentTile.minutesUntilReady > 0))
{ {
@ -75,6 +126,10 @@ namespace UIInfoSuite.UIElements
hoverText.Append((int)(currentCask.daysToMature / currentCask.agingRate)) hoverText.Append((int)(currentCask.daysToMature / currentCask.agingRate))
.Append(" " + _helper.SafeGetString( .Append(" " + _helper.SafeGetString(
LanguageKeys.DaysToMature)); LanguageKeys.DaysToMature));
}
else if (_currentTile is StardewValley.Buildings.Mill)
{
} }
else else
{ {

View File

@ -2,6 +2,8 @@
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using StardewModdingAPI.Events; using StardewModdingAPI.Events;
using StardewValley; using StardewValley;
using StardewValley.Buildings;
using StardewValley.Locations;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -15,6 +17,27 @@ namespace UIInfoSuite.UIElements
private readonly List<Point> _effectiveArea = new List<Point>(); private readonly List<Point> _effectiveArea = new List<Point>();
private readonly ModConfig _modConfig; private readonly ModConfig _modConfig;
private static readonly int[][] _junimoHutArray = new int[17][]
{
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
new int[17] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
public ShowItemEffectRanges(ModConfig modConfig) public ShowItemEffectRanges(ModConfig modConfig)
{ {
_modConfig = modConfig; _modConfig = modConfig;
@ -41,86 +64,102 @@ namespace UIInfoSuite.UIElements
{ {
_effectiveArea.Clear(); _effectiveArea.Clear();
if (Game1.player.CurrentItem != null && if (Game1.activeClickableMenu == null &&
Game1.activeClickableMenu == null &&
!Game1.eventUp) !Game1.eventUp)
{ {
String name = Game1.player.CurrentItem.Name.ToLower(); if (Game1.currentLocation is BuildableGameLocation buildableLocation)
Item currentItem = Game1.player.CurrentItem;
List<StardewValley.Object> objects = null;
int[][] arrayToUse = null;
if (name.Contains("arecrow"))
{ {
arrayToUse = new int[17][]; Building building = buildableLocation.getBuildingAt(Game1.currentCursorTile);
for (int i = 0; i < 17; ++i)
{
arrayToUse[i] = new int[17];
for (int j = 0; j < 17; ++j)
{
arrayToUse[i][j] = (Math.Abs(i - 8) + Math.Abs(j - 8) <= 12) ? 1 : 0;
}
}
ParseConfigToHighlightedArea(arrayToUse, TileUnderMouseX, TileUnderMouseY);
objects = GetObjectsInLocationOfSimilarName("arecrow");
if (objects != null)
{
foreach (StardewValley.Object next in objects)
{
ParseConfigToHighlightedArea(arrayToUse, (int)next.TileLocation.X, (int)next.TileLocation.Y);
}
}
if (building is JunimoHut)
{
foreach (var nextBuilding in buildableLocation.buildings)
{
if (nextBuilding is JunimoHut nextHut)
ParseConfigToHighlightedArea(_junimoHutArray, nextHut.tileX + 1, nextHut.tileY + 1);
}
}
} }
else if (name.Contains("sprinkler"))
{
if (name.Contains("iridium"))
{
arrayToUse = _modConfig.IridiumSprinkler;
}
else if (name.Contains("quality"))
{
arrayToUse = _modConfig.QualitySprinkler;
}
else
{
arrayToUse = _modConfig.Sprinkler;
}
if (arrayToUse != null) if (Game1.player.CurrentItem != null)
{
String name = Game1.player.CurrentItem.Name.ToLower();
Item currentItem = Game1.player.CurrentItem;
List<StardewValley.Object> objects = null;
int[][] arrayToUse = null;
if (name.Contains("arecrow"))
{
arrayToUse = new int[17][];
for (int i = 0; i < 17; ++i)
{
arrayToUse[i] = new int[17];
for (int j = 0; j < 17; ++j)
{
arrayToUse[i][j] = (Math.Abs(i - 8) + Math.Abs(j - 8) <= 12) ? 1 : 0;
}
}
ParseConfigToHighlightedArea(arrayToUse, TileUnderMouseX, TileUnderMouseY); ParseConfigToHighlightedArea(arrayToUse, TileUnderMouseX, TileUnderMouseY);
objects = GetObjectsInLocationOfSimilarName("arecrow");
objects = GetObjectsInLocationOfSimilarName("sprinkler"); if (objects != null)
if (objects != null)
{
foreach (StardewValley.Object next in objects)
{ {
string objectName = next.name.ToLower(); foreach (StardewValley.Object next in objects)
if (objectName.Contains("iridium"))
{ {
arrayToUse = _modConfig.IridiumSprinkler;
}
else if (objectName.Contains("quality"))
{
arrayToUse = _modConfig.QualitySprinkler;
}
else
{
arrayToUse = _modConfig.Sprinkler;
}
if (arrayToUse != null)
ParseConfigToHighlightedArea(arrayToUse, (int)next.TileLocation.X, (int)next.TileLocation.Y); ParseConfigToHighlightedArea(arrayToUse, (int)next.TileLocation.X, (int)next.TileLocation.Y);
}
}
}
else if (name.Contains("sprinkler"))
{
if (name.Contains("iridium"))
{
arrayToUse = _modConfig.IridiumSprinkler;
}
else if (name.Contains("quality"))
{
arrayToUse = _modConfig.QualitySprinkler;
}
else
{
arrayToUse = _modConfig.Sprinkler;
}
if (arrayToUse != null)
ParseConfigToHighlightedArea(arrayToUse, TileUnderMouseX, TileUnderMouseY);
objects = GetObjectsInLocationOfSimilarName("sprinkler");
if (objects != null)
{
foreach (StardewValley.Object next in objects)
{
string objectName = next.name.ToLower();
if (objectName.Contains("iridium"))
{
arrayToUse = _modConfig.IridiumSprinkler;
}
else if (objectName.Contains("quality"))
{
arrayToUse = _modConfig.QualitySprinkler;
}
else
{
arrayToUse = _modConfig.Sprinkler;
}
if (arrayToUse != null)
ParseConfigToHighlightedArea(arrayToUse, (int)next.TileLocation.X, (int)next.TileLocation.Y);
}
} }
} }
} else if (name.Contains("bee house"))
else if (name.Contains("bee house")) {
{ ParseConfigToHighlightedArea(_modConfig.Beehouse, TileUnderMouseX, TileUnderMouseY);
ParseConfigToHighlightedArea(_modConfig.Beehouse, TileUnderMouseX, TileUnderMouseY); }
}
}
} }
} }

View File

@ -124,7 +124,9 @@ namespace UIInfoSuite.UIElements
private void DrawAdvancedTooltip(object sender, EventArgs e) private void DrawAdvancedTooltip(object sender, EventArgs e)
{ {
if (_hoverItem != null) if (_hoverItem != null &&
_hoverItem.Name != "Scythe" &&
!(_hoverItem is StardewValley.Tools.FishingRod))
{ {
//String text = string.Empty; //String text = string.Empty;
//String extra = string.Empty; //String extra = string.Empty;
@ -132,8 +134,7 @@ namespace UIInfoSuite.UIElements
int itemPrice = 0; int itemPrice = 0;
int stackPrice = 0; int stackPrice = 0;
if (truePrice > 0 && if (truePrice > 0)
_hoverItem.Name != "Scythe")
{ {
itemPrice = truePrice / 2; itemPrice = truePrice / 2;
//int width = (int)Game1.smallFont.MeasureString(" ").Length(); //int width = (int)Game1.smallFont.MeasureString(" ").Length();
@ -244,7 +245,7 @@ namespace UIInfoSuite.UIElements
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(
Game1.smallFont, Game1.smallFont,
itemPrice.ToString(), itemPrice.ToString(),
new Vector2(currentDrawPos.X + 20, currentDrawPos.Y - 10 + 2), new Vector2(currentDrawPos.X + 22, currentDrawPos.Y - 8),
Game1.textShadowColor); Game1.textShadowColor);
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(
@ -282,7 +283,7 @@ namespace UIInfoSuite.UIElements
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(
Game1.smallFont, Game1.smallFont,
stackPrice.ToString(), stackPrice.ToString(),
new Vector2(currentDrawPos.X + 20, currentDrawPos.Y - 10 + 2), new Vector2(currentDrawPos.X + 22, currentDrawPos.Y - 8),
Game1.textShadowColor); Game1.textShadowColor);
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(
@ -331,7 +332,7 @@ namespace UIInfoSuite.UIElements
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(
Game1.smallFont, Game1.smallFont,
cropPrice.ToString(), cropPrice.ToString(),
new Vector2(currentDrawPos.X + 20, currentDrawPos.Y - 10 + 2), new Vector2(currentDrawPos.X + 22, currentDrawPos.Y - 8),
Game1.textShadowColor); Game1.textShadowColor);
Game1.spriteBatch.DrawString( Game1.spriteBatch.DrawString(

View File

@ -29,6 +29,7 @@ namespace UIInfoSuite.UIElements
{ {
GraphicsEvents.OnPreRenderHudEvent -= DrawIcon; GraphicsEvents.OnPreRenderHudEvent -= DrawIcon;
TimeEvents.AfterDayStarted -= CheckForNewRecipe; TimeEvents.AfterDayStarted -= CheckForNewRecipe;
GameEvents.OneSecondTick -= CheckIfLearnedRecipe;
if (showQueenOfSauceIcon) if (showQueenOfSauceIcon)
{ {
@ -36,9 +37,17 @@ namespace UIInfoSuite.UIElements
CheckForNewRecipe(null, null); CheckForNewRecipe(null, null);
TimeEvents.AfterDayStarted += CheckForNewRecipe; TimeEvents.AfterDayStarted += CheckForNewRecipe;
GraphicsEvents.OnPreRenderHudEvent += DrawIcon; GraphicsEvents.OnPreRenderHudEvent += DrawIcon;
GameEvents.OneSecondTick += CheckIfLearnedRecipe;
} }
} }
private void CheckIfLearnedRecipe(object sender, EventArgs e)
{
if (_drawQueenOfSauceIcon &&
Game1.player.knowsRecipe(_todaysRecipe))
_drawQueenOfSauceIcon = false;
}
public ShowQueenOfSauceIcon(IModHelper helper) public ShowQueenOfSauceIcon(IModHelper helper)
{ {
_helper = helper; _helper = helper;

View File

@ -0,0 +1,136 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using StardewModdingAPI;
using StardewModdingAPI.Events;
using StardewValley;
using StardewValley.Menus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UIInfoSuite.Extensions;
namespace UIInfoSuite.UIElements
{
class ShowToolUpgradeStatus : IDisposable
{
private readonly IModHelper _helper;
private Rectangle _toolTexturePosition;
private String _hoverText;
private Tool _toolBeingUpgraded;
public ShowToolUpgradeStatus(IModHelper helper)
{
_helper = helper;
}
public void ToggleOption(bool showToolUpgradeStatus)
{
GraphicsEvents.OnPreRenderHudEvent -= DrawToolUpgradeStatus;
TimeEvents.AfterDayStarted -= DayChanged;
GameEvents.OneSecondTick -= CheckForMidDayChanges;
if (showToolUpgradeStatus)
{
DayChanged(null, new EventArgsIntChanged(0, Game1.dayOfMonth));
GraphicsEvents.OnPreRenderHudEvent += DrawToolUpgradeStatus;
TimeEvents.AfterDayStarted += DayChanged;
GameEvents.OneSecondTick += CheckForMidDayChanges;
}
}
private void CheckForMidDayChanges(object sender, EventArgs e)
{
if (_toolBeingUpgraded != Game1.player.toolBeingUpgraded)
DayChanged(null, null);
}
private void DayChanged(object sender, EventArgs e)
{
if (Game1.player.toolBeingUpgraded != null)
{
_toolBeingUpgraded = Game1.player.toolBeingUpgraded;
_toolTexturePosition = new Rectangle();
if (_toolBeingUpgraded is StardewValley.Tools.WateringCan)
{
_toolTexturePosition.X = 32;
_toolTexturePosition.Y = 228;
_toolTexturePosition.Width = 16;
_toolTexturePosition.Height = 11;
}
else
{
_toolTexturePosition.Width = 16;
_toolTexturePosition.Height = 16;
_toolTexturePosition.X = 81;
_toolTexturePosition.Y = 31;
if (!(_toolBeingUpgraded is StardewValley.Tools.Hoe))
{
_toolTexturePosition.Y += 64;
if (!(_toolBeingUpgraded is StardewValley.Tools.Pickaxe))
{
_toolTexturePosition.Y += 64;
}
}
}
_toolTexturePosition.X += (111 * _toolBeingUpgraded.UpgradeLevel);
if (_toolTexturePosition.X > Game1.toolSpriteSheet.Width)
{
_toolTexturePosition.Y += 32;
_toolTexturePosition.X -= 333;
}
if (Game1.player.daysLeftForToolUpgrade > 0)
{
_hoverText = String.Format(_helper.SafeGetString(LanguageKeys.DaysUntilToolIsUpgraded),
Game1.player.daysLeftForToolUpgrade, _toolBeingUpgraded.DisplayName);
}
else
{
_hoverText = String.Format(_helper.SafeGetString(LanguageKeys.ToolIsFinishedBeingUpgraded),
_toolBeingUpgraded.DisplayName);
}
}
else
{
_toolBeingUpgraded = null;
}
}
private void DrawToolUpgradeStatus(object sender, EventArgs e)
{
if (!Game1.eventUp &&
_toolBeingUpgraded != null)
{
Point iconPosition = IconHandler.Handler.GetNewIconPosition();
ClickableTextureComponent textureComponent =
new ClickableTextureComponent(
new Rectangle(iconPosition.X, iconPosition.Y, 40, 40),
Game1.toolSpriteSheet,
_toolTexturePosition,
2.5f);
textureComponent.draw(Game1.spriteBatch);
if (textureComponent.containsPoint(Game1.getMouseX(), Game1.getMouseY()))
{
IClickableMenu.drawHoverText(
Game1.spriteBatch,
_hoverText, Game1.dialogueFont);
}
}
}
public void Dispose()
{
ToggleOption(false);
_toolBeingUpgraded = null;
}
}
}

View File

@ -59,7 +59,7 @@ namespace UIInfoSuite.UIElements
ClickableTextureComponent textureComponent = ClickableTextureComponent textureComponent =
new ClickableTextureComponent( new ClickableTextureComponent(
new Rectangle(iconPosition.X, iconPosition.Y, 40, 40), new Rectangle(iconPosition.X, iconPosition.Y, 40, 40),
Game1.content.Load<Texture2D>("LooseSprites\\Cursors"), Game1.mouseCursors,
new Rectangle(192, 1411, 20, 20), new Rectangle(192, 1411, 20, 20),
2f); 2f);
textureComponent.draw(Game1.spriteBatch); textureComponent.draw(Game1.spriteBatch);

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "Du fühlst dich heute gar nicht glücklich", "NotFeelingLuckyAtAll" : "Du fühlst dich heute gar nicht glücklich",
"ReadyToHarvest" : "Bereit zum Ernten!", "ReadyToHarvest" : "Bereit zum Ernten!",
"TodaysRecipe" : "Heutiges Rezept: ", "TodaysRecipe" : "Heutiges Rezept: ",
"TravelingMerchantIsInTown" : "Reisehändler ist in der Stadt!" "TravelingMerchantIsInTown" : "Reisehändler ist in der Stadt!",
"DaysUntilToolIsUpgraded" : "{0} dagen totdat {2} klaar is met upgraden",
"ToolIsFinishedBeingUpgraded" : "{0} is klaar!",
"ShowLuckIcon" : "Symbol \"Glück zeigen\"",
"ShowLevelUpAnimation" : "Zeige Level-up-Animation",
"ShowExperienceBar" : "Erfahrungsleiste anzeigen",
"AllowExperienceBarToFadeOut" : "Erlauben, dass die Erlebnisleiste ausgeblendet wird",
"ShowExperienceGain" : "Zeige Erfahrungsgewinn",
"ShowLocationOfTownsPeople" : "Stadtbewohner auf der Karte anzeigen",
"ShowBirthdayIcon" : "Symbol \"Geburtstag anzeigen\"",
"ShowHeartFills" : "Zeige Herzfüllungen",
"ShowAnimalsNeedPets" : "Zeigen Sie, wenn Tiere Haustiere brauchen",
"DisplayCalendarAndBillboard" : "Kalender / Billboard-Button anzeigen",
"ShowCropAndBarrelTooltip" : "Ernte- und Fasszeiten anzeigen",
"ShowItemEffectRanges" : "Show Vogelscheuche und Sprinkler-Bereich",
"ShowExtraItemInformation" : "Element-Hover-Informationen anzeigen",
"ShowTravelingMerchant" : "Zeige reisenden Händler",
"ShowHarvestPricesInShop" : "Show-Ernte-Preise",
"ShowWhenNewRecipesAreAvailable" : "Zeige, wenn neue Rezepte verfügbar sind",
"ShowToolUpgradeStatus" : "Toolstatus van upgrade tonen"
} }

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "You're not feeling lucky at all today...", "NotFeelingLuckyAtAll" : "You're not feeling lucky at all today...",
"ReadyToHarvest" : "Ready To Harvest!", "ReadyToHarvest" : "Ready To Harvest!",
"TodaysRecipe" : "Today's Recipe: ", "TodaysRecipe" : "Today's Recipe: ",
"TravelingMerchantIsInTown" : "Traveling merchant is in town!" "TravelingMerchantIsInTown" : "Traveling merchant is in town!",
"DaysUntilToolIsUpgraded" : "{0} days until {1} is finished being upgraded",
"ToolIsFinishedBeingUpgraded" : "{0} is finished!",
"ShowLuckIcon" : "Show luck icon",
"ShowLevelUpAnimation" : "Show level up animation",
"ShowExperienceBar" : "Show experience bar",
"AllowExperienceBarToFadeOut" : "Allow experience bar to fade out",
"ShowExperienceGain" : "Show experience gain",
"ShowLocationOfTownsPeople" : "Show townspeople on map",
"ShowBirthdayIcon" : "Show Birthday icon",
"ShowHeartFills" : "Show heart fills",
"ShowAnimalsNeedPets" : "Show when animals need pets",
"DisplayCalendarAndBillboard" : "Show calendar/billboard button",
"ShowCropAndBarrelTooltip" : "Show crop and barrel times",
"ShowItemEffectRanges" : "Show scarecrow and sprinkler range",
"ShowExtraItemInformation" : "Show item hover information",
"ShowTravelingMerchant" : "Show Traveling Merchant",
"ShowHarvestPricesInShop" : "Show shop harvest prices",
"ShowWhenNewRecipesAreAvailable" : "Show when new recipes are available",
"ShowToolUpgradeStatus" : "Show tool upgrade status"
} }

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "No te sientes afortunado en absoluto hoy ...", "NotFeelingLuckyAtAll" : "No te sientes afortunado en absoluto hoy ...",
"ReadyToHarvest" : "¡Listo para cosechar!", "ReadyToHarvest" : "¡Listo para cosechar!",
"TodaysRecipe" : "Receta de hoy: ", "TodaysRecipe" : "Receta de hoy: ",
"TravelingMerchantIsInTown" : "¡El comerciante que viaja está en ciudad!" "TravelingMerchantIsInTown" : "¡El comerciante que viaja está en ciudad!",
"DaysUntilToolIsUpgraded" : "{0} días hasta que {1} termine de actualizarse",
"ToolIsFinishedBeingUpgraded" : "{0} está terminada!",
"ShowLuckIcon" : "Mostrar ícono de suerte",
"ShowLevelUpAnimation" : "Mostrar animación de nivel superior",
"ShowExperienceBar" : "Mostrar barra de experiencia",
"AllowExperienceBarToFadeOut" : "Permitir que la barra de experiencia se desvanezca",
"ShowExperienceGain" : "Mostrar ganancia de experiencia",
"ShowLocationOfTownsPeople" : "Mostrar a la gente del pueblo en el mapa",
"ShowBirthdayIcon" : "Mostrar icono de cumpleaños",
"ShowHeartFills" : "Mostrar rellenos de corazón",
"ShowAnimalsNeedPets" : "Muestra cuando los animales necesitan mascotas",
"DisplayCalendarAndBillboard" : "Mostrar el botón de calendario / cartelera",
"ShowCropAndBarrelTooltip" : "Mostrar los tiempos de cosecha y barril",
"ShowItemEffectRanges" : "Mostrar rango de espantapájaros y de riego",
"ShowExtraItemInformation" : "Mostrar información de elemento emergente",
"ShowTravelingMerchant" : "Mostrar comerciante itinerante",
"ShowHarvestPricesInShop" : "Mostrar los precios de cosecha de la tienda",
"ShowWhenNewRecipesAreAvailable" : "Mostrar cuando hay nuevas recetas disponibles",
"ShowToolUpgradeStatus" : "Mostrar el estado de actualización de la herramienta"
} }

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "あなたは今日も幸運を感じていません...", "NotFeelingLuckyAtAll" : "あなたは今日も幸運を感じていません...",
"ReadyToHarvest" : "収穫準備!", "ReadyToHarvest" : "収穫準備!",
"TodaysRecipe" : "今日のレシピ: ", "TodaysRecipe" : "今日のレシピ: ",
"TravelingMerchantIsInTown" : "旅行中の商人が町にいる!" "TravelingMerchantIsInTown" : "旅行中の商人が町にいる!",
"DaysUntilToolIsUpgraded" : "{1}日が終わるまで{0}日間",
"ToolIsFinishedBeingUpgraded" : "{0}が終わった!",
"ShowLuckIcon" : "幸運アイコンを表示する",
"ShowLevelUpAnimation" : "レベルアップアニメーションを表示する",
"ShowExperienceBar" : "エクスペリエンスバーを表示",
"AllowExperienceBarToFadeOut" : "エクスペリエンスバーをフェードアウトさせる",
"ShowExperienceGain" : "経験値を表示",
"ShowLocationOfTownsPeople" : "町の人々を地図に表示する",
"ShowBirthdayIcon" : "誕生日を表示アイコン",
"ShowHeartFills" : "ハートフィルを表示する",
"ShowAnimalsNeedPets" : "動物がペットを必要とするときを表示する",
"DisplayCalendarAndBillboard" : "カレンダー/掲示板ボタンを表示する",
"ShowCropAndBarrelTooltip" : "作物と樽の時間を表示する",
"ShowItemEffectRanges" : "かかしとスプリンクラーの範囲を表示する",
"ShowExtraItemInformation" : "アイテムのホバー情報を表示する",
"ShowTravelingMerchant" : "旅行中の商人を表示する",
"ShowHarvestPricesInShop" : "店舗収穫価格を表示する",
"ShowWhenNewRecipesAreAvailable" : "新しいレシピが利用可能になったら表示する",
"ShowToolUpgradeStatus" : "ツールのアップグレードステータスを表示する"
} }

View File

@ -3,15 +3,34 @@
"Calendar" : "Calendário", "Calendar" : "Calendário",
"Days" : "dias", "Days" : "dias",
"DaysToMature" : "dias para amadurecer", "DaysToMature" : "dias para amadurecer",
"FeelingLucky" : "Você está sentindo 'sorte!", "FeelingLucky" : "Você está sentindo com muita sorte!",
"HarvestPrice" : "Preço de colheita", "HarvestPrice" : "Preço de colheita",
"Hours" : "horas", "Hours" : "horas",
"LevelUp" : "Upar", "LevelUp" : "Upou",
"LuckyButNotTooLucky" : "Sentimento de sorte ... mas não muito sorte", "LuckyButNotTooLucky" : "Sentindo-se com sorte ... mas não muita",
"MaybeStayHome" : "Talvez você deva ficar em casa hoje ...", "MaybeStayHome" : "Talvez você deva ficar em casa hoje ...",
"Minutes" : "minutos", "Minutes" : "minutos",
"NotFeelingLuckyAtAll" : "Você não está se sentindo sortudo de todo hoje ...", "NotFeelingLuckyAtAll" : "Você não está se sentindo sortudo hoje ...",
"ReadyToHarvest" : "Apronte para colher!", "ReadyToHarvest" : "pronto para colher!",
"TodaysRecipe" : "Receita de hoje: ", "TodaysRecipe" : "Receita de hoje: ",
"TravelingMerchantIsInTown" : "Comerciante ambulante está na cidade!" "TravelingMerchantIsInTown" : "O camelô está na cidade!",
"DaysUntilToolIsUpgraded" : "{0} dias até {1} terminarem sendo atualizados",
"ToolIsFinishedBeingUpgraded" : "{0} está terminado!",
"ShowLuckIcon" : "Mostrar ícone de sorte",
"ShowLevelUpAnimation" : "Mostrar animação de nível superior",
"ShowExperienceBar" : "Mostrar barra de experiência",
"AllowExperienceBarToFadeOut" : "Permitir barra de experiência desaparecer",
"ShowExperienceGain" : "Mostrar o ganho de experiência",
"ShowLocationOfTownsPeople" : "Mostrar pessoas da cidade no mapa",
"ShowBirthdayIcon" : "Exibir ícone de aniversário",
"ShowHeartFills" : "Mostrar preenchimentos cardíacos",
"ShowAnimalsNeedPets" : "Mostre quando os animais precisam de animais de estimação",
"DisplayCalendarAndBillboard" : "Mostrar o calendário / botão do quadro de avisos",
"ShowCropAndBarrelTooltip" : "Mostrar tempos de colheita e barril",
"ShowItemEffectRanges" : "Mostrar espantalho e intervalo de sprinklers",
"ShowExtraItemInformation" : "Mostrar informações do hover do item",
"ShowTravelingMerchant" : "Show Travelling Merchant",
"ShowHarvestPricesInShop" : "Mostrar preços de colheita da loja",
"ShowWhenNewRecipesAreAvailable" : "Mostrar quando novas receitas estão disponíveis",
"ShowToolUpgradeStatus" : "Mostrar status da atualização da ferramenta"
} }

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "Сегодня вам совсем не везет ...", "NotFeelingLuckyAtAll" : "Сегодня вам совсем не везет ...",
"ReadyToHarvest" : "Готовы к сбору урожая!", "ReadyToHarvest" : "Готовы к сбору урожая!",
"TodaysRecipe" : "Сегодняшний рецепт: ", "TodaysRecipe" : "Сегодняшний рецепт: ",
"TravelingMerchantIsInTown" : "Путешественник в городе!" "TravelingMerchantIsInTown" : "Путешественник в городе!",
"DaysUntilToolIsUpgraded" : "{0} дня, пока {1} не будет обновлено",
"ToolIsFinishedBeingUpgraded" : "{0} завершено!",
"ShowLuckIcon" : "Показать значок удачи",
"ShowLevelUpAnimation" : "Показывать анимацию уровня",
"ShowExperienceBar" : "Показать панель опыта",
"AllowExperienceBarToFadeOut" : "Позвонить в панель эффектов",
"ShowExperienceGain" : "Показать опыт",
"ShowLocationOfTownsPeople" : "Показать горожан на карте",
"ShowBirthdayIcon" : "Показать значок дня рождения",
"ShowHeartFills" : "Показать сердце заполняет",
"ShowAnimalsNeedPets" : "Показать, когда животные нуждаются в домашних животных",
"DisplayCalendarAndBillboard" : "Показать кнопку календаря / рекламного щита",
"ShowCropAndBarrelTooltip" : "Показывать время урожая и ствола",
"ShowItemEffectRanges" : "Показать пугало и спринклеры",
"ShowExtraItemInformation" : "Показывать информацию о паре",
"ShowTravelingMerchant" : "Показать Путешествующий Торговец",
"ShowHarvestPricesInShop" : "Показывать цены на урожай",
"ShowWhenNewRecipesAreAvailable" : "Показывать, когда доступны новые рецепты",
"ShowToolUpgradeStatus" : "Показать статус обновления инструмента"
} }

View File

@ -13,5 +13,21 @@
"NotFeelingLuckyAtAll" : "วันนี้คุณไม่รู้สึกโชคดีเลย", "NotFeelingLuckyAtAll" : "วันนี้คุณไม่รู้สึกโชคดีเลย",
"ReadyToHarvest" : "พร้อมที่จะเก็บเกี่ยว!", "ReadyToHarvest" : "พร้อมที่จะเก็บเกี่ยว!",
"TodaysRecipe" : "สูตรวันนี้: ", "TodaysRecipe" : "สูตรวันนี้: ",
"TravelingMerchantIsInTown" : "พ่อค้าเดินทางอยู่ในเมือง!" "TravelingMerchantIsInTown" : "พ่อค้าเดินทางอยู่ในเมือง!",
"ShowLuckIcon" : "Show luck icon",
"ShowLevelUpAnimation" : "Show level up animation",
"ShowExperienceBar" : "Show experience bar",
"AllowExperienceBarToFadeOut" : "Allow experience bar to fade out",
"ShowExperienceGain" : "Show experience gain",
"ShowLocationOfTownsPeople" : "Show townspeople on map",
"ShowBirthdayIcon" : "Show Birthday icon",
"ShowHeartFills" : "Show heart fills",
"ShowAnimalsNeedPets" : "Show when animals need pets",
"DisplayCalendarAndBillboard" : "Show calendar/billboard button",
"ShowCropAndBarrelTooltip" : "Show crop and barrel times",
"ShowItemEffectRanges" : "Show scarecrow and sprinkler range",
"ShowExtraItemInformation" : "Show item hover information",
"ShowTravelingMerchant" : "Show Traveling Merchant",
"ShowHarvestPricesInShop" : "Show shop harvest prices",
"ShowWhenNewRecipesAreAvailable" : "Show when new recipes are available"
} }

View File

@ -13,5 +13,24 @@
"NotFeelingLuckyAtAll" : "你一点都不觉得今天幸运", "NotFeelingLuckyAtAll" : "你一点都不觉得今天幸运",
"ReadyToHarvest" : "可以收获!", "ReadyToHarvest" : "可以收获!",
"TodaysRecipe" : "今日食谱:", "TodaysRecipe" : "今日食谱:",
"TravelingMerchantIsInTown" : "旅行商人在镇上!" "TravelingMerchantIsInTown" : "旅行商人在镇上!",
"DaysUntilToolIsUpgraded" : "{0}天,直到{1}完成升级",
"ToolIsFinishedBeingUpgraded" : "{0}完成!",
"ShowLuckIcon" : "顯示運氣圖標",
"ShowLevelUpAnimation" : "顯示關卡動畫",
"ShowExperienceBar" : "顯示體驗吧",
"AllowExperienceBarToFadeOut" : "允許經驗欄淡出",
"ShowExperienceGain" : "顯示經驗收益",
"ShowLocationOfTownsPeople" : "在地圖上顯示鄉民",
"ShowBirthdayIcon" : "顯示生日圖標",
"ShowHeartFills" : "顯示心臟填充",
"ShowAnimalsNeedPets" : "當動物需要寵物時顯示",
"DisplayCalendarAndBillboard" : "顯示日曆/廣告牌按鈕",
"ShowCropAndBarrelTooltip" : "顯示作物和桶的時間",
"ShowItemEffectRanges" : "顯示稻草人和噴水滅火器的範圍",
"ShowExtraItemInformation" : "顯示項目懸停信息",
"ShowTravelingMerchant" : "顯示旅行商人",
"ShowHarvestPricesInShop" : "顯示店鋪收穫價格",
"ShowWhenNewRecipesAreAvailable" : "顯示新的食譜可用",
"ShowToolUpgradeStatus" : "显示工具升级状态"
} }

View File

@ -3,11 +3,13 @@
"Author": "Cdaragorn", "Author": "Cdaragorn",
"Version": { "Version": {
"MajorVersion": 1, "MajorVersion": 1,
"MinorVersion": 2, "MinorVersion": 6,
"PatchVersion": 8, "PatchVersion": 0,
"Build": null "Build": null
}, },
"Description": "Adds a lot of useful information to the user interface. This is based on Demiacle's excellent UIModSuite.", "Description": "Adds a lot of useful information to the user interface. This is based on Demiacle's excellent UIModSuite.",
"UniqueID": "Cdaragorn.UiInfoSuite", "UniqueID": "Cdaragorn.UiInfoSuite",
"EntryDll": "UIInfoSuite.dll" "EntryDll": "UIInfoSuite.dll",
"MinimumApiVersion" : "2.1",
"UpdateKeys": [ "Nexus:1150" ]
} }

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Pathoschild.Stardew.ModBuildConfig" version="1.6.2" targetFramework="net452" /> <package id="Pathoschild.Stardew.ModBuildConfig" version="2.0.0" targetFramework="net452" />
</packages> </packages>