mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-29 20:14:41 +00:00
103 lines
3.3 KiB
C++
103 lines
3.3 KiB
C++
#include "Library/Execute/ExecuteRequestKeeper.h"
|
|
|
|
#include "Library/Execute/ActorExecuteInfo.h"
|
|
#include "Library/Execute/ExecutorActorExecuteBase.h"
|
|
#include "Library/LiveActor/LiveActor.h"
|
|
#include "Library/Model/ModelDrawerBase.h"
|
|
#include "Library/Model/ModelKeeper.h"
|
|
|
|
namespace al {
|
|
|
|
ExecuteRequestInfo::ExecuteRequestInfo() = default;
|
|
|
|
ExecuteRequestTable::ExecuteRequestTable(s32 maxSize) : mMaxSize{maxSize} {
|
|
LiveActor** actors = new LiveActor*[mMaxSize];
|
|
|
|
for (s64 i = 0; i != mMaxSize; i++)
|
|
actors[i] = nullptr;
|
|
|
|
mRequests = actors;
|
|
}
|
|
|
|
ExecuteRequestKeeper::ExecuteRequestKeeper(s32 maxSize) {
|
|
for (s32 i = 0; i < 4; i++)
|
|
mRequestTables[i] = new ExecuteRequestTable(maxSize);
|
|
}
|
|
|
|
void ExecuteRequestKeeper::executeRequestActorMovementAllOn() {
|
|
ExecuteRequestTable* movementOn = mRequestTables[Request_Movement];
|
|
|
|
for (s32 i = 0; i < movementOn->getSize(); i++) {
|
|
LiveActor* actor = movementOn->getRequest(i);
|
|
ActorExecuteInfo* info = actor->getExecuteInfo();
|
|
for (s32 j = 0; j < info->getUpdaterCount(); j++)
|
|
info->getUpdater(j)->addActor(actor);
|
|
}
|
|
|
|
movementOn->clear();
|
|
}
|
|
|
|
void ExecuteRequestKeeper::executeRequestActorMovementAllOff() {
|
|
ExecuteRequestTable* movementOff = mRequestTables[Request_RemoveFromMovement];
|
|
|
|
for (s32 i = 0; i < movementOff->getSize(); i++) {
|
|
LiveActor* actor = movementOff->getRequest(i);
|
|
ActorExecuteInfo* info = actor->getExecuteInfo();
|
|
for (s32 j = 0; j < info->getUpdaterCount(); j++)
|
|
info->getUpdater(j)->removeActor(actor);
|
|
}
|
|
|
|
movementOff->clear();
|
|
}
|
|
|
|
void ExecuteRequestKeeper::executeRequestActorDrawAllOn() {
|
|
ExecuteRequestTable* drawOn = mRequestTables[Request_Draw];
|
|
|
|
for (s32 i = 0; i < drawOn->getSize(); i++) {
|
|
LiveActor* actor = drawOn->getRequest(i);
|
|
ActorExecuteInfo* info = actor->getExecuteInfo();
|
|
for (s32 j = 0; j < info->getDrawerCount(); j++)
|
|
info->getDrawer(j)->addModel(actor->getModelKeeper()->getModelCtrl());
|
|
}
|
|
|
|
drawOn->clear();
|
|
}
|
|
|
|
void ExecuteRequestKeeper::executeRequestActorDrawAllOff() {
|
|
ExecuteRequestTable* drawOff = mRequestTables[Request_RemoveFromDraw];
|
|
|
|
for (s32 i = 0; i < drawOff->getSize(); i++) {
|
|
LiveActor* actor = drawOff->getRequest(i);
|
|
ActorExecuteInfo* info = actor->getExecuteInfo();
|
|
for (s32 j = 0; j < info->getDrawerCount(); j++)
|
|
info->getDrawer(j)->removeModel(actor->getModelKeeper()->getModelCtrl());
|
|
}
|
|
|
|
drawOff->clear();
|
|
}
|
|
|
|
void ExecuteRequestKeeper::request(LiveActor* actor, s32 requestType) {
|
|
ExecuteRequestTable* addRequestTable = mRequestTables[requestType];
|
|
ExecuteRequestTable* removeRequestTable = nullptr;
|
|
|
|
switch (requestType) {
|
|
case Request_Movement:
|
|
removeRequestTable = mRequestTables[Request_RemoveFromMovement];
|
|
break;
|
|
case Request_RemoveFromMovement:
|
|
removeRequestTable = mRequestTables[Request_Movement];
|
|
break;
|
|
case Request_Draw:
|
|
removeRequestTable = mRequestTables[Request_RemoveFromDraw];
|
|
break;
|
|
case Request_RemoveFromDraw:
|
|
removeRequestTable = mRequestTables[Request_Draw];
|
|
break;
|
|
}
|
|
|
|
removeRequestTable->removeRequest(actor);
|
|
addRequestTable->addRequest(actor);
|
|
}
|
|
|
|
} // namespace al
|