OdysseyDecomp/lib/al/Library/Execute/ExecuteUtil.cpp
2025-04-19 23:03:48 +02:00

141 lines
5.5 KiB
C++

#include "Library/Execute/ExecuteUtil.h"
#include "Library/Execute/ActorExecuteInfo.h"
#include "Library/Execute/ExecuteDirector.h"
#include "Library/Execute/ExecuteRequestKeeper.h"
#include "Library/LiveActor/ActorFlagFunction.h"
#include "Library/LiveActor/LiveActor.h"
#include "Library/LiveActor/LiveActorFunction.h"
#include "Library/Model/ModelDrawerBase.h"
#include "Library/Model/ModelKeeper.h"
#include "Library/Shadow/ActorShadowUtil.h"
namespace al {
void registerExecutorActorUpdate(LiveActor* actor, ExecuteDirector* director,
const char* listName) {
director->registerActorUpdate(actor, listName);
}
void registerExecutorActorDraw(LiveActor* actor, ExecuteDirector* director, const char* listName) {
director->registerActorDraw(actor, listName);
}
void registerExecutorLayoutUpdate(LayoutActor* layout, ExecuteDirector* director,
const char* listName) {
director->registerLayoutUpdate(layout, listName);
}
void registerExecutorLayoutDraw(LayoutActor* layout, ExecuteDirector* director,
const char* listName) {
director->registerLayoutDraw(layout, listName);
}
void registerExecutorUser(IUseExecutor* user, ExecuteDirector* director, const char* listName) {
director->registerUser(user, listName);
}
void registerExecutorFunctor(const char* listName, ExecuteDirector* director,
const FunctorBase& functor) {
director->registerFunctor(functor, listName);
}
void registerExecutorFunctorDraw(const char* listName, ExecuteDirector* director,
const FunctorBase& functor) {
director->registerFunctorDraw(functor, listName);
}
} // namespace al
namespace alActorSystemFunction {
void addToExecutorMovement(al::LiveActor* actor) {
actor->getExecuteInfo()->getRequestKeeper()->request(
actor, al::ExecuteRequestKeeper::Request_Movement);
}
void addToExecutorDraw(al::LiveActor* actor) {
actor->getExecuteInfo()->getRequestKeeper()->request(actor,
al::ExecuteRequestKeeper::Request_Draw);
}
void removeFromExecutorMovement(al::LiveActor* actor) {
actor->getExecuteInfo()->getRequestKeeper()->request(
actor, al::ExecuteRequestKeeper::Request_RemoveFromMovement);
}
void removeFromExecutorDraw(al::LiveActor* actor) {
actor->getExecuteInfo()->getRequestKeeper()->request(
actor, al::ExecuteRequestKeeper::Request_RemoveFromDraw);
}
void updateExecutorDrawRec(al::LiveActor* baseActor, al::LiveActor* actor) {
if (al::isAlive(actor) && actor->getExecuteInfo()) {
for (s32 i = 0; i < actor->getExecuteInfo()->getDrawerCount(); i++) {
actor->getExecuteInfo()->getDrawer(i)->updateModel(
actor->getModelKeeper()->getModelCtrl());
}
}
al::updateDepthShadowMapCtrlShapeVisible(actor);
if (al::isExistSubActorKeeper(actor)) {
s32 subActorNum = al::getSubActorNum(actor);
for (s32 i = 0; i < subActorNum; i++) {
al::LiveActor* subActor = al::getSubActor(actor, i);
if (baseActor->getModelKeeper() == subActor->getModelKeeper())
updateExecutorDrawRec(baseActor, subActor);
}
}
}
void updateExecutorDraw(al::LiveActor* actor) {
updateExecutorDrawRec(actor, actor);
}
} // namespace alActorSystemFunction
namespace alExecuteFunction {
void updateEffect(const al::ExecuteDirector* director) {
director->executeList("更新", "エフェクト(前処理)");
director->executeList("更新", "エフェクト(3D)");
director->executeList("更新", "エフェクト(プレイヤー)");
director->executeList("更新", "エフェクト(Zソート)");
director->executeList("更新", "エフェクト(カメラデモ)");
director->executeList("更新", "エフェクト(カメラ前エフェクト)");
director->executeList("更新", "エフェクト(ベース2D)");
director->executeList("更新", "エフェクト(2D)");
director->executeList("更新", "エフェクト(後処理)");
}
void updateEffectSystem(const al::ExecuteDirector* director) {
director->executeList("更新", "エフェクト(前処理)");
director->executeList("更新", "エフェクト(後処理)");
}
void updateEffectPlayer(const al::ExecuteDirector* director) {
director->executeList("更新", "エフェクト(前処理)");
director->executeList("更新", "エフェクト(プレイヤー)");
director->executeList("更新", "エフェクト(ベース2D)");
director->executeList("更新", "エフェクト(2D)");
director->executeList("更新", "エフェクト(後処理)");
}
void updateEffectDemo(const al::ExecuteDirector* director) {
director->executeList("更新", "エフェクト(前処理)");
director->executeList("更新", "エフェクト(カメラデモ)");
director->executeList("更新", "エフェクト(カメラ前エフェクト)");
director->executeList("更新", "エフェクト(ベース2D)");
director->executeList("更新", "エフェクト(2D)");
director->executeList("更新", "エフェクト(後処理)");
}
void updateEffectLayout(const al::ExecuteDirector* director) {
director->executeList("更新", "エフェクト(前処理)");
director->executeList("更新", "エフェクト(2D)");
director->executeList("更新", "エフェクト(後処理)");
}
} // namespace alExecuteFunction