OdysseyDecomp/lib/al/Library/Clipping/ClippingRequestKeeper.cpp

44 lines
1.5 KiB
C++

#include "Library/Clipping/ClippingRequestKeeper.h"
#include "Library/LiveActor/ActorClippingFunction.h"
#include "Library/LiveActor/ActorFlagFunction.h"
#include "Library/LiveActor/LiveActor.h"
namespace al {
ClippingRequestInfo::ClippingRequestInfo() = default;
ClippingRequestTable::ClippingRequestTable(s32 capacity) : capacity(capacity) {
entries = new ClippingRequestInfo[capacity];
}
ClippingRequestKeeper::ClippingRequestKeeper(s32 capacity) {
mRequestTable = new ClippingRequestTable(capacity);
}
void ClippingRequestKeeper::request(LiveActor* actor, ClippingRequestType clippingRequestType) {
mRequestTable->numEntries++;
mRequestTable->entries[mRequestTable->numEntries - 1] = {actor, clippingRequestType};
}
void ClippingRequestKeeper::executeRequest() {
for (s32 i = 0; i < mRequestTable->numEntries; i++) {
const ClippingRequestInfo& clippingRequestInfo = mRequestTable->entries[i];
if (isDead(clippingRequestInfo.liveActor))
continue;
switch (clippingRequestInfo.requestType) {
case ClippingRequestType::IsClipped:
if (!isClipped(clippingRequestInfo.liveActor))
clippingRequestInfo.liveActor->startClipped();
break;
case ClippingRequestType::IsNotClipped:
if (isClipped(clippingRequestInfo.liveActor))
clippingRequestInfo.liveActor->endClipped();
break;
}
}
mRequestTable->numEntries = 0;
}
} // namespace al