From 0b3c98557c2cf0996a7dc49c31f6e5c3c265af1d Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Fri, 17 Sep 2021 17:35:33 +0100 Subject: [PATCH] Surface iteration optimisation Skips over surfaces that will literally never intentionally come into play. --- src/engine/surface_collision.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/engine/surface_collision.c b/src/engine/surface_collision.c index 93654597..4af08bee 100644 --- a/src/engine/surface_collision.c +++ b/src/engine/surface_collision.c @@ -39,6 +39,8 @@ static s32 find_wall_collisions_from_list(struct SurfaceNode *surfaceNode, while (surfaceNode != NULL) { surf = surfaceNode->surface; surfaceNode = surfaceNode->next; + if (y > surf->upperY) + continue; // Exclude a large number of walls immediately to optimize. if (y < surf->lowerY || y > surf->upperY) { @@ -407,6 +409,8 @@ static struct Surface *find_floor_from_list(struct SurfaceNode *surfaceNode, s32 while (surfaceNode != NULL) { surf = surfaceNode->surface; surfaceNode = surfaceNode->next; + if (y < surf->lowerY - 30) + continue; x1 = surf->vertex1[0]; z1 = surf->vertex1[2]; x2 = surf->vertex2[0];