Project/Execute: Implement ExecuteFunction (#755)

This commit is contained in:
Narr the Reg 2025-10-24 16:13:57 -06:00 committed by GitHub
parent 6de13a8b6e
commit c7b2d00c87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 160 additions and 13 deletions

View file

@ -292743,51 +292743,51 @@ Project/Execute/ExecuteFunction.o:
- offset: 0xa5e0d0
size: 4
label: _ZN17alExecuteFunction11executeDrawEPKN2al15ExecuteDirectorEPKc
status: NotDecompiled
status: Matching
- offset: 0xa5e0d4
size: 4
label: _ZN17alExecuteFunction15executeDrawListEPKN2al15ExecuteDirectorEPKcS5_
status: NotDecompiled
status: Matching
- offset: 0xa5e0d8
size: 8
label: _ZN18alExecutorFunction10isListNameERKN2al12ExecuteOrderEPKc
status: NotDecompiled
status: Matching
- offset: 0xa5e0e0
size: 116
label: _ZN18alExecutorFunction17isUpdateListActorERKN2al12ExecuteOrderE
status: NotDecompiled
status: Matching
- offset: 0xa5e154
size: 16
label: _ZN18alExecutorFunction15isDrawListActorERKN2al12ExecuteOrderE
status: NotDecompiled
status: Matching
- offset: 0xa5e164
size: 676
label: _ZN18alExecutorFunction20isDrawListActorModelERKN2al12ExecuteOrderE
status: NotDecompiled
status: Matching
- offset: 0xa5e408
size: 76
label: _ZN18alExecutorFunction16isDrawListLayoutERKN2al12ExecuteOrderE
status: NotDecompiled
status: Matching
- offset: 0xa5e454
size: 96
label: _ZN18alExecutorFunction22calcExecutorListNumMaxEPKN2al12ExecuteOrderEiPKc
status: NotDecompiled
status: Matching
- offset: 0xa5e4b4
size: 192
label: _ZN18alExecutorFunction25calcUpdateListActorNumMaxEPKN2al12ExecuteOrderEi
status: NotDecompiled
status: Matching
- offset: 0xa5e574
size: 100
label: _ZN18alExecutorFunction23calcDrawListActorNumMaxEPKN2al12ExecuteOrderEi
status: NotDecompiled
status: Matching
- offset: 0xa5e5d8
size: 92
label: _ZN18alExecutorFunction28calcDrawListActorModelNumMaxEPKN2al12ExecuteOrderEi
status: NotDecompiled
status: Matching
- offset: 0xa5e634
size: 136
label: _ZN18alExecutorFunction24calcDrawListLayoutNumMaxEPKN2al12ExecuteOrderEi
status: NotDecompiled
status: Matching
Project/Execute/ExecuteSystemInitInfo.o:
'.text':
- offset: 0xa5e6bc

View file

@ -5,7 +5,7 @@
namespace al {
class CollisionParts;
class HitInfo;
struct HitInfo;
class SphereCheckInfo;
class ArrowCheckInfo;
class DiskCheckInfo;

View file

@ -0,0 +1,117 @@
#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

View file

@ -0,0 +1,30 @@
#pragma once
#include <basis/seadTypes.h>
namespace al {
class ExecuteDirector;
struct ExecuteOrder;
} // namespace al
namespace alExecuteFunction {
void executeDraw(const al::ExecuteDirector* executeDirector, const char* tableName);
void executeDrawList(const al::ExecuteDirector* executeDirector, const char* tableName,
const char* listName);
} // namespace alExecuteFunction
namespace alExecutorFunction {
bool isListName(const al::ExecuteOrder& executeOrder, const char* listName);
bool isUpdateListActor(const al::ExecuteOrder& executeOrder);
bool isDrawListActor(const al::ExecuteOrder& executeOrder);
bool isDrawListActorModel(const al::ExecuteOrder& executeOrder);
bool isDrawListLayout(const al::ExecuteOrder& executeOrder);
s32 calcExecutorListNumMax(const al::ExecuteOrder* executeOrder, s32 executeDirectorSize,
const char* listName);
s32 calcUpdateListActorNumMax(const al::ExecuteOrder* executeOrder, s32 executeDirectorSize);
s32 calcDrawListActorNumMax(const al::ExecuteOrder* executeOrder, s32 executeDirectorSize);
s32 calcDrawListActorModelNumMax(const al::ExecuteOrder* executeOrder, s32 executeDirectorSize);
s32 calcDrawListLayoutNumMax(const al::ExecuteOrder* executeOrder, s32 executeDirectorSize);
} // namespace alExecutorFunction