diff --git a/source/core/coreactor.h b/source/core/coreactor.h index a57096f7cec..fa543129602 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -281,8 +281,8 @@ class TLinearSpriteIterator { while (index < MAXSPRITES) { - auto p = static_cast(actorArray[index++]); - if (p->s().statnum != MAXSTATUS) return p; + auto p = actorArray[index++]; + if (p->s().statnum != MAXSTATUS) return static_cast(p); } return nullptr; } diff --git a/source/games/blood/src/bloodactor.h b/source/games/blood/src/bloodactor.h index c1455088c9d..2ff2e53f43b 100644 --- a/source/games/blood/src/bloodactor.h +++ b/source/games/blood/src/bloodactor.h @@ -168,95 +168,11 @@ extern HitInfo gHitInfo; // Iterator wrappers that return an actor pointer, not an index. -class BloodStatIterator : public StatIterator -{ -public: - BloodStatIterator(int stat) : StatIterator(stat) - { - } - - DBloodActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &bloodActors[n] : nullptr; - } - - DBloodActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &bloodActors[n] : nullptr; - } -}; - -class BloodSectIterator : public SectIterator -{ -public: - BloodSectIterator(int stat) : SectIterator(stat) - { - } - - BloodSectIterator(sectortype* stat) : SectIterator(stat) - { - } - - DBloodActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &bloodActors[n] : nullptr; - } - - DBloodActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &bloodActors[n] : nullptr; - } -}; - -// An iterator to iterate over all sprites. -class BloodSpriteIterator -{ - BloodStatIterator it; - int stat = kStatDecoration; - -public: - BloodSpriteIterator() : it(kStatDecoration) {} - - DBloodActor* Next() - { - while (stat < kStatFree) - { - auto ac = it.Next(); - if (ac) return ac; - stat++; - if (stat < kStatFree) it.Reset(stat); - } - return nullptr; - } -}; - -// For iterating linearly over map spawned sprites. -class BloodLinearSpriteIterator -{ - int index = 0; -public: - - void Reset() - { - index = 0; - } - - DBloodActor* Next() - { - while (index < MAXSPRITES) - { - auto p = &bloodActors[index++]; - if (p->s().statnum != kStatFree) return p; - } - return nullptr; - } -}; - +using BloodStatIterator = TStatIterator; +using BloodSectIterator = TSectIterator; +using BloodSpriteIterator = TSpriteIterator; +using BloodLinearSpriteIterator = TLinearSpriteIterator; inline int DeleteSprite(DBloodActor* nSprite) { diff --git a/source/games/duke/src/dukeactor.h b/source/games/duke/src/dukeactor.h index 73c9cc4b391..b66f38639d1 100644 --- a/source/games/duke/src/dukeactor.h +++ b/source/games/duke/src/dukeactor.h @@ -5,88 +5,10 @@ BEGIN_DUKE_NS -// Iterator wrappers that return an actor pointer, not an index. -class DukeStatIterator : public StatIterator -{ -public: - DukeStatIterator(int stat) : StatIterator(stat) - { - } - - DDukeActor *Next() - { - int n = NextIndex(); - return n >= 0? &hittype[n] : nullptr; - } - - DDukeActor *Peek() - { - int n = PeekIndex(); - return n >= 0? &hittype[n] : nullptr; - } -}; - -class DukeSectIterator : public SectIterator -{ -public: - DukeSectIterator(int stat) : SectIterator(stat) - { - } - - DukeSectIterator(sectortype* stat) : SectIterator(stat) - { - } - - DDukeActor *Next() - { - int n = NextIndex(); - return n >= 0? &hittype[n] : nullptr; - } - - DDukeActor *Peek() - { - int n = PeekIndex(); - return n >= 0? &hittype[n] : nullptr; - } -}; - -// An interator to iterate over all sprites. -class DukeSpriteIterator -{ - DukeStatIterator it; - int stat = STAT_DEFAULT; - -public: - DukeSpriteIterator() : it(STAT_DEFAULT) {} - - DDukeActor* Next() - { - while (stat < MAXSTATUS) - { - auto ac = it.Next(); - if (ac) return ac; - stat++; - if (stat < MAXSTATUS) it.Reset(stat); - } - return nullptr; - } -}; - -class DukeLinearSpriteIterator -{ - int index = 0; -public: - - DDukeActor* Next() - { - while (index < MAXSPRITES) - { - auto p = &hittype[index++]; - if (p->s->statnum != MAXSTATUS) return p; - } - return nullptr; - } -}; +using DukeStatIterator = TStatIterator; +using DukeSectIterator = TSectIterator; +using DukeSpriteIterator = TSpriteIterator; +using DukeLinearSpriteIterator = TLinearSpriteIterator; inline DDukeActor* player_struct::GetActor() { diff --git a/source/games/exhumed/src/exhumedactor.h b/source/games/exhumed/src/exhumedactor.h index b7c50cda16d..b5a63646748 100644 --- a/source/games/exhumed/src/exhumedactor.h +++ b/source/games/exhumed/src/exhumedactor.h @@ -58,95 +58,10 @@ inline DExhumedActor* DExhumedActor::base() { return exhumedActors; } using HitInfo = THitInfo; using Collision = TCollision; -// Iterator wrappers that return an actor pointer, not an index. -class ExhumedStatIterator : public StatIterator -{ -public: - ExhumedStatIterator(int stat) : StatIterator(stat) - { - } - - DExhumedActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &exhumedActors[n] : nullptr; - } - - DExhumedActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &exhumedActors[n] : nullptr; - } -}; - -class ExhumedSectIterator : public SectIterator -{ -public: - ExhumedSectIterator(int stat) : SectIterator(stat) - { - } - - ExhumedSectIterator(sectortype* stat) : SectIterator(stat) - { - } - - DExhumedActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &exhumedActors[n] : nullptr; - } - - DExhumedActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &exhumedActors[n] : nullptr; - } -}; - -// An iterator to iterate over all sprites. -class ExhumedSpriteIterator -{ - ExhumedStatIterator it; - int stat = 0; - -public: - ExhumedSpriteIterator() : it(0) {} - - DExhumedActor* Next() - { - while (stat < MAXSTATUS) - { - auto ac = it.Next(); - if (ac) return ac; - stat++; - if (stat < MAXSTATUS) it.Reset(stat); - } - return nullptr; - } -}; - -// For iterating linearly over map spawned sprites. -class ExhumedLinearSpriteIterator -{ - int index = 0; -public: - - void Reset() - { - index = 0; - } - - DExhumedActor* Next() - { - while (index < MAXSPRITES) - { - auto p = &exhumedActors[index++]; - if (p->s().statnum != MAXSTATUS) return p; - } - return nullptr; - } -}; - +using ExhumedStatIterator = TStatIterator; +using ExhumedSectIterator = TSectIterator; +using ExhumedSpriteIterator = TSpriteIterator; +using ExhumedLinearSpriteIterator = TLinearSpriteIterator; inline FSerializer& Serialize(FSerializer& arc, const char* keyname, DExhumedActor*& w, DExhumedActor** def) diff --git a/source/games/sw/src/swactor.h b/source/games/sw/src/swactor.h index c7b9dffb22d..8fbb65292b1 100644 --- a/source/games/sw/src/swactor.h +++ b/source/games/sw/src/swactor.h @@ -49,93 +49,10 @@ inline DSWActor* DSWActor::base() { return swActors; } // subclassed to add a game specific actor() method // Iterator wrappers that return an actor pointer, not an index. -class SWStatIterator : public StatIterator -{ -public: - SWStatIterator(int stat) : StatIterator(stat) - { - } - - DSWActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &swActors[n] : nullptr; - } - - DSWActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &swActors[n] : nullptr; - } -}; - -class SWSectIterator : public SectIterator -{ -public: - SWSectIterator(int stat) : SectIterator(stat) - { - } - - SWSectIterator(sectortype* stat) : SectIterator(stat) - { - } - - DSWActor* Next() - { - int n = NextIndex(); - return n >= 0 ? &swActors[n] : nullptr; - } - - DSWActor* Peek() - { - int n = PeekIndex(); - return n >= 0 ? &swActors[n] : nullptr; - } -}; - -// An iterator to iterate over all sprites. -class SWSpriteIterator -{ - SWStatIterator it; - int stat = 0; - -public: - SWSpriteIterator() : it(0) {} - - DSWActor* Next() - { - while (stat < MAXSTATUS) - { - auto ac = it.Next(); - if (ac) return ac; - stat++; - if (stat < MAXSTATUS) it.Reset(stat); - } - return nullptr; - } -}; - -// For iterating linearly over map spawned sprites. -class SWLinearSpriteIterator -{ - int index = 0; -public: - - void Reset() - { - index = 0; - } - - DSWActor* Next() - { - while (index < MAXSPRITES) - { - auto p = &swActors[index++]; - if (p->s().statnum != MAXSTATUS) return p; - } - return nullptr; - } -}; +using SWStatIterator = TStatIterator; +using SWSectIterator = TSectIterator; +using SWSpriteIterator = TSpriteIterator; +using SWLinearSpriteIterator = TLinearSpriteIterator; inline FSerializer& Serialize(FSerializer& arc, const char* keyname, DSWActor*& w, DSWActor** def)