Add base for improved tile coordinate lookup functionality; typo fixes.
* Build tile dictionary at game launch to speed up tile lookups during gameplay. * Add GameLaunched event to setup new dictionary after other mods loaded. * Change `StaticTiles.getStaticTileInfoAtWithCategory` to use new dictionary for lookup. * Various typo fixes and other code cleanupmaster
parent
4b2e31fadc
commit
dd812851b4
|
@ -18,7 +18,7 @@ namespace stardew_access
|
|||
return;
|
||||
|
||||
#region Read Tile
|
||||
helper.ConsoleCommands.Add("readtile", "Toggle read tile feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("readtile", "Toggle read tile feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.ReadTile = !MainClass.Config.ReadTile;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -26,7 +26,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Read Tile is " + (MainClass.Config.ReadTile ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("flooring", "Toggle flooring in read tile.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("flooring", "Toggle flooring in read tile.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.ReadFlooring = !MainClass.Config.ReadFlooring;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -34,7 +34,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Flooring is " + (MainClass.Config.ReadFlooring ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("watered", "Toggle speaking watered or unwatered for crops.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("watered", "Toggle speaking watered or unwatered for crops.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.WateredToggle = !MainClass.Config.WateredToggle;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -44,7 +44,7 @@ namespace stardew_access
|
|||
#endregion
|
||||
|
||||
#region Radar Feature
|
||||
helper.ConsoleCommands.Add("radar", "Toggle radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("radar", "Toggle radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.Radar = !MainClass.Config.Radar;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -52,14 +52,14 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Radar " + (MainClass.Config.Radar ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rdebug", "Toggle debugging in radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rdebug", "Toggle debugging in radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.radarDebug = !MainClass.radarDebug;
|
||||
|
||||
MainClass.InfoLog("Radar debugging " + (MainClass.radarDebug ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rstereo", "Toggle stereo sound in radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rstereo", "Toggle stereo sound in radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.RadarStereoSound = !MainClass.Config.RadarStereoSound;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -67,14 +67,14 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Stereo sound is " + (MainClass.Config.RadarStereoSound ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rfocus", "Toggle focus mode in radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rfocus", "Toggle focus mode in radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
bool focus = MainClass.RadarFeature.ToggleFocus();
|
||||
|
||||
MainClass.InfoLog("Focus mode is " + (focus ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rdelay", "Set the delay of radar feature in milliseconds.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rdelay", "Set the delay of radar feature in milliseconds.", (string command, string[] args) =>
|
||||
{
|
||||
string? delayInString = null;
|
||||
|
||||
|
@ -107,7 +107,7 @@ namespace stardew_access
|
|||
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rrange", "Set the range of radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rrange", "Set the range of radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
string? rangeInString = null;
|
||||
|
||||
|
@ -142,7 +142,7 @@ namespace stardew_access
|
|||
|
||||
|
||||
#region Exclusions
|
||||
helper.ConsoleCommands.Add("readd", "Add an object key to the exclusions list of radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("readd", "Add an object key to the exclusions list of radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
string? keyToAdd = null;
|
||||
|
||||
|
@ -167,7 +167,7 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("reremove", "Remove an object key from the exclusions list of radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("reremove", "Remove an object key from the exclusions list of radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
string? keyToAdd = null;
|
||||
|
||||
|
@ -192,7 +192,7 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("relist", "List all the exclusions in the radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("relist", "List all the exclusions in the radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
if (MainClass.RadarFeature.exclusions.Count > 0)
|
||||
{
|
||||
|
@ -209,20 +209,20 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("reclear", "Clear the focus exclusions in the radar featrure.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("reclear", "Clear the focus exclusions in the radar featrure.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.RadarFeature.exclusions.Clear();
|
||||
MainClass.InfoLog($"Cleared the focus list in the exclusions feature.");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("recount", "Number of exclusions in the radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("recount", "Number of exclusions in the radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.InfoLog($"There are {MainClass.RadarFeature.exclusions.Count} exclusiond in the radar feature.");
|
||||
});
|
||||
#endregion
|
||||
|
||||
#region Focus
|
||||
helper.ConsoleCommands.Add("rfadd", "Add an object key to the focus list of radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rfadd", "Add an object key to the focus list of radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
string? keyToAdd = null;
|
||||
|
||||
|
@ -247,7 +247,7 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rfremove", "Remove an object key from the focus list of radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rfremove", "Remove an object key from the focus list of radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
string? keyToAdd = null;
|
||||
|
||||
|
@ -272,7 +272,7 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rflist", "List all the exclusions in the radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rflist", "List all the exclusions in the radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
if (MainClass.RadarFeature.focus.Count > 0)
|
||||
{
|
||||
|
@ -289,13 +289,13 @@ namespace stardew_access
|
|||
}
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rfclear", "Clear the focus list in the radar featrure.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rfclear", "Clear the focus list in the radar featrure.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.RadarFeature.focus.Clear();
|
||||
MainClass.InfoLog($"Cleared the focus list in the radar feature.");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("rfcount", "Number of list in the radar feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("rfcount", "Number of list in the radar feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.InfoLog($"There are {MainClass.RadarFeature.focus.Count} objects in the focus list in the radar feature.");
|
||||
});
|
||||
|
@ -304,7 +304,7 @@ namespace stardew_access
|
|||
#endregion
|
||||
|
||||
#region Tile marking
|
||||
helper.ConsoleCommands.Add("mark", "Marks the player's position for use in building construction in Carpenter Menu.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("mark", "Marks the player's position for use in building construction in Carpenter Menu.", (string command, string[] args) =>
|
||||
{
|
||||
if (Game1.currentLocation is not Farm)
|
||||
{
|
||||
|
@ -332,7 +332,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog($"Location {(int)Game1.player.getTileX()}x {(int)Game1.player.getTileY()}y added at {index} index.");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("marklist", "List all marked positions.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("marklist", "List all marked positions.", (string command, string[] args) =>
|
||||
{
|
||||
string toPrint = "";
|
||||
for (int i = 0; i < BuildingOperations.marked.Length; i++)
|
||||
|
@ -349,12 +349,12 @@ namespace stardew_access
|
|||
MainClass.InfoLog($"Marked positions:{toPrint}\nOpen command menu and use pageup and pagedown to check the list");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("buildlist", "List all buildings for selection for upgrading/demolishing/painting", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("buildlist", "List all buildings for selection for upgrading/demolishing/painting", (string command, string[] args) =>
|
||||
{
|
||||
onBuildListCalled();
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("buildsel", "Select the building index which you want to upgrade/demolish/paint", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("buildsel", "Select the building index which you want to upgrade/demolish/paint", (string command, string[] args) =>
|
||||
{
|
||||
if ((Game1.activeClickableMenu is not CarpenterMenu && Game1.activeClickableMenu is not PurchaseAnimalsMenu && Game1.activeClickableMenu is not AnimalQueryMenu) || !CarpenterMenuPatch.isOnFarm)
|
||||
{
|
||||
|
@ -451,28 +451,28 @@ namespace stardew_access
|
|||
#endregion
|
||||
|
||||
#region Other
|
||||
helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.ScreenReader.InitializeScreenReader();
|
||||
|
||||
MainClass.InfoLog("Screen Reader refreshed!");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("refmc", "Refresh mod config", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("refmc", "Refresh mod config", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config = helper.ReadConfig<ModConfig>();
|
||||
|
||||
MainClass.InfoLog("Mod Config refreshed!");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("refst", "Refresh static tiles", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("refst", "Refresh static tiles", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.STiles = new Features.StaticTiles();
|
||||
|
||||
MainClass.InfoLog("Static tiles refreshed!");
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("hnspercent", "Toggle between speaking in percentage or full health and stamina.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("hnspercent", "Toggle between speaking in percentage or full health and stamina.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.HealthNStaminaInPercentage = !MainClass.Config.HealthNStaminaInPercentage;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -480,7 +480,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Speaking in percentage is " + (MainClass.Config.HealthNStaminaInPercentage ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("snapmouse", "Toggle snap mouse feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("snapmouse", "Toggle snap mouse feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.SnapMouse = !MainClass.Config.SnapMouse;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -488,7 +488,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Snap Mouse is " + (MainClass.Config.SnapMouse ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("warning", "Toggle warnings feature.", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("warning", "Toggle warnings feature.", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.Warning = !MainClass.Config.Warning;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
@ -496,7 +496,7 @@ namespace stardew_access
|
|||
MainClass.InfoLog("Warnings is " + (MainClass.Config.Warning ? "on" : "off"));
|
||||
});
|
||||
|
||||
helper.ConsoleCommands.Add("tts", "Toggles the screen reader/tts", (string commmand, string[] args) =>
|
||||
helper.ConsoleCommands.Add("tts", "Toggles the screen reader/tts", (string command, string[] args) =>
|
||||
{
|
||||
MainClass.Config.TTS = !MainClass.Config.TTS;
|
||||
helper.WriteConfig(MainClass.Config);
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
using Newtonsoft.Json.Linq;
|
||||
using StardewValley;
|
||||
using System.Linq;
|
||||
|
||||
namespace stardew_access.Features
|
||||
{
|
||||
public class StaticTiles
|
||||
{
|
||||
private JObject? staticTilesData = null;
|
||||
private JObject? customTilesData = null;
|
||||
HashSet<KeyValuePair<string, JToken?>>? staticTilesDataSet = null;
|
||||
HashSet<KeyValuePair<string, JToken?>>? customTilesDataSet = null;
|
||||
private static JObject? staticTilesData = null;
|
||||
private static JObject? customTilesData = null;
|
||||
private static Dictionary<string, Dictionary<(short x, short y), (string name, CATEGORY category)>?>? staticTilesDataDict = null;
|
||||
private static Dictionary<string, Dictionary<(short x, short y), (string name, CATEGORY category)>?>? customTilesDataDict = null;
|
||||
|
||||
public StaticTiles()
|
||||
{
|
||||
|
@ -17,14 +18,13 @@ namespace stardew_access.Features
|
|||
|
||||
try
|
||||
{
|
||||
using (StreamReader file = new StreamReader(Path.Combine(MainClass.ModHelper.DirectoryPath, "assets", "static-tiles.json")))
|
||||
using (StreamReader file = new(Path.Combine(MainClass.ModHelper.DirectoryPath, "assets", "static-tiles.json")))
|
||||
{
|
||||
string json = file.ReadToEnd();
|
||||
staticTilesData = JObject.Parse(json);
|
||||
}
|
||||
if (staticTilesData is not null)
|
||||
{
|
||||
staticTilesDataSet = new HashSet<KeyValuePair<string, JToken>>(staticTilesData);
|
||||
}
|
||||
|
||||
MainClass.InfoLog($"Loaded static-tile.json");
|
||||
|
@ -36,14 +36,13 @@ namespace stardew_access.Features
|
|||
|
||||
try
|
||||
{
|
||||
using (StreamReader file = new StreamReader(Path.Combine(MainClass.ModHelper.DirectoryPath, "assets", "custom-tiles.json")))
|
||||
using (StreamReader file = new(Path.Combine(MainClass.ModHelper.DirectoryPath, "assets", "custom-tiles.json")))
|
||||
{
|
||||
string json = file.ReadToEnd();
|
||||
customTilesData = JObject.Parse(json);
|
||||
}
|
||||
if (customTilesData is not null)
|
||||
{
|
||||
customTilesDataSet = new HashSet<KeyValuePair<string, JToken>>(customTilesData);
|
||||
}
|
||||
|
||||
MainClass.InfoLog($"Loaded custom-tile.json");
|
||||
|
@ -52,11 +51,12 @@ namespace stardew_access.Features
|
|||
{
|
||||
MainClass.InfoLog($"custom-tiles.json file not found or an error occured while initializing custom-tiles.json\nThe path of the file should be:\n\t{Path.Combine(MainClass.ModHelper.DirectoryPath, "assets", "custom-tiles.json")}");
|
||||
}
|
||||
this.SetupTilesDicts();
|
||||
}
|
||||
|
||||
public bool isAvailable(string locationName)
|
||||
public static bool IsAvailable(string locationName)
|
||||
{
|
||||
List<JObject> allData = new List<JObject>();
|
||||
List<JObject> allData = new();
|
||||
|
||||
if (customTilesData != null) allData.Add(customTilesData);
|
||||
if (staticTilesData != null) allData.Add(staticTilesData);
|
||||
|
@ -67,7 +67,7 @@ namespace stardew_access.Features
|
|||
{
|
||||
if (location.Key.Contains("||") && MainClass.ModHelper != null)
|
||||
{
|
||||
string uniqueModID = location.Key.Substring(location.Key.LastIndexOf("||") + 2);
|
||||
string uniqueModID = location.Key[(location.Key.LastIndexOf("||") + 2)..];
|
||||
string locationNameInJson = location.Key.Remove(location.Key.LastIndexOf("||"));
|
||||
bool isLoaded = MainClass.ModHelper.ModRegistry.IsLoaded(uniqueModID);
|
||||
|
||||
|
@ -82,93 +82,92 @@ namespace stardew_access.Features
|
|||
return false;
|
||||
}
|
||||
|
||||
public (string? name, CATEGORY category) GetTileFromSet(int x, int y, GameLocation currentLocation, HashSet<KeyValuePair<string, JToken?>> data)
|
||||
public static (string? name, CATEGORY category) GetTileFromDict(int x, int y)
|
||||
{
|
||||
if (staticTilesDataDict is not null && staticTilesDataDict.TryGetValue(Game1.currentLocation.Name, out var locationDict))
|
||||
{
|
||||
if (locationDict is not null && locationDict.TryGetValue(((short)x, (short)y), out var tile))
|
||||
{
|
||||
//MainClass.DebugLog($"Tile ({x}, {y}) is in the dict as {tile.name}.");
|
||||
return tile;
|
||||
}
|
||||
} /*else if (locationDict is null) {
|
||||
//MainClass.DebugLog($"Skipping null entry for location {Game1.currentLocation.Name}.");
|
||||
}
|
||||
else {
|
||||
MainClass.InfoLog($"Location {Game1.currentLocation.Name} not found in static tiles.");
|
||||
}*/
|
||||
return (null, CATEGORY.Others);
|
||||
}
|
||||
|
||||
private static Dictionary<string, Dictionary<(short x, short y), (string name, CATEGORY category)>?>? BuildTilesDict(JObject? data)
|
||||
{
|
||||
if (data is null) return null;
|
||||
//MainClass.DebugLog("Loading dict data");
|
||||
var comparer = StringComparer.OrdinalIgnoreCase;
|
||||
Dictionary<string, Dictionary<(short x, short y), (string name, CATEGORY category)>?> tilesDict = new(comparer);
|
||||
foreach (KeyValuePair<string, JToken?> location in data)
|
||||
{
|
||||
try
|
||||
{
|
||||
//MainClass.DebugLog($"Entering loop for location {location}.");
|
||||
if (location.Value is null) continue;
|
||||
string locationName = location.Key;
|
||||
if (locationName.Contains("||") && MainClass.ModHelper is not null)
|
||||
{
|
||||
// Mod Specific Tiles
|
||||
// We can add tiles that only get detected when the specified mod is loaded.
|
||||
// Syntax: <location name>||<Mod's unique id, look into the mod's manifest.json for unique id>
|
||||
// Example: THe following tile will only be detected if Stardew Valley Expanded mod is installed
|
||||
// {
|
||||
// .
|
||||
// .
|
||||
// .
|
||||
// "Town||FlashShifter.StardewValleyExpandedCP":{
|
||||
// "<Tile Name>":{
|
||||
// "x": [<x location(s)>],
|
||||
// "y": [<y location(s)>],
|
||||
// "type": "<Category name>"
|
||||
// }
|
||||
// },
|
||||
// .
|
||||
// .
|
||||
// .
|
||||
// }
|
||||
string uniqueModID = locationName.Substring(locationName.LastIndexOf("||") + 2);
|
||||
/* Mod Specific Tiles
|
||||
* We can add tiles that only get detected when the specified mod is loaded.
|
||||
* Syntax: <location name>||<Mod's unique id, look into the mod's manifest.json for unique id>
|
||||
* Example: The following tile will only be detected if Stardew Valley Expanded mod is installed
|
||||
* {
|
||||
* .
|
||||
* .
|
||||
* .
|
||||
* "Town||FlashShifter.StardewValleyExpandedCP":{
|
||||
* "<Tile Name>":{
|
||||
* "x": [<x location(s)>],
|
||||
* "y": [<y location(s)>],
|
||||
* "type": "<Category name>"
|
||||
* }
|
||||
* },
|
||||
* .
|
||||
* .
|
||||
* .
|
||||
* }
|
||||
*/
|
||||
string uniqueModID = locationName[(locationName.LastIndexOf("||") + 2)..];
|
||||
locationName = locationName.Remove(locationName.LastIndexOf("||"));
|
||||
bool isLoaded = MainClass.ModHelper.ModRegistry.IsLoaded(uniqueModID);
|
||||
|
||||
if (!isLoaded) continue; // Skip if the specified mod is not loaded
|
||||
}
|
||||
|
||||
if (locationName.StartsWith("farm_", StringComparison.OrdinalIgnoreCase))
|
||||
//MainClass.DebugLog($"Loading tiles for {locationName}.");
|
||||
if (location.Value.Type == JTokenType.Null)
|
||||
{
|
||||
string farmType = locationName.Substring(locationName.LastIndexOf("_") + 1);
|
||||
int farmTypeIndex = getFarmTypeIndex(farmType);
|
||||
locationName = locationName.Remove(locationName.LastIndexOf("_"));
|
||||
|
||||
if (farmTypeIndex != Game1.whichFarm) continue; // Skip if current farm type does not matches
|
||||
// if (Game1.whichModFarm is not null) MainClass.DebugLog($"{farmType} {Game1.whichModFarm.MapName}");
|
||||
if (farmTypeIndex != 7 || Game1.whichModFarm is null || !farmType.Equals(Game1.whichModFarm.MapName, StringComparison.OrdinalIgnoreCase)) continue; // Not tested but should work
|
||||
tilesDict.Add(location.Key, null);
|
||||
//MainClass.DebugLog($"Created null entry for location {location.Key}.");
|
||||
//MainClass.DebugLog("SPAM!!!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (locationName.Equals("town_joja", StringComparison.OrdinalIgnoreCase) && Game1.MasterPlayer.mailReceived.Contains("JojaMember"))
|
||||
|
||||
Dictionary<(short x, short y), (string name, CATEGORY category)>? locationDict = new();
|
||||
//MainClass.DebugLog($"Entering tiles loop for {locationName}.");
|
||||
foreach (var tileInfo in ((JObject)location.Value))
|
||||
{
|
||||
locationName = "town";
|
||||
}
|
||||
|
||||
if (!currentLocation.Name.Equals(locationName, StringComparison.OrdinalIgnoreCase)) continue;
|
||||
if (location.Value is null) continue;
|
||||
|
||||
foreach (var tile in ((JObject)location.Value))
|
||||
if (tileInfo.Value == null) continue;
|
||||
string key = tileInfo.Key;
|
||||
var tile = tileInfo.Value;
|
||||
if (tile.Type == JTokenType.Object )
|
||||
{
|
||||
if (tile.Value is null) continue;
|
||||
|
||||
JToken? tileXArray = tile.Value["x"];
|
||||
JToken? tileYArray = tile.Value["y"];
|
||||
JToken? tileType = tile.Value["type"];
|
||||
JToken? tileXArray = tile["x"];
|
||||
JToken? tileYArray = tile["y"];
|
||||
JToken? tileType = tile["type"];
|
||||
|
||||
if (tileXArray is null || tileYArray is null || tileType is null)
|
||||
continue;
|
||||
|
||||
bool isXPresent = false;
|
||||
bool isYPresent = false;
|
||||
|
||||
foreach (var item in tileXArray)
|
||||
{
|
||||
if (short.Parse(item.ToString()) != x)
|
||||
continue;
|
||||
|
||||
isXPresent = true;
|
||||
break;
|
||||
}
|
||||
|
||||
foreach (var item in tileYArray)
|
||||
{
|
||||
if (short.Parse(item.ToString()) != y)
|
||||
continue;
|
||||
|
||||
isYPresent = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (isXPresent && isYPresent)
|
||||
{
|
||||
string key = tile.Key;
|
||||
//MainClass.DebugLog($"Adding tile {key} to location {locationName}.");
|
||||
if (key.Contains('[') && key.Contains(']'))
|
||||
{
|
||||
int i1 = key.IndexOf('[');
|
||||
|
@ -179,30 +178,105 @@ namespace stardew_access.Features
|
|||
key = key.Remove(i1, ++i2 - i1);
|
||||
}
|
||||
}
|
||||
(string key, CATEGORY category) tileData = (key.Trim(), CATEGORY.FromString(tileType.ToString().ToLower()));
|
||||
|
||||
return (key.Trim(), CATEGORY.FromString(tileType.ToString().ToLower()));
|
||||
foreach (var item_x in tileXArray)
|
||||
{
|
||||
short x = short.Parse(item_x.ToString());
|
||||
foreach (var item_y in tileYArray)
|
||||
{
|
||||
short y = short.Parse(item_y.ToString());
|
||||
(short x, short y) coords = (x, y);
|
||||
try
|
||||
{
|
||||
locationDict.Add(coords, tileData);
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
MainClass.ErrorLog($"Failed setting tile {key} for location {locationName}. Reason:\n\t{e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//MainClass.DebugLog($"Location Dict has {locationDict.Count} members.");
|
||||
if (locationDict.Count > 0)
|
||||
{
|
||||
//MainClass.DebugLog($"Adding locationDict for {locationName}");
|
||||
tilesDict.Add(locationName, locationDict);
|
||||
//MainClass.DebugLog($"Added locationDict for {locationName}");
|
||||
}
|
||||
} catch (System.Exception e) {
|
||||
if (location.Value is null || location.Value.Type == JTokenType.Null)
|
||||
{
|
||||
tilesDict.Add(location.Key, null);
|
||||
//MainClass.DebugLog($"Created null entry for location {location.Key}.");
|
||||
} else {
|
||||
MainClass.ErrorLog($"Unable to build tiles dict; failed on location {location.Key} with value ({location.Value.GetType()}){location.Value}. Reason:\n\t{e}");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tilesDict.Count > 0)
|
||||
{
|
||||
//MainClass.DebugLog("Dict loaded, returning.");
|
||||
return tilesDict;
|
||||
} else {
|
||||
//MainClass.DebugLog("Dict not loaded, returning null");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupTilesDicts()
|
||||
{
|
||||
//MainClass.DebugLog("Attempting to set dicts");
|
||||
try
|
||||
{
|
||||
staticTilesDataDict = BuildTilesDict(staticTilesData);
|
||||
if (staticTilesDataDict is not null)
|
||||
{
|
||||
//MainClass.DebugLog($"staticTilesDataDict has {staticTilesDataDict.Count} entries.");
|
||||
//MainClass.DebugLog($"Keys: {staticTilesDataDict.Keys}");
|
||||
} else {
|
||||
//MainClass.DebugLog("Static tiles not loaded.");
|
||||
}
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
MainClass.ErrorLog($"Failed to set static tiles dict. Reason: \n\t{e}");
|
||||
}
|
||||
try
|
||||
{
|
||||
customTilesDataDict = BuildTilesDict(customTilesData);
|
||||
if (customTilesDataDict is not null)
|
||||
{
|
||||
//MainClass.DebugLog($"customTilesDataDict has {customTilesDataDict.Count} entries.");
|
||||
} else {
|
||||
//MainClass.DebugLog("Custom tiles not loaded.");
|
||||
}
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
MainClass.ErrorLog($"Faild to set custom tiles dict. Reason:\n\t{e}");
|
||||
}
|
||||
//MainClass.DebugLog("Successfully created tiles dicts.");
|
||||
}
|
||||
|
||||
public static string? GetStaticTileInfoAt(int x, int y)
|
||||
{
|
||||
return GetStaticTileInfoAtWithCategory(x, y).name;
|
||||
}
|
||||
|
||||
public static (string? name, CATEGORY category) GetStaticTileInfoAtWithCategory(int x, int y)
|
||||
{
|
||||
if (customTilesDataDict is not null) return GetTileFromDict(x, y);
|
||||
if (staticTilesDataDict is not null) return GetTileFromDict(x, y);
|
||||
|
||||
return (null, CATEGORY.Others);
|
||||
}
|
||||
|
||||
public string? getStaticTileInfoAt(int x, int y)
|
||||
{
|
||||
return getStaticTileInfoAtWithCategory(x, y).name;
|
||||
}
|
||||
|
||||
public (string? name, CATEGORY category) getStaticTileInfoAtWithCategory(int x, int y)
|
||||
{
|
||||
GameLocation currentLocation = Game1.currentLocation;
|
||||
if (customTilesDataSet is not null) return GetTileFromSet(x, y, currentLocation, customTilesDataSet);
|
||||
if (staticTilesDataSet is not null) return GetTileFromSet(x, y, currentLocation, staticTilesDataSet);
|
||||
|
||||
return (null, CATEGORY.Others);
|
||||
}
|
||||
|
||||
private int getFarmTypeIndex(string farmType)
|
||||
private static int GetFarmTypeIndex(string farmType)
|
||||
{
|
||||
return farmType.ToLower() switch
|
||||
{
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace stardew_access.Features
|
|||
string? resourceClump = getResourceClumpAtTile(x, y, lessInfo);
|
||||
string? farmAnimal = getFarmAnimalAt(Game1.currentLocation, x, y);
|
||||
string? parrot = getParrotPerchAtTile(x, y);
|
||||
(string? name, CATEGORY category) staticTile = MainClass.STiles.getStaticTileInfoAtWithCategory(x, y);
|
||||
(string? name, CATEGORY category) staticTile = StaticTiles.GetStaticTileInfoAtWithCategory(x, y);
|
||||
string? bush = getBushAtTile(x, y, lessInfo);
|
||||
|
||||
if (Game1.currentLocation.isCharacterAtTile(tile) is NPC npc)
|
||||
|
|
|
@ -141,6 +141,7 @@ namespace stardew_access
|
|||
|
||||
helper.Events.Input.ButtonPressed += this.OnButtonPressed;
|
||||
helper.Events.GameLoop.UpdateTicked += this.onUpdateTicked;
|
||||
helper.Events.GameLoop.GameLaunched += this.onGameLaunched;
|
||||
AppDomain.CurrentDomain.DomainUnload += OnExit;
|
||||
AppDomain.CurrentDomain.ProcessExit += OnExit;
|
||||
}
|
||||
|
@ -159,6 +160,12 @@ namespace stardew_access
|
|||
return new API();
|
||||
}
|
||||
|
||||
private void onGameLaunched(object? sender, GameLaunchedEventArgs? e)
|
||||
{
|
||||
if (sTiles is not null)
|
||||
sTiles.SetupTilesDicts();
|
||||
}
|
||||
|
||||
private void onUpdateTicked(object? sender, UpdateTickedEventArgs? e)
|
||||
{
|
||||
if (!Context.IsPlayerFree)
|
||||
|
|
|
@ -674,6 +674,7 @@
|
|||
"type": "decoration"
|
||||
}
|
||||
},
|
||||
"farmhouse": null,
|
||||
"fishshop": {
|
||||
"Shop Counter": {
|
||||
"x": [4, 5, 6],
|
||||
|
|
Loading…
Reference in New Issue