Added categories in focus mode and organized code

master
shoaib11120 2022-01-22 11:57:51 +05:30
parent 590fe5288f
commit aca9888a80
3 changed files with 141 additions and 102 deletions

View File

@ -45,7 +45,7 @@ namespace stardew_access
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 commmand, string[] args) =>
{ {
bool focus = MainClass.radarFeature.toggleFocus(); bool focus = MainClass.radarFeature.ToggleFocus();
MainClass.monitor.Log("Focus mode is " + (focus? "on" : "off"), LogLevel.Info); MainClass.monitor.Log("Focus mode is " + (focus? "on" : "off"), LogLevel.Info);
}); });
@ -85,7 +85,7 @@ namespace stardew_access
} }
else else
{ {
MainClass.monitor.Log($"Cannot find{keyToAdd} key in exclusions.", LogLevel.Info); MainClass.monitor.Log($"Cannot find {keyToAdd} key in exclusions.", LogLevel.Info);
} }
} }
else else
@ -150,7 +150,7 @@ namespace stardew_access
} }
else else
{ {
MainClass.monitor.Log($"Cannot find{keyToAdd} key in focus.", LogLevel.Info); MainClass.monitor.Log($"Cannot find {keyToAdd} key in focus.", LogLevel.Info);
} }
} }
else else

View File

@ -5,10 +5,37 @@ using StardewValley.TerrainFeatures;
namespace stardew_access.Game namespace stardew_access.Game
{ {
internal class door {}
internal class building{} // Custom enum for category
internal class otherObjects{} public class CATEGORY
internal class junimoBundle{} {
private string _typeKeyWord;
private CATEGORY(string typeKeyWord)
{
_typeKeyWord = typeKeyWord;
}
public override string ToString()
{
return _typeKeyWord;
}
public static CATEGORY Farmers = new CATEGORY("farmer");
public static CATEGORY FarmAnimals = new CATEGORY("animal");
public static CATEGORY NPCs = new CATEGORY("npc");
public static CATEGORY Furnitures = new CATEGORY("furniture");
public static CATEGORY Flooring = new CATEGORY("flooring");
public static CATEGORY Grass = new CATEGORY("grass");
public static CATEGORY Crops = new CATEGORY("crop");
public static CATEGORY Trees = new CATEGORY("tree") ;
public static CATEGORY Buildings = new CATEGORY("building");
public static CATEGORY MineItems = new CATEGORY("mine item");
public static CATEGORY Chests = new CATEGORY("chest");
public static CATEGORY WaterTiles = new CATEGORY("water");
public static CATEGORY Others = new CATEGORY("other");
}
public class Radar public class Radar
{ {
@ -35,19 +62,29 @@ namespace stardew_access.Game
exclusions.Add("weed"); exclusions.Add("weed");
exclusions.Add("twig"); exclusions.Add("twig");
exclusions.Add("coloured stone"); exclusions.Add("coloured stone");
exclusions.Add("mine stone");
exclusions.Add("clay stone"); exclusions.Add("clay stone");
exclusions.Add("fossil stone"); exclusions.Add("fossil stone");
exclusions.Add("crop"); exclusions.Add("crop");
exclusions.Add("giant crop");
exclusions.Add("grass");
exclusions.Add("tree"); exclusions.Add("tree");
exclusions.Add("flooring"); exclusions.Add("flooring");
exclusions.Add("water"); exclusions.Add("water");
exclusions.Add("door"); exclusions.Add("grass");
/* Not excluded
*
*
* exclusions.Add("farmer");
* exclusions.Add("animal");
* exclusions.Add("npc");
* exclusions.Add("furniture")
* exclusions.Add("other");
* exclusions.Add("building");
* exclusions.Add("mine item");
* exclusions.Add("chest");
*/
} }
public async void run() public async void Run()
{ {
if(MainClass.radarDebug) if(MainClass.radarDebug)
MainClass.monitor.Log($"\n\nRead Tile started", StardewModdingAPI.LogLevel.Debug); MainClass.monitor.Log($"\n\nRead Tile started", StardewModdingAPI.LogLevel.Debug);
@ -59,7 +96,7 @@ namespace stardew_access.Game
closed.Clear(); closed.Clear();
furnitures.Clear(); furnitures.Clear();
npcs.Clear(); npcs.Clear();
findTile(currPosition, currPosition, limit); FindTile(currPosition, currPosition, limit);
if(MainClass.radarDebug) if(MainClass.radarDebug)
MainClass.monitor.Log($"\nRead Tile stopped\n\n", StardewModdingAPI.LogLevel.Debug); MainClass.monitor.Log($"\nRead Tile stopped\n\n", StardewModdingAPI.LogLevel.Debug);
@ -68,7 +105,7 @@ namespace stardew_access.Game
isRunning = false; isRunning = false;
} }
public void findTile(Vector2 position, Vector2 center, int limit) public void FindTile(Vector2 position, Vector2 center, int limit)
{ {
if (Math.Abs(position.X - center.X) > limit) if (Math.Abs(position.X - center.X) > limit)
return; return;
@ -78,47 +115,47 @@ namespace stardew_access.Game
return; return;
closed.Add(position); closed.Add(position);
checkTile(position); CheckTile(position);
Vector2 northPosition = new(position.X, position.Y-1); Vector2 northPosition = new(position.X, position.Y-1);
Vector2 eastPosition = new(position.X+1, position.Y); Vector2 eastPosition = new(position.X+1, position.Y);
Vector2 westPosition = new(position.X-1, position.Y); Vector2 westPosition = new(position.X-1, position.Y);
Vector2 southPosition = new(position.X, position.Y+1); Vector2 southPosition = new(position.X, position.Y+1);
findTile(northPosition, center, limit); FindTile(northPosition, center, limit);
findTile(eastPosition, center, limit); FindTile(eastPosition, center, limit);
findTile(westPosition, center, limit); FindTile(westPosition, center, limit);
findTile(southPosition, center, limit); FindTile(southPosition, center, limit);
} }
public void checkTile(Vector2 position) public void CheckTile(Vector2 position)
{ {
try try
{ {
Dictionary<Vector2, Netcode.NetRef<TerrainFeature>> terrainFeature = Game1.currentLocation.terrainFeatures.FieldDict; Dictionary<Vector2, Netcode.NetRef<TerrainFeature>> terrainFeature = Game1.currentLocation.terrainFeatures.FieldDict;
// Check for npcs // Check for npcs
if (Game1.currentLocation.isCharacterAtTile(position) != null && !exclusions.Contains("npc")) if (Game1.currentLocation.isCharacterAtTile(position) != null)
{ {
NPC npc = Game1.currentLocation.isCharacterAtTile(position); NPC npc = Game1.currentLocation.isCharacterAtTile(position);
if (!npcs.Contains(npc)) if (!npcs.Contains(npc))
{ {
if (npc.isVillager() || npc.CanSocialize) if (npc.isVillager() || npc.CanSocialize)
playSoundAt(position, npc.displayName, typeof(Farmer)); // Villager PlaySoundAt(position, npc.displayName, CATEGORY.Farmers); // Villager
else else
playSoundAt(position, npc.displayName, typeof(NPC)); PlaySoundAt(position, npc.displayName, CATEGORY.NPCs);
} }
} }
// Check for animals // Check for animals
else if (ReadTile.getFarmAnimalAt(Game1.currentLocation, (int)position.X, (int)position.Y) != null && !exclusions.Contains("animals")) else if (ReadTile.getFarmAnimalAt(Game1.currentLocation, (int)position.X, (int)position.Y) != null)
{ {
string name = ReadTile.getFarmAnimalAt(Game1.currentLocation, (int)position.X, (int)position.Y, onlyName: true); string name = ReadTile.getFarmAnimalAt(Game1.currentLocation, (int)position.X, (int)position.Y, onlyName: true);
playSoundAt(position, name, typeof(FarmAnimal)); PlaySoundAt(position, name, CATEGORY.FarmAnimals);
} }
// Check for water // Check for water
else if (Game1.currentLocation.isWaterTile((int)position.X, (int)position.Y) && !exclusions.Contains("water")) else if (Game1.currentLocation.isWaterTile((int)position.X, (int)position.Y))
{ {
playSoundAt(position, null, typeof(WaterTiles)); PlaySoundAt(position, null, CATEGORY.WaterTiles);
} }
// Check for objects // Check for objects
else if (Game1.currentLocation.isObjectAtTile((int)position.X, (int)position.Y)) else if (Game1.currentLocation.isObjectAtTile((int)position.X, (int)position.Y))
@ -128,17 +165,33 @@ namespace stardew_access.Game
if (objectName != null) if (objectName != null)
{ {
if (obj is Furniture && !exclusions.Contains("furniture")) objectName = objectName.ToLower().Trim();
if (obj is Furniture)
{ {
if (!furnitures.Contains(obj as Furniture)) if (!furnitures.Contains(obj as Furniture))
{ {
furnitures.Add(obj as Furniture); furnitures.Add(obj as Furniture);
playSoundAt(position, objectName, typeof(Furniture)); PlaySoundAt(position, objectName, CATEGORY.Furnitures);
} }
} }
else if (obj is not Furniture) else if(obj is Chest)
{ {
playSoundAt(position, objectName, typeof(otherObjects)); PlaySoundAt(position, objectName, CATEGORY.Chests);
}
else if (obj is not Furniture && obj is not Chest)
{
bool isMineItem = false;
if(objectName.Contains("node") || objectName.Contains("mystic stone") || objectName.Contains("jade stone"))
isMineItem = true;
else if (objectName.Contains("geode") || objectName.Contains("mine stone") || objectName.Contains("barrel") || objectName.Contains("item box"))
isMineItem = true;
if (isMineItem)
PlaySoundAt(position, objectName, CATEGORY.MineItems);
else
PlaySoundAt(position, objectName, CATEGORY.Others);
} }
} }
} }
@ -149,72 +202,72 @@ namespace stardew_access.Game
string? terrain = ReadTile.getTerrainFeatureAtTile(tr).ToLower(); string? terrain = ReadTile.getTerrainFeatureAtTile(tr).ToLower();
if (terrain != null) if (terrain != null)
{ {
if (tr.Get() is HoeDirt && !exclusions.Contains("crop")) if (tr.Get() is HoeDirt)
{ {
playSoundAt(position, terrain, typeof(Crop)); PlaySoundAt(position, terrain, CATEGORY.Crops);
} }
else if (tr.Get() is GiantCrop && !exclusions.Contains("giant crop")) else if (tr.Get() is GiantCrop)
{ {
playSoundAt(position, terrain, typeof(GiantCrop)); PlaySoundAt(position, terrain, CATEGORY.Crops);
} }
else if (tr.Get() is Bush && !exclusions.Contains("bush")) else if (tr.Get() is Bush)
{ {
playSoundAt(position, terrain, typeof(Bush)); PlaySoundAt(position, terrain, CATEGORY.Others);
} }
else if (tr.Get() is CosmeticPlant && !exclusions.Contains("cosmetic plant")) else if (tr.Get() is CosmeticPlant)
{ {
playSoundAt(position, terrain, typeof(CosmeticPlant)); PlaySoundAt(position, terrain, CATEGORY.Furnitures);
} }
else if (tr.Get() is Flooring && !exclusions.Contains("flooring")) else if (tr.Get() is Flooring)
{ {
playSoundAt(position, terrain, typeof(Flooring)); PlaySoundAt(position, terrain, CATEGORY.Flooring);
} }
else if (tr.Get() is FruitTree && !exclusions.Contains("fruit tree")) else if (tr.Get() is FruitTree)
{ {
playSoundAt(position, terrain, typeof(FruitTree)); PlaySoundAt(position, terrain, CATEGORY.Trees);
} }
else if (tr.Get() is Grass && !exclusions.Contains("grass")) else if (tr.Get() is Grass)
{ {
playSoundAt(position, terrain, typeof(Grass)); PlaySoundAt(position, terrain, CATEGORY.Grass);
} }
else if (tr.Get() is Tree && !exclusions.Contains("tree")) else if (tr.Get() is Tree)
{ {
playSoundAt(position, terrain, typeof(Tree)); PlaySoundAt(position, terrain, CATEGORY.Trees);
} }
else if (tr.Get() is Quartz && !exclusions.Contains("quartz")) else if (tr.Get() is Quartz)
{ {
playSoundAt(position, terrain, typeof(Quartz)); PlaySoundAt(position, terrain, CATEGORY.Others);
} }
else if (tr.Get() is Leaf && !exclusions.Contains("leaf")) else if (tr.Get() is Leaf)
{ {
playSoundAt(position, terrain, typeof(Leaf)); PlaySoundAt(position, terrain, CATEGORY.Others);
} }
} }
} }
// Check for Mine ladders // Check for Mine ladders
else if (ReadTile.isMineLadderAtTile((int)position.X, (int)position.Y) && !exclusions.Contains("ladder")) else if (ReadTile.isMineLadderAtTile((int)position.X, (int)position.Y))
{ {
playSoundAt(position, "ladder", typeof(door)); PlaySoundAt(position, "ladder", CATEGORY.Buildings);
} }
// Check for doors // Check for doors
else if (ReadTile.isDoorAtTile((int)position.X, (int)position.Y) && !exclusions.Contains("door")) else if (ReadTile.isDoorAtTile((int)position.X, (int)position.Y))
{ {
playSoundAt(position, "door", typeof(door)); PlaySoundAt(position, "door", CATEGORY.Buildings);
} }
// Check for buildings on maps // Check for buildings on maps
else if (ReadTile.getBuildingAtTile((int)position.X, (int)position.Y) != null && !exclusions.Contains("building")) else if (ReadTile.getBuildingAtTile((int)position.X, (int)position.Y) != null)
{ {
playSoundAt(position, ReadTile.getBuildingAtTile((int)position.X, (int)position.Y), typeof(building)); PlaySoundAt(position, ReadTile.getBuildingAtTile((int)position.X, (int)position.Y), CATEGORY.Buildings);
} }
// Check for resource clumps // Check for resource clumps
else if (ReadTile.getResourceClumpAtTile((int)position.X, (int)position.Y) != null && !exclusions.Contains("resource clump")) else if (ReadTile.getResourceClumpAtTile((int)position.X, (int)position.Y) != null)
{ {
playSoundAt(position, "resource clump", typeof(ResourceClump)); PlaySoundAt(position, "resource clump", CATEGORY.MineItems);
} }
// Check for junimo bundle // Check for junimo bundle
else if (ReadTile.getJunimoBundleAt((int)position.X, (int)position.Y) != null && !exclusions.Contains("junimo bundle")) else if (ReadTile.getJunimoBundleAt((int)position.X, (int)position.Y) != null)
{ {
playSoundAt(position, "junimo bundle", typeof(junimoBundle)); PlaySoundAt(position, "junimo bundle", CATEGORY.Chests);
} }
} }
catch (Exception e) catch (Exception e)
@ -223,16 +276,16 @@ namespace stardew_access.Game
} }
} }
public void playSoundAt(Vector2 position, String searchQuery, Type soundType) public void PlaySoundAt(Vector2 position, String searchQuery, CATEGORY category)
{ {
// Skip if player is directly looking at the tile // Skip if player is directly looking at the tile
if (CurrentPlayer.getNextTile().Equals(position)) if (CurrentPlayer.getNextTile().Equals(position))
return; return;
if (!radarFocus && exclusions.Contains(searchQuery.ToLower().Trim())) if (!radarFocus && (exclusions.Contains(category.ToString()) || exclusions.Contains(searchQuery.ToLower().Trim())))
return; return;
if (radarFocus && !focus.Contains(searchQuery.ToLower().Trim())) if (radarFocus && (!focus.Contains(category.ToString())) && !focus.Contains(searchQuery.ToLower().Trim()))
return; return;
if (MainClass.radarDebug) if (MainClass.radarDebug)
@ -249,69 +302,55 @@ namespace stardew_access.Game
if (dy < 0 && (Math.Abs(dy) >= Math.Abs(dx))) // Object is at top if (dy < 0 && (Math.Abs(dy) >= Math.Abs(dx))) // Object is at top
{ {
Game1.currentLocation.localSoundAt(getSoundName(soundType, "top"), position); Game1.currentLocation.localSoundAt(GetSoundName(category, "top"), position);
} }
else if (dx > 0 && (Math.Abs(dx) >= Math.Abs(dy))) // Object is at right else if (dx > 0 && (Math.Abs(dx) >= Math.Abs(dy))) // Object is at right
{ {
Game1.currentLocation.localSoundAt(getSoundName(soundType, "right"), position); Game1.currentLocation.localSoundAt(GetSoundName(category, "right"), position);
} }
else if (dx < 0 && (Math.Abs(dx) > Math.Abs(dy))) // Object is at left else if (dx < 0 && (Math.Abs(dx) > Math.Abs(dy))) // Object is at left
{ {
Game1.currentLocation.localSoundAt(getSoundName(soundType, "left"), position); Game1.currentLocation.localSoundAt(GetSoundName(category, "left"), position);
} }
else if (dy > 0 && (Math.Abs(dy) > Math.Abs(dx))) // Object is at bottom else if (dy > 0 && (Math.Abs(dy) > Math.Abs(dx))) // Object is at bottom
{ {
Game1.currentLocation.localSoundAt(getSoundName(soundType, "bottom"), position); Game1.currentLocation.localSoundAt(GetSoundName(category, "bottom"), position);
} }
} }
public string getSoundName(Type soundType, string post) public static string GetSoundName(CATEGORY category, string post)
{ {
string soundName = $"_{post}"; string soundName = $"_{post}";
if(MainClass.radarStereoSound) if(MainClass.radarStereoSound)
soundName = $"_mono{soundName}"; soundName = $"_mono{soundName}";
if(soundType == typeof(Farmer)) // Villagers and farmers if(category == CATEGORY.Farmers) // Villagers and farmers
soundName = $"npc{soundName}"; soundName = $"npc{soundName}";
if (soundType == typeof(FarmAnimal)) // Farm Animals if (category == CATEGORY.FarmAnimals) // Farm Animals
soundName = $"npc{soundName}"; soundName = $"npc{soundName}";
else if(soundType == typeof(NPC)) // Other npcs, also includes enemies else if(category == CATEGORY.NPCs) // Other npcs, also includes enemies
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if(soundType == typeof(WaterTiles)) // Water tiles else if(category == CATEGORY.WaterTiles) // Water tiles
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if(soundType == typeof(Furniture)) // Furnitures else if(category == CATEGORY.Furnitures) // Furnitures
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(otherObjects)) // Other Objects else if (category == CATEGORY.Others) // Other Objects
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(Crop)) // Crops else if (category == CATEGORY.Crops) // Crops
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(GiantCrop)) // Giant Crops else if (category == CATEGORY.Trees) // Trees
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(Bush)) // Bush else if (category == CATEGORY.Buildings) // Buildings
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(CosmeticPlant)) // CosmeticPlant else if (category == CATEGORY.MineItems) // Mine items
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(Flooring)) // Flooring else if (category == CATEGORY.Chests) // Chests
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(FruitTree)) // Fruit Tree else if (category == CATEGORY.Grass) // Grass
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else if (soundType == typeof(Grass)) // Grass else if (category == CATEGORY.Flooring) // Flooring
soundName = $"obj{soundName}";
else if (soundType == typeof(Tree)) // Trees
soundName = $"obj{soundName}";
else if (soundType == typeof(Quartz)) // Quartz
soundName = $"obj{soundName}";
else if (soundType == typeof(Leaf)) // Leaf
soundName = $"obj{soundName}";
else if (soundType == typeof(door)) // Doors and Ladders
soundName = $"obj{soundName}";
else if (soundType == typeof(building)) // Buildings
soundName = $"obj{soundName}";
else if (soundType == typeof(ResourceClump)) // Resource CLumps
soundName = $"obj{soundName}";
else if (soundType == typeof(junimoBundle)) // Junimo bundles
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
else // Default else // Default
soundName = $"obj{soundName}"; soundName = $"obj{soundName}";
@ -319,25 +358,25 @@ namespace stardew_access.Game
return soundName; return soundName;
} }
public bool toggleFocus() public bool ToggleFocus()
{ {
radarFocus = !radarFocus; radarFocus = !radarFocus;
if (radarFocus) if (radarFocus)
enableFocus(); EnableFocus();
else else
disableFocus(); DisableFocus();
return radarFocus; return radarFocus;
} }
public void enableFocus() public void EnableFocus()
{ {
temp_exclusions = exclusions.ToList(); temp_exclusions = exclusions.ToList();
exclusions.Clear(); exclusions.Clear();
} }
public void disableFocus() public void DisableFocus()
{ {
exclusions = temp_exclusions.ToList(); exclusions = temp_exclusions.ToList();
temp_exclusions.Clear(); temp_exclusions.Clear();

View File

@ -95,7 +95,7 @@ namespace stardew_access
ReadTile.run(); ReadTile.run();
if(!radarFeature.isRunning && radar) if(!radarFeature.isRunning && radar)
radarFeature.run(); radarFeature.Run();
if (!isNarratingHudMessage) if (!isNarratingHudMessage)
{ {