From 265abf7fa67756b59580eb77689bf020ff25d064 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 21 Nov 2021 08:42:36 +0100 Subject: [PATCH] =?UTF-8?q?=E2=80=94=20Duke:=20Use=20BFSSectorSearch=20to?= =?UTF-8?q?=20handle=20the=20hitradius=20searches=20without=20using=20indi?= =?UTF-8?q?ces.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (and a bit nicer looking loop condition.) --- source/games/duke/src/actors_d.cpp | 10 ++++------ source/games/duke/src/actors_r.cpp | 12 +++++------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index a48cac6c9..1fecd9d41 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -345,11 +345,10 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h if(spri->picnum != SHRINKSPARK && !(spri->picnum == RPG && spri->xrepeat < 11)) { - BFSSearch search(numsectors, spri->sectnum); + BFSSectorSearch search(spri->sector()); - for(unsigned dasect; (dasect = search.GetNext()) != BFSSearch::EOL;) + while (auto dasectp = search.GetNext()) { - auto dasectp = §or[dasect]; if (((dasectp->ceilingz - spri->z) >> 8) < r) { auto wal = dasectp->firstWall(); @@ -369,10 +368,9 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h { if ((abs(wal.x - spri->x) + abs(wal.y - spri->y)) < r) { - int nextsect = wal.nextsector; - if (nextsect >= 0) + if (wal.twoSided()) { - search.Add(nextsect); + search.Add(wal.nextSector()); } int x1 = (((wal.x + wal.point2Wall()->x) >> 1) + spri->x) >> 1; int y1 = (((wal.y + wal.point2Wall()->y) >> 1) + spri->y) >> 1; diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 3795a047c..1a7478625 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -223,11 +223,10 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h if (spri->xrepeat >= 11 || !(spri->picnum == RPG || ((isRRRA()) && spri->picnum == RPG2))) { - BFSSearch search(numsectors, spri->sectnum); - - for (unsigned dasect; (dasect = search.GetNext()) != BFSSearch::EOL;) + BFSSectorSearch search(spri->sector()); + + while (auto dasectp = search.GetNext()) { - auto dasectp = §or[dasect]; if (((dasectp->ceilingz - spri->z) >> 8) < r) { auto wal = dasectp->firstWall(); @@ -247,10 +246,9 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h { if ((abs(wal.x - spri->x) + abs(wal.y - spri->y)) < r) { - int nextsect = wal.nextsector; - if (nextsect >= 0) + if (wal.twoSided()) { - search.Add(nextsect); + search.Add(wal.nextSector()); } int x1 = (((wal.x + wal.point2Wall()->x) >> 1) + spri->x) >> 1; int y1 = (((wal.y + wal.point2Wall()->y) >> 1) + spri->y) >> 1;