summaryrefslogtreecommitdiff
path: root/src/engine/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/objects')
-rw-r--r--src/engine/objects/MoleGroup.cpp11
-rw-r--r--src/engine/objects/MoleGroup.h8
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;