Skip to content

Commit 24572d4

Browse files
committed
support auto reload for t2d
1 parent aa6e42c commit 24572d4

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

handlers/SpriteFileWatcher.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ private void OnSpriteChanged(object sender, FileSystemEventArgs e)
4040
{
4141
string relativePath = Path.GetRelativePath(SpriteLoader.LoadPath, e.FullPath);
4242
string[] pathParts = relativePath.Split(Path.DirectorySeparatorChar);
43+
44+
if (pathParts[^2] == "T2D" || (pathParts.Length >= 3 && pathParts[^3] == "T2D"))
45+
{
46+
T2DHandler.InvalidateCache(Path.GetFileNameWithoutExtension(pathParts[^1]));
47+
if (Plugin.Config.ReloadSceneOnChange)
48+
GameManager.instance.LoadScene(SceneManager.GetActiveScene().name);
49+
return;
50+
}
51+
4352
if (pathParts.Length < 3)
4453
return;
4554

handlers/T2DHandler.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public static class T2DHandler
1313
public static string T2DDumpPath { get { return Path.Combine(SpriteDumper.DumpPath, "T2D"); } }
1414

1515
private static readonly Dictionary<string, Sprite> LoadedT2DSprites = new();
16+
private static readonly Dictionary<string, HashSet<string>> SpriteAtlasMap = new();
1617

1718
[HarmonyPostfix]
1819
[HarmonyPatch(typeof(SpriteRenderer), nameof(SpriteRenderer.sprite), MethodType.Setter)]
@@ -28,6 +29,21 @@ public static void SetSpritePostfix(SpriteRenderer __instance, Sprite value)
2829
HandleLoad(__instance, value);
2930
}
3031

32+
public static void InvalidateCache(string spriteName)
33+
{
34+
if (LoadedT2DSprites.Remove(spriteName))
35+
Plugin.Logger.LogDebug($"Invalidated T2D sprite cache for {spriteName}");
36+
if (SpriteAtlasMap.ContainsKey(spriteName))
37+
{
38+
foreach (var sprName in SpriteAtlasMap[spriteName])
39+
{
40+
if (LoadedT2DSprites.Remove(sprName))
41+
Plugin.Logger.LogDebug($"Invalidated T2D sprite cache for {sprName} due to atlas change {spriteName}");
42+
}
43+
SpriteAtlasMap.Remove(spriteName);
44+
}
45+
}
46+
3147
private static void HandleLoad(SpriteRenderer spriteRenderer, Sprite sprite)
3248
{
3349
if (LoadedT2DSprites.ContainsKey(sprite.name))
@@ -47,6 +63,10 @@ private static void HandleLoad(SpriteRenderer spriteRenderer, Sprite sprite)
4763
spriteRenderer.sprite = newSprite;
4864
if (Plugin.Config.LogSpriteLoading)
4965
Plugin.Logger.LogInfo($"Loaded T2D sprite {sprite.name} (Atlas texture {sprite.texture.name})");
66+
67+
if(!SpriteAtlasMap.ContainsKey(sprite.texture.name))
68+
SpriteAtlasMap[sprite.texture.name] = new HashSet<string>();
69+
SpriteAtlasMap[sprite.texture.name].Add(sprite.name);
5070
}
5171
else
5272
{

0 commit comments

Comments
 (0)