mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-30 12:35:12 +00:00
44 lines
1.5 KiB
C++
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
|