Fix more hole cutting bugs

This commit is contained in:
James Lambert 2022-07-03 20:19:49 -06:00
parent e3e4b23654
commit 2b22d12a0e
2 changed files with 13 additions and 1 deletions

View file

@ -154,6 +154,8 @@ int portalSurfaceAdjustPosition(struct PortalSurface* surface, struct Transform*
int shouldReverse = vector3Dot(&portalNormal, &surfaceNormal) > 0.0f;
struct Vector2s16 startingPoint = *output;
minPortal = *output;
maxPortal = *output;
@ -260,6 +262,16 @@ int portalSurfaceAdjustPosition(struct PortalSurface* surface, struct Transform*
output->y += minOverlapOffset.y;
}
// if the output position moved then adjust the loop
if (startingPoint.equalTest != output->equalTest) {
struct Vector2s16 offset;
vector2s16Sub(output, &startingPoint, &offset);
for (int i = 0; i < PORTAL_LOOP_SIZE; ++i) {
vector2s16Add(&outlineLoopOutput[i], &offset, &outlineLoopOutput[i]);
}
}
// running out of iterations is a sign there isn't enough
// room for the portal
return iteration != MAX_POS_ADJUST_ITERATIONS;

View file

@ -318,7 +318,7 @@ int portalSurfaceNewEdge(struct PortalSurfaceBuilder* surfaceBuilder, int isLoop
int newEdgeIndex = surfaceBuilder->currentEdge;
surfaceBuilder->isLoopEdge[surfaceBuilder->currentEdge] = isLoopEdge;
surfaceBuilder->originalEdgeIndex = originalEdge;
surfaceBuilder->originalEdgeIndex[newEdgeIndex] = *originalEdge;
++surfaceBuilder->currentEdge;
return newEdgeIndex;
}