refactor: add RcDirtyEntry

This commit is contained in:
ikpil 2024-01-19 00:06:04 +09:00 committed by Ikpil
parent d7244bd0ff
commit 66a3d73b8f
2 changed files with 13 additions and 14 deletions

View File

@ -1,5 +1,6 @@
namespace DotRecast.Recast
{
// Struct to keep track of entries in the region table that have been changed.
public readonly struct RcDirtyEntry
{
public readonly int index;

View File

@ -429,7 +429,7 @@ namespace DotRecast.Recast
}
}
List<int> dirtyEntries = new List<int>();
List<RcDirtyEntry> dirtyEntries = new List<RcDirtyEntry>();
int iter = 0;
while (stack.Count > 0)
{
@ -479,9 +479,7 @@ namespace DotRecast.Recast
if (r != 0)
{
stack[j] = new RcLevelStackEntry(stack[j].x, stack[j].y, -1); // mark as used
dirtyEntries.Add(i);
dirtyEntries.Add(r);
dirtyEntries.Add(d2);
dirtyEntries.Add(new RcDirtyEntry(i, r, d2));
}
else
{
@ -490,11 +488,11 @@ namespace DotRecast.Recast
}
// Copy entries that differ between src and dst to keep them in sync.
for (int i = 0; i < dirtyEntries.Count; i += 3)
for (int i = 0; i < dirtyEntries.Count; i++)
{
int idx = dirtyEntries[i];
srcReg[idx] = dirtyEntries[i + 1];
srcDist[idx] = dirtyEntries[i + 2];
int idx = dirtyEntries[i].index;
srcReg[idx] = dirtyEntries[i].region;
srcDist[idx] = dirtyEntries[i].distance2;
}
if (failed == stack.Count())