diff options
Diffstat (limited to 'src/engine/objects')
| -rw-r--r-- | src/engine/objects/MoleGroup.cpp | 11 | ||||
| -rw-r--r-- | src/engine/objects/MoleGroup.h | 8 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/engine/objects/MoleGroup.cpp b/src/engine/objects/MoleGroup.cpp index af936ed3f..d1b8cb27d 100644 --- a/src/engine/objects/MoleGroup.cpp +++ b/src/engine/objects/MoleGroup.cpp @@ -10,8 +10,9 @@ extern "C" { size_t OMoleGroup::_count = 0; -OMoleGroup::OMoleGroup(std::vector<FVector>& spawns) { +OMoleGroup::OMoleGroup(std::vector<FVector>& spawns, size_t tickRate) { _idx = _count; + _tickRate = tickRate; for (auto& pos : spawns) { pos.x * xOrientation; OMole* ptr = reinterpret_cast<OMole*>(gWorldInstance.AddObject(new OMole(pos, this))); @@ -22,11 +23,11 @@ OMoleGroup::OMoleGroup(std::vector<FVector>& spawns) { } void OMoleGroup::Tick() { - for (auto &mole : _moles) { - if (gObjectList[mole.Mole->_objectIndex].state == 0) { - func_80081FF4(mole.Mole->_objectIndex); + for (size_t i = 0; i < std::min(_tickRate, _moles.size()); i++) { + if (gObjectList[_moles[i].Mole->_objectIndex].state == 0) { + OMoleGroup::func_80081FF4(_moles[i].Mole->_objectIndex); } else { - mole.Mole->func_800821AC(mole.Mole->_objectIndex, 1); + _moles[i].Mole->func_800821AC(_moles[i].Mole->_objectIndex, 1); } } diff --git a/src/engine/objects/MoleGroup.h b/src/engine/objects/MoleGroup.h index db14432cd..31d9c2819 100644 --- a/src/engine/objects/MoleGroup.h +++ b/src/engine/objects/MoleGroup.h @@ -16,7 +16,12 @@ public: bool Active; }; - explicit OMoleGroup(std::vector<FVector>& moles); + /** + * TickRate: + * How many moles can pop out per frame. + * The mole must also be ready to jump to be considered. + */ + explicit OMoleGroup(std::vector<FVector>& moles, size_t tickRate); virtual void Tick() override; @@ -24,6 +29,7 @@ public: std::vector<MoleEntry> _moles; + size_t _tickRate; private: static size_t _count; size_t _idx; |
