mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-29 20:14:41 +00:00
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#include "Library/Area/AreaObjGroup.h"
|
|
|
|
#include "Library/Area/AreaObj.h"
|
|
|
|
namespace al {
|
|
AreaObjGroup::AreaObjGroup(const char* groupName, const s32 capacity)
|
|
: mGroupName(groupName), mCapacity(capacity) {}
|
|
|
|
void AreaObjGroup::createBuffer() {
|
|
if (mCapacity < 1)
|
|
return;
|
|
mBuffer = new AreaObj*[mCapacity];
|
|
}
|
|
|
|
void AreaObjGroup::createBuffer(s32 capacity) {
|
|
mCapacity = capacity;
|
|
createBuffer();
|
|
}
|
|
|
|
AreaObj* AreaObjGroup::getAreaObj(const s32 index) const {
|
|
return mBuffer[index];
|
|
}
|
|
|
|
AreaObj* AreaObjGroup::getInVolumeAreaObj(const sead::Vector3f& position) const {
|
|
AreaObj* bestInVolumeAreaObj = nullptr;
|
|
for (s32 i = 0; i < mCount; i++) {
|
|
AreaObj* currentAreaObj = mBuffer[i];
|
|
if (!bestInVolumeAreaObj ||
|
|
bestInVolumeAreaObj->getPriority() <= currentAreaObj->getPriority()) {
|
|
if (currentAreaObj->isInVolume(position))
|
|
bestInVolumeAreaObj = currentAreaObj;
|
|
}
|
|
}
|
|
return bestInVolumeAreaObj;
|
|
}
|
|
|
|
void AreaObjGroup::incrementCount() {
|
|
// BUG: dev mistake?
|
|
mCapacity += 1;
|
|
}
|
|
|
|
void AreaObjGroup::registerAreaObj(AreaObj* newAreaObj) {
|
|
if (mCount >= mCapacity)
|
|
return;
|
|
mBuffer[mCount] = newAreaObj;
|
|
mCount += 1;
|
|
}
|
|
|
|
} // namespace al
|