diff --git a/stardew-access/Features/Radar.cs b/stardew-access/Features/Radar.cs
index 5434f97..b7bd95b 100644
--- a/stardew-access/Features/Radar.cs
+++ b/stardew-access/Features/Radar.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Diagnostics;
using Microsoft.Xna.Framework;
using StardewValley;
using StardewValley.Objects;
@@ -129,6 +130,7 @@ namespace stardew_access.Features
}
}
+ searched.Clear();
return detectedTiles;
}
@@ -138,6 +140,7 @@ namespace stardew_access.Features
/// A dictionary with all the detected tiles along with the name of the object on it and it's category.
public Dictionary SearchLocation()
{
+ var watch = System.Diagnostics.Stopwatch.StartNew();
Dictionary detectedTiles = new Dictionary();
Vector2 position = Vector2.Zero;
(bool, string? name, string category) tileInfo;
@@ -151,6 +154,11 @@ namespace stardew_access.Features
toSearch.Enqueue(Game1.player.getTileLocation());
searched.Add(Game1.player.getTileLocation());
+ watch.Stop();
+ var elapsedMs = watch.ElapsedMilliseconds;
+ MainClass.DebugLog($"Search init duration: {elapsedMs}");
+ elapsedMs = 0;
+ watch = System.Diagnostics.Stopwatch.StartNew();
while (toSearch.Count > 0)
{
Vector2 item = toSearch.Dequeue();
@@ -174,7 +182,10 @@ namespace stardew_access.Features
}
}
}
-
+ watch.Stop();
+ elapsedMs = watch.ElapsedMilliseconds;
+ MainClass.DebugLog($"Search loop duration: {elapsedMs}; {count} iterations.");
+ searched.Clear();
return detectedTiles;
}
@@ -209,7 +220,7 @@ namespace stardew_access.Features
tileDetail.category = CATEGORY.Others;
return (true, tileDetail.name, tileDetail.category.ToString());
-
+
}
public void CheckTileAndPlaySound(Vector2 position)
diff --git a/stardew-access/Features/TileInfo.cs b/stardew-access/Features/TileInfo.cs
index 74adb00..212836c 100644
--- a/stardew-access/Features/TileInfo.cs
+++ b/stardew-access/Features/TileInfo.cs
@@ -34,7 +34,7 @@ namespace stardew_access.Features
{
int x = (int)tile.X;
int y = (int)tile.Y;
- string? toReturn = "";
+ string? toReturn = null;
CATEGORY? category = CATEGORY.Others;
bool isColliding = isCollidingAtTile(x, y);
@@ -57,7 +57,7 @@ namespace stardew_access.Features
else
category = CATEGORY.NPCs;
}
- else if (farmAnimal != null)
+ else if (farmAnimal is not null)
{
toReturn = farmAnimal;
category = CATEGORY.FarmAnimals;
@@ -161,10 +161,12 @@ namespace stardew_access.Features
try
{
NetCollection droppedItems = Game1.currentLocation.debris;
- if (droppedItems.Count() > 0)
+ int droppedItemsCount = droppedItems.Count();
+ if (droppedItemsCount > 0)
{
- foreach (var item in droppedItems)
+ for (int i = 0; i < droppedItemsCount; i++)
{
+ var item = droppedItems[i];
int xPos = ((int)item.Chunks[0].position.Value.X / Game1.tileSize) + 1;
int yPos = ((int)item.Chunks[0].position.Value.Y / Game1.tileSize) + 1;
if (xPos != x || yPos != y) continue;
@@ -174,10 +176,11 @@ namespace stardew_access.Features
string name = item.item.DisplayName;
int count = item.item.Stack;
- if (toReturn == "")
+ if (toReturn is null)
return ($"Dropped Item: {count} {name}", CATEGORY.DroppedItems);
else
toReturn = $"{toReturn}, Dropped Item: {count} {name}";
+ item = null;
}
}
}
@@ -188,9 +191,6 @@ namespace stardew_access.Features
}
#endregion
- if (toReturn == "")
- return (null, category);
-
return (toReturn, category);
}
@@ -198,7 +198,7 @@ namespace stardew_access.Features
{
string? toReturn = null;
Bush? bush = (Bush)Game1.currentLocation.getLargeTerrainFeatureAt(x, y);
- if (bush == null)
+ if (bush is null)
return null;
if (lessInfo && (bush.tilePosition.Value.X != x || bush.tilePosition.Value.Y != y))
return null;
@@ -264,7 +264,7 @@ namespace stardew_access.Features
(46, 12) => "Bulletin Board",
_ => null,
};
- if (name != null && communityCenter.shouldNoteAppearInArea(CommunityCenter.getAreaNumberFromName(name)))
+ if (name is not null && communityCenter.shouldNoteAppearInArea(CommunityCenter.getAreaNumberFromName(name)))
return $"{name} bundle";
}
else if (Game1.currentLocation is AbandonedJojaMart)
@@ -275,7 +275,7 @@ namespace stardew_access.Features
_ => null,
};
- if (name != null)
+ if (name is not null)
return $"{name} bundle";
}
@@ -286,6 +286,7 @@ namespace stardew_access.Features
{
Rectangle rect = new Rectangle(x * 64 + 1, y * 64 + 1, 62, 62);
+ /* Reference
// Check whether the position is a warp point, if so then return false, sometimes warp points are 1 tile off the map for example in coops and barns
if (isWarpPointAtTile(x, y)) return false;
@@ -294,19 +295,32 @@ namespace stardew_access.Features
return true;
}
- if (Game1.currentLocation is Woods && getStumpsInWoods(x, y) != null)
+ if (Game1.currentLocation is Woods && getStumpsInWoods(x, y) is not null)
return true;
return false;
+ */
+
+ // Optimized
+ // Sometimes warp points are 1 tile off the map for example in coops and barns; check that this is not a warp point
+ if (!isWarpPointAtTile(x, y))
+ {
+ // not a warp point
+ //directly return the value of the logical comparison rather than wasting time in conditional
+ return ((Game1.currentLocation.isCollidingPosition(rect, Game1.viewport, true, 0, glider: false, Game1.player, pathfinding: true)) || (Game1.currentLocation is Woods && getStumpsInWoods(x, y) is not null));
+ }
+ // was a warp point; return false
+ return false;
}
public static Boolean isWarpPointAtTile(int x, int y)
{
- if (Game1.currentLocation == null) return false;
+ if (Game1.currentLocation is null) return false;
- foreach (Warp warpPoint in Game1.currentLocation.warps)
+ int warpsCount = Game1.currentLocation.warps.Count();
+ for (int i = 0; i < warpsCount; i++)
{
- if (warpPoint.X == x && warpPoint.Y == y) return true;
+ if (Game1.currentLocation.warps[i].X == x && Game1.currentLocation.warps[i].Y == y) return true;
}
return false;
@@ -314,11 +328,11 @@ namespace stardew_access.Features
public static string? getFarmAnimalAt(GameLocation? location, int x, int y)
{
- if (location == null)
+ if (location is null || (location is not Farm && location is not AnimalHouse))
return null;
- if (location is not Farm && location is not AnimalHouse)
- return null;
+ //if (location is not Farm && location is not AnimalHouse)
+ //return null;
List? farmAnimals = null;
@@ -368,7 +382,7 @@ namespace stardew_access.Features
else
{
Building building = farm.getBuildingAt(new Vector2(x, y));
- if (building != null)
+ if (building is not null)
{
string name = building.buildingType.Value;
@@ -397,7 +411,7 @@ namespace stardew_access.Features
}
}
}
- else if (Game1.currentLocation.currentEvent != null)
+ else if (Game1.currentLocation.currentEvent is not null)
{
string event_name = Game1.currentLocation.currentEvent.FestivalName;
if (event_name == "Egg Festival" && x == 21 && y == 55)
@@ -1198,8 +1212,10 @@ namespace stardew_access.Features
{
if (Game1.currentLocation == null) return null;
- foreach (Warp warpPoint in Game1.currentLocation.warps)
+ int warpCount = Game1.currentLocation.warps.Count();
+ for (int i = 0; i < warpCount; i++)
{
+ Warp warpPoint = Game1.currentLocation.warps[i];
if (warpPoint.X != x || warpPoint.Y != y) continue;
return $"{warpPoint.TargetName} Entrance";
@@ -1303,8 +1319,10 @@ namespace stardew_access.Features
if (Game1.currentLocation is not IslandLocation islandLocation)
return null;
- foreach (var perch in islandLocation.parrotUpgradePerches)
+ int perchCount = islandLocation.parrotUpgradePerches.Count();
+ for (int i = 0; i < perchCount; i++)
{
+ var perch = islandLocation.parrotUpgradePerches[i];
if (!perch.tilePosition.Value.Equals(new Point(x, y)))
continue;