OdysseyDecomp/lib/al/Project/Execute/ExecuteFunction.cpp
2025-10-25 00:13:57 +02:00

118 lines
4.8 KiB
C++

#include "Project/Execute/ExecuteFunction.h"
#include "Library/Base/StringUtil.h"
#include "Library/Execute/ExecuteDirector.h"
#include "Library/Execute/ExecuteOrder.h"
namespace alExecuteFunction {
void executeDraw(const al::ExecuteDirector* executeDirector, const char* tableName) {
executeDirector->draw(tableName);
}
void executeDrawList(const al::ExecuteDirector* executeDirector, const char* tableName,
const char* listName) {
executeDirector->drawList(tableName, listName);
}
} // namespace alExecuteFunction
namespace alExecutorFunction {
bool isListName(const al::ExecuteOrder& executeOrder, const char* listName) {
// TODO: potentially wrong name of member?
return al::isEqualString(executeOrder.executeGroup, listName);
}
bool isUpdateListActor(const al::ExecuteOrder& executeOrder) {
return isListName(executeOrder, "ActorMovement") || isListName(executeOrder, "ActorCalcAnim") ||
isListName(executeOrder, "ActorCalcView") ||
isListName(executeOrder, "ActorMovementCalcAnim");
}
bool isDrawListActor(const al::ExecuteOrder& executeOrder) {
return isListName(executeOrder, "ActorDraw");
}
bool isDrawListActorModel(const al::ExecuteOrder& executeOrder) {
return isListName(executeOrder, "ActorModelDraw") ||
isListName(executeOrder, "ActorModelDrawForwardOnly") ||
isListName(executeOrder, "ActorModelDrawForwardForce") ||
isListName(executeOrder, "ActorModelDrawDepthChromakey") ||
isListName(executeOrder, "ActorModelDrawDitherChromakey") ||
isListName(executeOrder, "ActorModelDrawDepthOnly") ||
isListName(executeOrder, "ActorModelDrawCulling") ||
isListName(executeOrder, "ActorModelDrawDepthForce") ||
isListName(executeOrder, "ActorModelDrawDepthXlu") ||
isListName(executeOrder, "ActorModelDrawDepthIndirect") ||
isListName(executeOrder, "ActorModelDrawDepthDither") ||
isListName(executeOrder, "ActorModelDrawDepthDitherIndirect") ||
isListName(executeOrder, "ActorModelDrawDepthShadow") ||
isListName(executeOrder, "ActorModelDrawDepthShadowMarchingCube") ||
isListName(executeOrder, "ActorModelDrawStaticDepthShadow") ||
isListName(executeOrder, "ActorModelDrawDeferred") ||
isListName(executeOrder, "ActorModelDrawDeferredOnly") ||
isListName(executeOrder, "ActorModelDrawDeferredOpa") ||
isListName(executeOrder, "ActorModelDrawDeferredXlu") ||
isListName(executeOrder, "ActorModelDrawDeferredMarchingCube") ||
isListName(executeOrder, "ActorModelDrawDeferredFootPrint") ||
isListName(executeOrder, "ActorModelDrawDeferredSilhouette") ||
isListName(executeOrder, "ActorModelDrawDeferredSky") ||
isListName(executeOrder, "ActorModelDrawPostEffectMask") ||
isListName(executeOrder, "ActorModelDrawWorldAo") ||
isListName(executeOrder, "ActorModelDrawIndirect") ||
isListName(executeOrder, "ActorModelDrawIndirectOnly") ||
isListName(executeOrder, "ActorModelDrawUpdate") ||
isListName(executeOrder, "ActorModelDrawPlayerChromakey") ||
isListName(executeOrder, "ActorModelDrawPlayerChromakeyOpa") ||
isListName(executeOrder, "ActorModelDrawPlayerChromakeyXlu") ||
isListName(executeOrder, "ActorModelDrawCharacterChromakey");
}
bool isDrawListLayout(const al::ExecuteOrder& executeOrder) {
return isListName(executeOrder, "LayoutDraw") || isListName(executeOrder, "LayoutDrawBottom");
}
s32 calcExecutorListNumMax(const al::ExecuteOrder* executeOrder, s32 executeOrderSize,
const char* listName) {
s32 count = 0;
for (s32 i = 0; i < executeOrderSize; i++)
if (isListName(executeOrder[i], listName))
count++;
return count;
}
s32 calcUpdateListActorNumMax(const al::ExecuteOrder* executeOrder, s32 executeOrderSize) {
s32 count = 0;
for (s32 i = 0; i < executeOrderSize; i++)
if (isUpdateListActor(executeOrder[i]))
count++;
return count;
}
s32 calcDrawListActorNumMax(const al::ExecuteOrder* executeOrder, s32 executeOrderSize) {
s32 count = 0;
for (s32 i = 0; i < executeOrderSize; i++)
if (isDrawListActor(executeOrder[i]))
count++;
return count;
}
s32 calcDrawListActorModelNumMax(const al::ExecuteOrder* executeOrder, s32 executeOrderSize) {
s32 count = 0;
for (s32 i = 0; i < executeOrderSize; i++)
if (isDrawListActorModel(executeOrder[i]))
count++;
return count;
}
s32 calcDrawListLayoutNumMax(const al::ExecuteOrder* executeOrder, s32 executeOrderSize) {
s32 count = 0;
for (s32 i = 0; i < executeOrderSize; i++)
if (isDrawListLayout(executeOrder[i]))
count++;
return count;
}
} // namespace alExecutorFunction