mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-28 03:24:35 +00:00
1011 lines
37 KiB
C++
1011 lines
37 KiB
C++
#include "Library/Scene/SceneUtil.h"
|
|
|
|
#include <common/aglRenderBuffer.h>
|
|
#include <math/seadVector.h>
|
|
|
|
#include "Library/Area/AreaInitInfo.h"
|
|
#include "Library/Area/AreaObjDirector.h"
|
|
#include "Library/Area/SwitchAreaDirector.h"
|
|
#include "Library/Audio/AudioDirector.h"
|
|
#include "Library/Audio/AudioDirectorInitInfo.h"
|
|
#include "Library/Audio/System/AudioKeeper.h"
|
|
#include "Library/Audio/System/AudioKeeperFunction.h"
|
|
#include "Library/Base/StringUtil.h"
|
|
#include "Library/Camera/CameraDirector.h"
|
|
#include "Library/Camera/CameraFlagCtrl.h"
|
|
#include "Library/Camera/CameraPoseUpdater.h"
|
|
#include "Library/Camera/CameraPoserSceneInfo.h"
|
|
#include "Library/Camera/CameraRequestParamHolder.h"
|
|
#include "Library/Camera/CameraResourceHolder.h"
|
|
#include "Library/Camera/CameraUtil.h"
|
|
#include "Library/Camera/CameraViewCtrlPause.h"
|
|
#include "Library/Camera/CameraViewCtrlScene.h"
|
|
#include "Library/Camera/SceneCameraInfo.h"
|
|
#include "Library/Controller/PadRumbleDirector.h"
|
|
#include "Library/Draw/GraphicsQualityController.h"
|
|
#include "Library/Draw/GraphicsSystemInfo.h"
|
|
#include "Library/Draw/ViewRenderer.h"
|
|
#include "Library/Effect/EffectKeeper.h"
|
|
#include "Library/Effect/EffectSystem.h"
|
|
#include "Library/Execute/ExecuteUtil.h"
|
|
#include "Library/File/FileUtil.h"
|
|
#include "Library/Layout/LayoutInitInfo.h"
|
|
#include "Library/Layout/LayoutSystem.h"
|
|
#include "Library/Layout/LayoutUtil.h"
|
|
#include "Library/LiveActor/ActorAreaFunction.h"
|
|
#include "Library/LiveActor/ActorInitUtil.h"
|
|
#include "Library/LiveActor/LiveActorGroup.h"
|
|
#include "Library/LiveActor/LiveActorKit.h"
|
|
#include "Library/Model/ModelDrawBufferUpdater.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
#include "Library/Placement/PlacementInfo.h"
|
|
#include "Library/Play/Camera/SimpleCameraPoserFactory.h"
|
|
#include "Library/PostProcessing/PostProcessingFilter.h"
|
|
#include "Library/Resource/ResourceFunction.h"
|
|
#include "Library/Scene/DemoDirector.h"
|
|
#include "Library/Scene/Scene.h"
|
|
#include "Library/Scene/SceneStopCtrl.h"
|
|
#include "Library/Screen/ScreenCoverCtrl.h"
|
|
#include "Library/Se/Function/SeDbFunction.h"
|
|
#include "Library/Se/SeFunction.h"
|
|
#include "Library/Stage/StageResourceKeeper.h"
|
|
#include "Library/Stage/StageResourceList.h"
|
|
#include "Library/System/GameSystemInfo.h"
|
|
#include "Library/Yaml/ByamlIter.h"
|
|
#include "Project/Clipping/ClippingDirector.h"
|
|
#include "Project/Gravity/GravityHolder.h"
|
|
#include "Project/LiveActor/ActorExecuteFunction.h"
|
|
|
|
namespace al {
|
|
|
|
s32 getStageInfoMapNum(const Scene* scene) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return 0;
|
|
|
|
StageResourceList* resourceList = scene->getStageResourceKeeper()->getMapStageInfo();
|
|
if (!resourceList)
|
|
return 0;
|
|
|
|
return resourceList->getStageResourceNum();
|
|
}
|
|
|
|
s32 getStageInfoDesignNum(const Scene* scene) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return 0;
|
|
|
|
StageResourceList* resourceList = scene->getStageResourceKeeper()->getDesignStageInfo();
|
|
if (!resourceList)
|
|
return 0;
|
|
|
|
return resourceList->getStageResourceNum();
|
|
}
|
|
|
|
s32 getStageInfoSoundNum(const Scene* scene) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return 0;
|
|
|
|
StageResourceList* resourceList = scene->getStageResourceKeeper()->getSoundStageInfo();
|
|
if (!resourceList)
|
|
return 0;
|
|
|
|
return resourceList->getStageResourceNum();
|
|
}
|
|
|
|
StageInfo* getStageInfoMap(const Scene* scene, s32 index) {
|
|
return scene->getStageResourceKeeper()->getMapStageInfo()->getStageInfo(index);
|
|
}
|
|
|
|
StageInfo* getStageInfoDesign(const Scene* scene, s32 index) {
|
|
return scene->getStageResourceKeeper()->getDesignStageInfo()->getStageInfo(index);
|
|
}
|
|
|
|
StageInfo* getStageInfoSound(const Scene* scene, s32 index) {
|
|
return scene->getStageResourceKeeper()->getSoundStageInfo()->getStageInfo(index);
|
|
}
|
|
|
|
Resource* getStageResourceMap(const Scene* scene, s32 index) {
|
|
return getStageInfoMap(scene, index)->getResource();
|
|
}
|
|
|
|
Resource* tryGetStageResourceDesign(const Scene* scene, s32 index) {
|
|
if (getStageInfoDesignNum(scene) == 0)
|
|
return nullptr;
|
|
return getStageInfoDesign(scene, index)->getResource();
|
|
}
|
|
|
|
Resource* tryGetStageResourceSound(const Scene* scene, s32 index) {
|
|
if (getStageInfoSoundNum(scene) == 0)
|
|
return nullptr;
|
|
return getStageInfoSound(scene, index)->getResource();
|
|
}
|
|
|
|
agl::RenderBuffer* getSceneFrameBufferMain(const Scene* scene) {
|
|
DrawSystemInfo* drawSystemInfo = scene->getDrawSystemInfo();
|
|
return drawSystemInfo->isDocked ? drawSystemInfo->dockedRenderBuffer :
|
|
drawSystemInfo->handheldRenderBuffer;
|
|
}
|
|
|
|
agl::DrawContext* getSceneDrawContext(const Scene* scene) {
|
|
return scene->getDrawSystemInfo()->drawContext;
|
|
}
|
|
|
|
agl::RenderBuffer* getSceneFrameBufferConsole(const Scene* scene) {
|
|
return scene->getDrawSystemInfo()->dockedRenderBuffer;
|
|
}
|
|
|
|
agl::RenderBuffer* getSceneFrameBufferHandheld(const Scene* scene) {
|
|
return scene->getDrawSystemInfo()->handheldRenderBuffer;
|
|
}
|
|
|
|
f32 getSceneFrameBufferMainAspect(const Scene* scene) {
|
|
const sead::Vector2f& virtualSize = getSceneFrameBufferMain(scene)->getVirtualSize();
|
|
|
|
return virtualSize.x / virtualSize.y;
|
|
}
|
|
|
|
bool isChangedGraphicsQualityMode(const Scene* scene) {
|
|
return scene->getLiveActorKit()
|
|
->getGraphicsSystemInfo()
|
|
->getGraphicsQualityController()
|
|
->isChangedGraphicsQualityMode();
|
|
}
|
|
|
|
AreaObjDirector* getSceneAreaObjDirector(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getAreaObjDirector();
|
|
}
|
|
|
|
ExecuteDirector* getSceneExecuteDirector(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getExecuteDirector();
|
|
}
|
|
|
|
PlayerHolder* getScenePlayerHolder(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getPlayerHolder();
|
|
}
|
|
|
|
ItemDirectorBase* getSceneItemDirector(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getItemDirector();
|
|
}
|
|
|
|
void initActorInitInfo(ActorInitInfo* actorInitInfo, const Scene* scene,
|
|
const PlacementInfo* placementInfo, const LayoutInitInfo* layoutInfo,
|
|
const ActorFactory* actorFactory, SceneMsgCtrl* sceneMsgCtrl,
|
|
GameDataHolderBase* gameDataHolderBase) {
|
|
LiveActorKit* actorKit = scene->getLiveActorKit();
|
|
|
|
actorInitInfo->initNew(
|
|
placementInfo, layoutInfo, actorKit->getLiveActorGroupAllActors(), actorFactory,
|
|
actorKit->getActorResourceHolder(), actorKit->getAreaObjDirector(),
|
|
scene->getAudioDirector(), actorKit->getCameraDirector(), actorKit->getClippingDirector(),
|
|
actorKit->getCollisionDirector(), actorKit->getDemoDirector(),
|
|
actorKit->getEffectSystem() ? actorKit->getEffectSystem()->getEffectSystemInfo() : nullptr,
|
|
actorKit->getExecuteDirector(), gameDataHolderBase, actorKit->getGravityHolder(),
|
|
actorKit->getHitSensorDirector(), actorKit->getItemDirector(),
|
|
actorKit->getNatureDirector(), actorKit->getGamePadSystem(),
|
|
actorKit->getPadRumbleDirector(), actorKit->getPlayerHolder(), scene->getSceneObjHolder(),
|
|
sceneMsgCtrl, scene->getSceneStopCtrl(), scene->getScreenCoverCtrl(),
|
|
actorKit->getScreenPointDirector(), actorKit->getShadowDirector(),
|
|
actorKit->getStageSwitchDirector(), actorKit->getModelGroup(),
|
|
actorKit->getGraphicsSystemInfo(), actorKit->getModelDrawBufferCounter(),
|
|
actorKit->getDynamicDrawActorGroup());
|
|
}
|
|
|
|
void initLayoutInitInfo(LayoutInitInfo* layoutInfo, const Scene* scene,
|
|
const SceneInitInfo& sceneInfo) {
|
|
LiveActorKit* actorKit = scene->getLiveActorKit();
|
|
LayoutKit* layoutKit = scene->getLayoutKit();
|
|
|
|
if (actorKit) {
|
|
layoutInfo->init(
|
|
actorKit->getExecuteDirector(), actorKit->getEffectSystem()->getEffectSystemInfo(),
|
|
scene->getSceneObjHolder(), scene->getAudioDirector(), actorKit->getCameraDirector(),
|
|
sceneInfo.gameSystemInfo->layoutSystem, sceneInfo.gameSystemInfo->messageSystem,
|
|
sceneInfo.gameSystemInfo->gamePadSystem, actorKit->getPadRumbleDirector());
|
|
} else {
|
|
layoutInfo->init(
|
|
layoutKit->getExecuteDirector(), layoutKit->getEffectSystem()->getEffectSystemInfo(),
|
|
scene->getSceneObjHolder(), scene->getAudioDirector(), nullptr,
|
|
sceneInfo.gameSystemInfo->layoutSystem, sceneInfo.gameSystemInfo->messageSystem,
|
|
sceneInfo.gameSystemInfo->gamePadSystem, nullptr);
|
|
}
|
|
|
|
layoutInfo->setDrawContext(scene->getDrawSystemInfo()->drawContext);
|
|
if (layoutKit)
|
|
layoutInfo->setDrawInfo(layoutKit->getDrawInfo());
|
|
if (actorKit) {
|
|
layoutInfo->setOcclusionCullingJudge(
|
|
actorKit->getGraphicsSystemInfo()->getOcclusionCullingJudge());
|
|
}
|
|
}
|
|
|
|
// https://decomp.me/scratch/CBhyQ
|
|
// NON_MATCHING: Bad order of operations
|
|
void initPlacementAreaObj(Scene* scene, const ActorInitInfo& actorInfo) {
|
|
AreaInitInfo areaInitInfo[256];
|
|
s32 entries = 0;
|
|
|
|
for (s32 i = 0; i < getStageInfoMapNum(scene); i++) {
|
|
StageInfo* stageInfo = getStageInfoMap(scene, i);
|
|
PlacementInfo placementInfo;
|
|
if (tryGetPlacementInfo(&placementInfo, stageInfo, "AreaList")) {
|
|
initAreaInitInfo(&areaInitInfo[entries], placementInfo, actorInfo);
|
|
entries++;
|
|
}
|
|
}
|
|
for (s32 i = 0; i < getStageInfoDesignNum(scene); i++) {
|
|
StageInfo* stageInfo = getStageInfoDesign(scene, i);
|
|
PlacementInfo placementInfo;
|
|
if (tryGetPlacementInfo(&placementInfo, stageInfo, "AreaList")) {
|
|
initAreaInitInfo(&areaInitInfo[entries], placementInfo, actorInfo);
|
|
entries++;
|
|
}
|
|
}
|
|
for (s32 i = 0; i < getStageInfoSoundNum(scene); i++) {
|
|
StageInfo* stageInfo = getStageInfoSound(scene, i);
|
|
PlacementInfo placementInfo;
|
|
if (tryGetPlacementInfo(&placementInfo, stageInfo, "AreaList")) {
|
|
initAreaInitInfo(&areaInitInfo[entries], placementInfo, actorInfo);
|
|
entries++;
|
|
}
|
|
}
|
|
|
|
actorInfo.actorSceneInfo.areaObjDirector->placement(areaInitInfo, entries);
|
|
}
|
|
|
|
void initPlacementGravityObj(Scene* scene) {
|
|
PlacementInfo gravityList;
|
|
for (s32 i = 0; i < getStageInfoMapNum(scene); i++) {
|
|
StageInfo* stageInfo = getStageInfoMap(scene, i);
|
|
|
|
s32 count;
|
|
if (tryGetPlacementInfoAndCount(&gravityList, &count, stageInfo, "GravityList")) {
|
|
for (s32 j = 0; j < count; j++) {
|
|
PlacementInfo gravityListEntry;
|
|
getPlacementInfoByIndex(&gravityListEntry, gravityList, j);
|
|
if (isClassName(gravityListEntry, "GravityPoint"))
|
|
scene->getLiveActorKit()->getGravityHolder()->createGravity(gravityListEntry);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
bool tryGetPlacementInfoAndCount(PlacementInfo* outPlacementInfo, s32* outCount,
|
|
const StageInfo* stageInfo, const char* key) {
|
|
if (!tryGetPlacementInfo(outPlacementInfo, stageInfo, key)) {
|
|
*outCount = 0;
|
|
return false;
|
|
}
|
|
|
|
*outCount = getCountPlacementInfo(*outPlacementInfo);
|
|
return true;
|
|
}
|
|
|
|
void initPlacementObjectMap(Scene* scene, const ActorInitInfo& actorInfo, const char* name) {
|
|
s32 resourceNum = getStageInfoMapNum(scene);
|
|
for (s32 i = 0; i < resourceNum; i++)
|
|
initPlacementByStageInfo(getStageInfoMap(scene, i), name, actorInfo);
|
|
}
|
|
|
|
void initPlacementByStageInfo(const StageInfo* stageInfo, const char* key,
|
|
const ActorInitInfo& actorInfo) {
|
|
PlacementInfo placementInfo;
|
|
s32 count;
|
|
if (!tryGetPlacementInfoAndCount(&placementInfo, &count, stageInfo, key))
|
|
return;
|
|
|
|
for (s32 i = 0; i < count; i++) {
|
|
PlacementInfo placementInfo2;
|
|
getPlacementInfoByIndex(&placementInfo2, placementInfo, i);
|
|
createPlacementActorFromFactory(actorInfo, &placementInfo2);
|
|
}
|
|
}
|
|
|
|
void initPlacementObjectDesign(Scene* scene, const ActorInitInfo& actorInfo, const char* name) {
|
|
s32 resourceNum = getStageInfoDesignNum(scene);
|
|
for (s32 i = 0; i < resourceNum; i++)
|
|
initPlacementByStageInfo(getStageInfoDesign(scene, i), name, actorInfo);
|
|
}
|
|
|
|
void initPlacementObjectSound(Scene* scene, const ActorInitInfo& actorInfo, const char* name) {
|
|
s32 resourceNum = getStageInfoSoundNum(scene);
|
|
for (s32 i = 0; i < resourceNum; i++)
|
|
initPlacementByStageInfo(getStageInfoSound(scene, i), name, actorInfo);
|
|
}
|
|
|
|
LiveActor* tryInitPlacementSingleObject(Scene* scene, const ActorInitInfo& actorInfo,
|
|
s32 resourceType, const char* key) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return nullptr;
|
|
|
|
StageResourceList* resourceList =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType);
|
|
if (!resourceList)
|
|
return nullptr;
|
|
|
|
s32 resourceNum = resourceList->getStageResourceNum();
|
|
|
|
LiveActor* actor = nullptr;
|
|
for (s32 i = 0; i < resourceNum; i++) {
|
|
PlacementInfo placementInfo;
|
|
StageInfo* stageInfo =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType)->getStageInfo(i);
|
|
|
|
if (!tryGetPlacementInfo(&placementInfo, stageInfo, key))
|
|
continue;
|
|
|
|
s32 count = getCountPlacementInfo(placementInfo);
|
|
for (s32 j = 0; j < count; j++) {
|
|
PlacementInfo newPlacementInfo;
|
|
getPlacementInfoByIndex(&newPlacementInfo, placementInfo, j);
|
|
LiveActor* newActor = createPlacementActorFromFactory(actorInfo, &newPlacementInfo);
|
|
if (newActor)
|
|
actor = newActor;
|
|
}
|
|
}
|
|
return actor;
|
|
}
|
|
|
|
LiveActor* tryInitPlacementSingleObject(Scene* scene, const ActorInitInfo& actorInfo,
|
|
s32 resourceType, const char* key, const char* name) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return nullptr;
|
|
|
|
StageResourceList* resourceList =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType);
|
|
if (!resourceList)
|
|
return nullptr;
|
|
|
|
s32 resourceNum = resourceList->getStageResourceNum();
|
|
|
|
LiveActor* actor = nullptr;
|
|
for (s32 i = 0; i < resourceNum; i++) {
|
|
PlacementInfo placementInfo;
|
|
StageInfo* stageInfo =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType)->getStageInfo(i);
|
|
|
|
if (!tryGetPlacementInfo(&placementInfo, stageInfo, key))
|
|
continue;
|
|
|
|
s32 count = getCountPlacementInfo(placementInfo);
|
|
for (s32 j = 0; j < count; j++) {
|
|
PlacementInfo newPlacementInfo;
|
|
getPlacementInfoByIndex(&newPlacementInfo, placementInfo, j);
|
|
const char* objName = nullptr;
|
|
getObjectName(&objName, newPlacementInfo);
|
|
|
|
if (!isEqualString(objName, name))
|
|
continue;
|
|
|
|
LiveActor* newActor = createPlacementActorFromFactory(actorInfo, &newPlacementInfo);
|
|
if (newActor)
|
|
actor = newActor;
|
|
}
|
|
}
|
|
return actor;
|
|
}
|
|
|
|
bool tryInitPlacementActorGroup(LiveActorGroup* liveActorGroup, Scene* scene,
|
|
const ActorInitInfo& actorInfo, s32 resourceType, const char* key,
|
|
const char* name) {
|
|
if (!scene->getStageResourceKeeper())
|
|
return false;
|
|
|
|
StageResourceList* resourceList =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType);
|
|
if (!resourceList)
|
|
return false;
|
|
|
|
s32 resourceNum = resourceList->getStageResourceNum();
|
|
bool isRegistered = false;
|
|
for (s32 i = 0; i < resourceNum; i++) {
|
|
PlacementInfo placementInfo;
|
|
StageInfo* stageInfo =
|
|
scene->getStageResourceKeeper()->getStageResourceList(resourceType)->getStageInfo(i);
|
|
|
|
if (!tryGetPlacementInfo(&placementInfo, stageInfo, key))
|
|
continue;
|
|
|
|
s32 count = getCountPlacementInfo(placementInfo);
|
|
for (s32 j = 0; j < count; j++) {
|
|
PlacementInfo newPlacementInfo;
|
|
getPlacementInfoByIndex(&newPlacementInfo, placementInfo, j);
|
|
const char* objName = nullptr;
|
|
getObjectName(&objName, newPlacementInfo);
|
|
|
|
if (!isEqualString(objName, name))
|
|
continue;
|
|
|
|
LiveActor* actor = createPlacementActorFromFactory(actorInfo, &newPlacementInfo);
|
|
if (actor) {
|
|
liveActorGroup->registerActor(actor);
|
|
isRegistered = true;
|
|
}
|
|
}
|
|
}
|
|
return isRegistered;
|
|
}
|
|
|
|
void initPlacementByStageInfoSingle(const StageInfo* stageInfo, const char* key,
|
|
const ActorInitInfo& actorInfo) {
|
|
initPlacementByStageInfo(stageInfo, key, actorInfo);
|
|
}
|
|
|
|
bool tryGetPlacementInfo(PlacementInfo* outPlacementInfo, const StageInfo* stageInfo,
|
|
const char* key) {
|
|
ByamlIter iter;
|
|
if (!stageInfo->getPlacementIter().tryGetIterByKey(&iter, key))
|
|
return false;
|
|
|
|
outPlacementInfo->set(iter, stageInfo->getZoneIter());
|
|
return true;
|
|
}
|
|
|
|
void getPlacementInfo(PlacementInfo* outPlacementInfo, const StageInfo* stageInfo,
|
|
const char* key) {
|
|
ByamlIter iter;
|
|
stageInfo->getPlacementIter().tryGetIterByKey(&iter, key);
|
|
|
|
outPlacementInfo->set(iter, stageInfo->getZoneIter());
|
|
}
|
|
|
|
void getPlacementInfoAndCount(PlacementInfo* outPlacementInfo, s32* outCount,
|
|
const StageInfo* stageInfo, const char* key) {
|
|
getPlacementInfo(outPlacementInfo, stageInfo, key);
|
|
*outCount = getCountPlacementInfo(*outPlacementInfo);
|
|
}
|
|
|
|
void initAreaObjDirector(Scene* scene, const AreaObjFactory* factory) {
|
|
scene->getLiveActorKit()->getAreaObjDirector()->init(factory);
|
|
}
|
|
|
|
void initDemoDirector(Scene* scene, DemoDirector* demoDirector) {
|
|
scene->getLiveActorKit()->setDemoDirector(demoDirector);
|
|
}
|
|
|
|
void initHitSensorDirector(Scene* scene) {
|
|
scene->getLiveActorKit()->initHitSensorDirector();
|
|
}
|
|
|
|
void initGravityHolder(Scene* scene) {
|
|
scene->getLiveActorKit()->initGravityHolder();
|
|
}
|
|
|
|
void initItemDirector(Scene* scene, ItemDirectorBase* itemDirector) {
|
|
scene->getLiveActorKit()->setItemDirector(itemDirector);
|
|
}
|
|
|
|
void initNatureDirector(Scene* scene) {
|
|
scene->getLiveActorKit()->initNatureDirector();
|
|
}
|
|
|
|
void initSwitchAreaDirector(Scene* scene, s32 maxSwitchOnArea, s32 maxSwitchKeepOnArea) {
|
|
scene->getLiveActorKit()->initSwitchAreaDirector(maxSwitchOnArea, maxSwitchKeepOnArea);
|
|
}
|
|
|
|
void registerSwitchOnAreaGroup(Scene* scene, SwitchOnAreaGroup* switchOnAreaGroup) {
|
|
scene->getLiveActorKit()->getSwitchAreaDirector()->registerSwitchOnAreaGroup(switchOnAreaGroup);
|
|
}
|
|
|
|
void registerSwitchKeepOnAreaGroup(Scene* scene, SwitchKeepOnAreaGroup* switchKeepOnAreaGroup) {
|
|
scene->getLiveActorKit()->getSwitchAreaDirector()->registerSwitchKeepOnAreaGroup(
|
|
switchKeepOnAreaGroup);
|
|
}
|
|
|
|
void initGraphicsSystemInfo(Scene* scene, const char* name, s32 index) {
|
|
if (index > 1) {
|
|
StringTmp<32> scenario{"Scenario%d"};
|
|
GraphicsSystemInfo* systemInfo = scene->getLiveActorKit()->getGraphicsSystemInfo();
|
|
|
|
Resource* resource = nullptr;
|
|
if (getStageInfoDesignNum(scene) != 0)
|
|
resource = getStageInfoDesign(scene, 0)->getResource();
|
|
systemInfo->initStageResource(resource, name, scenario.cstr());
|
|
} else {
|
|
GraphicsSystemInfo* systemInfo = scene->getLiveActorKit()->getGraphicsSystemInfo();
|
|
|
|
Resource* resource = nullptr;
|
|
if (getStageInfoDesignNum(scene) != 0)
|
|
resource = getStageInfoDesign(scene, 0)->getResource();
|
|
|
|
systemInfo->initStageResource(resource, name, nullptr);
|
|
}
|
|
}
|
|
|
|
void initCameraDirectorImpl(Scene* scene, const CameraPoserFactory* cameraPoserFactory) {
|
|
LiveActorKit* actorKit = scene->getLiveActorKit();
|
|
|
|
CameraPoserSceneInfo* sceneInfo = new CameraPoserSceneInfo();
|
|
sceneInfo->init(actorKit->getAreaObjDirector(), actorKit->getCollisionDirector(),
|
|
scene->getAudioDirector());
|
|
|
|
if (!cameraPoserFactory)
|
|
cameraPoserFactory = new SimpleCameraPoserFactory("カメラファクトリー");
|
|
|
|
scene->getLiveActorKit()->getCameraDirector()->init(sceneInfo, cameraPoserFactory);
|
|
registerExecutorUser(scene->getLiveActorKit()->getCameraDirector(),
|
|
actorKit->getExecuteDirector(), "カメラ");
|
|
}
|
|
|
|
void initCameraDirector(Scene* scene, const char* name, s32 index,
|
|
const CameraPoserFactory* cameraPoserFactory) {
|
|
initCameraDirectorImpl(scene, cameraPoserFactory);
|
|
CameraDirector* cameraDirector = scene->getLiveActorKit()->getCameraDirector();
|
|
|
|
CameraResourceHolder* cameraResourceHolder =
|
|
new CameraResourceHolder(name, getStageInfoMapNum(scene));
|
|
|
|
for (s32 i = 0; i < getStageInfoMapNum(scene); i++) {
|
|
cameraResourceHolder->tryInitCameraResource(getStageInfoMap(scene, i)->getResource(),
|
|
i > 0 ? 1 : index);
|
|
}
|
|
|
|
cameraDirector->initResourceHolder(cameraResourceHolder);
|
|
cameraDirector->initAreaCameraSwitcherSingle();
|
|
}
|
|
|
|
void initCameraDirectorWithoutStageResource(Scene* scene,
|
|
const CameraPoserFactory* cameraPoserFactory) {
|
|
initCameraDirectorImpl(scene, cameraPoserFactory);
|
|
}
|
|
|
|
void initCameraDirectorFix(Scene* scene, const sead::Vector3f& pos, const sead::Vector3f& lookAtPos,
|
|
const CameraPoserFactory* cameraPoserFactory) {
|
|
initCameraDirectorImpl(scene, cameraPoserFactory);
|
|
startCamera(scene, initFixCamera(scene, "Scene", pos, lookAtPos));
|
|
}
|
|
|
|
void initSceneCameraFovyDegree(Scene* scene, f32 fovy) {
|
|
scene->getLiveActorKit()->getCameraDirector()->initSceneFovyDegree(fovy);
|
|
}
|
|
|
|
void initSnapShotCameraAudioKeeper(Scene* scene, IUseAudioKeeper* audioKeeper) {
|
|
scene->getLiveActorKit()->getCameraDirector()->initSnapShotCameraAudioKeeper(audioKeeper);
|
|
}
|
|
|
|
void setCameraAspect(Scene* scene, f32 aspectA, f32 aspectB) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getPoseUpdater(0)->setAspect(aspectA);
|
|
if (aspectB != -1.0f)
|
|
scene->getLiveActorKit()->getCameraDirector()->getPoseUpdater(1)->setAspect(aspectB);
|
|
}
|
|
|
|
void resetSceneInitEntranceCamera(Scene* scene) {
|
|
scene->getLiveActorKit()
|
|
->getCameraDirector()
|
|
->getSceneCameraCtrl()
|
|
->getSceneViewAt(0)
|
|
->resetViewName();
|
|
}
|
|
|
|
void stopCameraByDeathPlayer(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->stopByDeathPlayer();
|
|
}
|
|
|
|
void restartCameraByDeathPlayer(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->restartByDeathPlayer();
|
|
}
|
|
|
|
void startInvalidCameraStopJudgeByDemo(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->startInvalidStopJudgeByDemo();
|
|
}
|
|
|
|
void endInvalidCameraStopJudgeByDemo(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->endInvalidStopJudgeByDemo();
|
|
}
|
|
|
|
void startCameraSnapShotMode(Scene* scene, bool useInterpole) {
|
|
scene->getLiveActorKit()->getCameraDirector()->startSnapShotMode(useInterpole);
|
|
}
|
|
|
|
void endCameraSnapShotMode(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->endSnapShotMode();
|
|
}
|
|
|
|
bool isCameraReverseInputH(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputH;
|
|
}
|
|
|
|
void onCameraReverseInputH(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputH = true;
|
|
}
|
|
|
|
void offCameraReverseInputH(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputH = false;
|
|
}
|
|
|
|
bool isCameraReverseInputV(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputV;
|
|
}
|
|
|
|
void onCameraReverseInputV(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputV = true;
|
|
}
|
|
|
|
void offCameraReverseInputV(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isCameraReverseInputV = false;
|
|
}
|
|
|
|
s32 getCameraStickSensitivityLevel(const Scene* scene) {
|
|
return scene->getLiveActorKit()
|
|
->getCameraDirector()
|
|
->getSceneCameraCtrl()
|
|
->getRequestParamHolder()
|
|
->getStickSensitivityLevel();
|
|
}
|
|
|
|
void setCameraStickSensitivityLevel(Scene* scene, s32 sensitivityLevel) {
|
|
scene->getLiveActorKit()
|
|
->getCameraDirector()
|
|
->getSceneCameraCtrl()
|
|
->getRequestParamHolder()
|
|
->setStickSensitivityLevel(sensitivityLevel);
|
|
}
|
|
|
|
bool isValidCameraGyro(const Scene* scene) {
|
|
return !scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isInvalidCameraGyro;
|
|
}
|
|
|
|
void validateCameraGyro(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isInvalidCameraGyro = false;
|
|
}
|
|
|
|
void invalidateCameraGyro(Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->getFlagCtrl()->isInvalidCameraGyro = true;
|
|
}
|
|
|
|
s32 getCameraGyroSensitivityLevel(const Scene* scene) {
|
|
return scene->getLiveActorKit()
|
|
->getCameraDirector()
|
|
->getSceneCameraCtrl()
|
|
->getRequestParamHolder()
|
|
->getGyroSensitivityLevel();
|
|
}
|
|
|
|
void setCameraGyroSensitivityLevel(Scene* scene, s32 sensitivityLevel) {
|
|
scene->getLiveActorKit()
|
|
->getCameraDirector()
|
|
->getSceneCameraCtrl()
|
|
->getRequestParamHolder()
|
|
->setGyroSensitivityLevel(sensitivityLevel);
|
|
}
|
|
|
|
PauseCameraCtrl* initAndCreatePauseCameraCtrl(Scene* scene, f32 value) {
|
|
return scene->getLiveActorKit()->getCameraDirector()->initAndCreatePauseCameraCtrl(value);
|
|
}
|
|
|
|
void startCameraPause(PauseCameraCtrl* pauseCameraCtrl) {
|
|
pauseCameraCtrl->startCameraPause();
|
|
}
|
|
|
|
void endCameraPause(PauseCameraCtrl* pauseCameraCtrl) {
|
|
pauseCameraCtrl->endCameraPause();
|
|
}
|
|
|
|
AudioDirector* initAudioDirectorImpl(Scene* scene, const SceneInitInfo& sceneInfo,
|
|
AudioDirectorInitInfo& audioDirectorInfo) {
|
|
audioDirectorInfo.audioSystemInfo =
|
|
sceneInfo.gameSystemInfo->audioSystem ?
|
|
sceneInfo.gameSystemInfo->audioSystem->getAudioSystemInfo() :
|
|
nullptr;
|
|
|
|
if (!audioDirectorInfo.curStage)
|
|
audioDirectorInfo.curStage = sceneInfo.initStageName;
|
|
if (audioDirectorInfo.scenarioNo == 0)
|
|
audioDirectorInfo.scenarioNo = sceneInfo.scenarioNo;
|
|
if (audioDirectorInfo.seDirectorInitInfo.maxRequests < 1)
|
|
audioDirectorInfo.seDirectorInitInfo.maxRequests = 200;
|
|
if (audioDirectorInfo.seDirectorInitInfo.playerCount < 1)
|
|
audioDirectorInfo.seDirectorInitInfo.playerCount = 40;
|
|
|
|
audioDirectorInfo.bgmDirectorInitInfo.field_0 = true;
|
|
audioDirectorInfo.bgmDirectorInitInfo.field_8 = "Scene";
|
|
audioDirectorInfo.duckingName = "DuckingForScene";
|
|
|
|
AudioDirector* audioDirector = new AudioDirector();
|
|
audioDirector->init(audioDirectorInfo);
|
|
scene->setAudioDirector(audioDirector);
|
|
audioDirector->setDependentModule(sceneInfo.audioDirector);
|
|
return audioDirector;
|
|
}
|
|
|
|
void initAudioDirector2D(Scene* scene, const SceneInitInfo& sceneInfo,
|
|
AudioDirectorInitInfo& audioDirectorInfo) {
|
|
initAudioDirectorImpl(scene, sceneInfo, audioDirectorInfo);
|
|
}
|
|
|
|
void initAudioDirector3D(Scene* scene, const SceneInitInfo& sceneInfo,
|
|
AudioDirectorInitInfo& audioDirectorInfo) {
|
|
initAudioDirector3D(scene, sceneInfo, audioDirectorInfo, &getLookAtCamera(scene, 0),
|
|
&getProjection(scene, 0), scene->getLiveActorKit()->getAreaObjDirector());
|
|
}
|
|
|
|
void initAudioDirector3D(Scene* scene, const SceneInitInfo& sceneInfo,
|
|
AudioDirectorInitInfo& audioDirectorInfo,
|
|
const sead::LookAtCamera* lookAtCamera, const Projection* projection,
|
|
AreaObjDirector* areaObjDirector) {
|
|
if (!audioDirectorInfo.seDirectorInitInfo.cameraPos)
|
|
audioDirectorInfo.seDirectorInitInfo.cameraPos = &lookAtCamera->getPos();
|
|
if (!audioDirectorInfo.seDirectorInitInfo.cameraMatrix)
|
|
audioDirectorInfo.seDirectorInitInfo.cameraMatrix = &lookAtCamera->getMatrix();
|
|
if (!audioDirectorInfo.seDirectorInitInfo.cameraProjection)
|
|
audioDirectorInfo.seDirectorInitInfo.cameraProjection = projection;
|
|
if (!audioDirectorInfo.seDirectorInitInfo.cameraAt)
|
|
audioDirectorInfo.seDirectorInitInfo.cameraAt = &lookAtCamera->getAt();
|
|
if (!audioDirectorInfo.areaObjDirector)
|
|
audioDirectorInfo.areaObjDirector = areaObjDirector;
|
|
if (!audioDirectorInfo.demoDirector)
|
|
audioDirectorInfo.demoDirector = scene->getLiveActorKit()->getDemoDirector();
|
|
|
|
initAudioDirectorImpl(scene, sceneInfo, audioDirectorInfo)->init3D(audioDirectorInfo);
|
|
}
|
|
|
|
void initSceneAudioKeeper(Scene* scene, const SceneInitInfo& sceneInfo, const char* name) {
|
|
AudioSystemInfo* audioSystemInfo = nullptr;
|
|
if (sceneInfo.gameSystemInfo->audioSystem)
|
|
audioSystemInfo = sceneInfo.gameSystemInfo->audioSystem->getAudioSystemInfo();
|
|
|
|
const char* seUserName = alSeDbFunction::tryFindSceneSeUserName(
|
|
audioSystemInfo, sceneInfo.initStageName, sceneInfo.scenarioNo);
|
|
|
|
if (seUserName)
|
|
name = seUserName;
|
|
|
|
scene->setAudioKeeper(
|
|
alAudioKeeperFunction::createAudioKeeper(scene->getAudioDirector(), name, nullptr));
|
|
}
|
|
|
|
void setIsSafeFinalizingInParallelThread(Scene* scene, bool isSafe) {
|
|
if (scene->getAudioDirector())
|
|
scene->getAudioDirector()->setIsSafeFinalizingInParallelThread(isSafe);
|
|
}
|
|
|
|
void updateKit(Scene* scene) {
|
|
executeUpdate(scene->getLiveActorKit(), nullptr);
|
|
}
|
|
|
|
void updateKitTable(Scene* scene, const char* name) {
|
|
executeUpdateTable(scene->getLiveActorKit(), name);
|
|
}
|
|
|
|
void updateKitList(Scene* scene, const char* listName, const char* name) {
|
|
executeUpdateList(scene->getLiveActorKit(), listName, name);
|
|
}
|
|
|
|
void updateKitList(Scene* scene, const char* name) {
|
|
updateKitList(scene, "更新", name);
|
|
}
|
|
|
|
void updateLayoutKit(Scene* scene) {
|
|
executeUpdate(scene->getLayoutKit());
|
|
}
|
|
|
|
void updateEffect(Scene* scene) {
|
|
alExecuteFunction::updateEffect(scene->getLiveActorKit()->getExecuteDirector());
|
|
}
|
|
|
|
void updateEffectSystem(Scene* scene) {
|
|
alExecuteFunction::updateEffectSystem(scene->getLiveActorKit()->getExecuteDirector());
|
|
}
|
|
|
|
void updateEffectPlayer(Scene* scene) {
|
|
alExecuteFunction::updateEffectPlayer(scene->getLiveActorKit()->getExecuteDirector());
|
|
}
|
|
|
|
void updateEffectDemo(Scene* scene) {
|
|
alExecuteFunction::updateEffectDemo(scene->getLiveActorKit()->getExecuteDirector());
|
|
}
|
|
|
|
void updateEffectDemoWithPause(Scene* scene) {
|
|
updateKitList(scene, "エフェクト(前処理)");
|
|
updateKitList(scene, "エフェクト(プレイヤー)");
|
|
updateKitList(scene, "エフェクト(Zソート)");
|
|
updateKitList(scene, "エフェクト(カメラデモ)");
|
|
updateKitList(scene, "エフェクト(カメラ前エフェクト)");
|
|
updateKitList(scene, "エフェクト(ベース2D)");
|
|
updateKitList(scene, "エフェクト(2D)");
|
|
updateKitList(scene, "エフェクト(後処理)");
|
|
}
|
|
|
|
void updateEffectLayout(Scene* scene) {
|
|
alExecuteFunction::updateEffectLayout(scene->getLiveActorKit()->getExecuteDirector());
|
|
}
|
|
|
|
void updateGraphicsPrev(Scene* scene) {
|
|
LiveActorKit* actorKit = scene->getLiveActorKit();
|
|
if (actorKit && actorKit->getGraphicsSystemInfo() && actorKit->getCameraDirector())
|
|
actorKit->preDrawGraphics();
|
|
}
|
|
|
|
void updateKitListPrev(Scene* scene) {
|
|
scene->getLiveActorKit()->clearGraphicsRequest();
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->update();
|
|
}
|
|
|
|
void updateKitListPost(Scene* scene) {
|
|
updateKitList(scene, "帽子装着位置更新");
|
|
updateEffect(scene);
|
|
}
|
|
|
|
void updateKitListPostDemoWithPauseNormalEffect(Scene* scene) {
|
|
updateKitList(scene, "帽子装着位置更新");
|
|
updateEffectDemoWithPause(scene);
|
|
}
|
|
|
|
void updateKitListPostOnNerveEnd(Scene* scene) {
|
|
scene->getLiveActorKit()->updateGraphics();
|
|
updateGraphicsPrev(scene);
|
|
}
|
|
|
|
void drawKit(const Scene* scene, const char* name) {
|
|
executeDraw(scene->getLiveActorKit(), name);
|
|
}
|
|
|
|
void drawKitList(const Scene* scene, const char* listName, const char* name) {
|
|
executeDrawList(scene->getLiveActorKit(), listName, name);
|
|
}
|
|
|
|
void drawLayoutKit(const Scene* scene, const char* name) {
|
|
executeDraw(scene->getLayoutKit(), name);
|
|
}
|
|
|
|
void drawEffectDeferred(const Scene* scene, s32 index) {
|
|
SceneCameraInfo* cameraInfo =
|
|
scene->getLiveActorKit()->getCameraDirector()->getSceneCameraInfo();
|
|
alEffectSystemFunction::drawEffectDeferred(
|
|
scene->getLiveActorKit()->getEffectSystem(), getProjectionMtx(cameraInfo, index),
|
|
getViewMtx(cameraInfo, index), getNear(cameraInfo, index), getFar(cameraInfo, index),
|
|
getFovy(cameraInfo, index));
|
|
}
|
|
|
|
void startForwardPlayerScreenFader(const Scene* scene, s32 a, s32 b, f32 c) {
|
|
scene->getLiveActorKit()
|
|
->getGraphicsSystemInfo()
|
|
->getViewRenderer()
|
|
->startForwardPlayerScreenFader(a, b, c);
|
|
}
|
|
|
|
void endForwardPlayerScreenFader(const Scene* scene, s32 a) {
|
|
scene->getLiveActorKit()
|
|
->getGraphicsSystemInfo()
|
|
->getViewRenderer()
|
|
->endForwardPlayerScreenFader(a);
|
|
}
|
|
|
|
bool isStopScene(const Scene* scene) {
|
|
return scene->getSceneStopCtrl()->isStop();
|
|
}
|
|
|
|
void startCheckViewCtrlByCameraPos(Scene* scene) {
|
|
scene->getLiveActorKit()->getClippingDirector()->startCheckViewCtrlByCameraPos();
|
|
}
|
|
|
|
void startCheckViewCtrlByLookAtPos(Scene* scene) {
|
|
scene->getLiveActorKit()->getClippingDirector()->startCheckViewCtrlByLookAtPos();
|
|
}
|
|
|
|
void startCheckViewCtrlByPlayerPos(Scene* scene) {
|
|
scene->getLiveActorKit()->getClippingDirector()->startCheckViewCtrlByPlayerPos();
|
|
}
|
|
|
|
bool isExistScreenCoverCtrl(const Scene* scene) {
|
|
return scene->getScreenCoverCtrl() != nullptr;
|
|
}
|
|
|
|
bool isRequestCaptureScreenCover(const Scene* scene) {
|
|
return scene->getScreenCoverCtrl()->isRequestCapture();
|
|
}
|
|
|
|
void resetRequestCaptureScreenCover(const Scene* scene) {
|
|
scene->getScreenCoverCtrl()->resetRequestCapture();
|
|
}
|
|
|
|
bool isOffDrawScreenCover(const Scene* scene) {
|
|
return scene->getScreenCoverCtrl()->getCoverFrames() == 0;
|
|
}
|
|
|
|
void resetCaptureScreenCover(const Scene* scene) {
|
|
scene->getScreenCoverCtrl()->resetCapture();
|
|
}
|
|
|
|
void validatePostProcessingFilter(const Scene* scene) {
|
|
scene->getLiveActorKit()->getGraphicsSystemInfo()->getPostProcessingFilter()->validate();
|
|
}
|
|
|
|
void invalidatePostProcessingFilter(const Scene* scene) {
|
|
scene->getLiveActorKit()->getGraphicsSystemInfo()->getPostProcessingFilter()->invalidate();
|
|
}
|
|
|
|
void incrementPostProcessingFilterPreset(const Scene* scene) {
|
|
scene->getLiveActorKit()->getGraphicsSystemInfo()->getPostProcessingFilter()->incrementPreset();
|
|
}
|
|
|
|
void decrementPostProcessingFilterPreset(const Scene* scene) {
|
|
scene->getLiveActorKit()->getGraphicsSystemInfo()->getPostProcessingFilter()->decrementPreset();
|
|
}
|
|
|
|
s32 getPostProcessingFilterPresetId(const Scene* scene) {
|
|
return scene->getLiveActorKit()
|
|
->getGraphicsSystemInfo()
|
|
->getPostProcessingFilter()
|
|
->getPresetId();
|
|
}
|
|
|
|
bool isActiveDemo(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getDemoDirector()->isActiveDemo();
|
|
}
|
|
|
|
const char* getActiveDemoName(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getDemoDirector()->getActiveDemoName();
|
|
}
|
|
|
|
LiveActor** getDemoActorList(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getDemoDirector()->getDemoActorList();
|
|
}
|
|
|
|
s32 getDemoActorNum(const Scene* scene) {
|
|
return scene->getLiveActorKit()->getDemoDirector()->getDemoActorNum();
|
|
}
|
|
|
|
void updateDemoActor(const Scene* scene) {
|
|
scene->getLiveActorKit()->getDemoDirector()->updateDemoActor(nullptr);
|
|
}
|
|
|
|
void updateDemoActorForPauseEffect(const Scene* scene) {
|
|
EffectSystem* effectSystem = scene->getLiveActorKit()->getEffectSystem();
|
|
scene->getLiveActorKit()->getDemoDirector()->updateDemoActor(effectSystem);
|
|
}
|
|
|
|
void stopAllSe(const Scene* scene, u32 index) {
|
|
if (scene && scene->getAudioDirector())
|
|
alSeFunction::stopAllSe(scene->getAudioDirector(), index);
|
|
}
|
|
|
|
void initPadRumble(const Scene* scene, const SceneInitInfo& sceneInfo) {
|
|
WaveVibrationHolder* waveVibrationHolder = sceneInfo.gameSystemInfo->waveVibrationHolder;
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->setWaveVibrationHolder(waveVibrationHolder);
|
|
|
|
alAudioSystemFunction::setPadRumbleDirectorForSe(
|
|
scene->getAudioDirector(), scene->getLiveActorKit()->getPadRumbleDirector());
|
|
}
|
|
|
|
void stopPadRumble(const Scene* scene) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->stopAllRumble();
|
|
}
|
|
|
|
void pausePadRumble(const Scene* scene) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->pause();
|
|
}
|
|
|
|
void endPausePadRumble(const Scene* scene) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->endPause();
|
|
}
|
|
|
|
void validatePadRumble(Scene* scene) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->validatePadRumble();
|
|
}
|
|
|
|
void invalidatePadRumble(Scene* scene) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->invalidatePadRumble();
|
|
}
|
|
|
|
void setPadRumblePowerLevel(Scene* scene, s32 powerLevel) {
|
|
scene->getLiveActorKit()->getPadRumbleDirector()->setPowerLevel(powerLevel);
|
|
}
|
|
|
|
const Resource* getPreLoadFileListArc() {
|
|
return findResource("SystemData/PreLoad");
|
|
}
|
|
|
|
bool tryRequestPreLoadFile(const Scene* scene, const SceneInitInfo& sceneInfo, s32 index,
|
|
sead::Heap* heap) {
|
|
StringTmp<128> stageName{"%s%d", sceneInfo.initStageName, index};
|
|
return tryRequestPreLoadFile(getPreLoadFileListArc(), stageName, heap, nullptr);
|
|
}
|
|
|
|
} // namespace al
|
|
|
|
namespace alSceneFunction {
|
|
void initAreaCameraSwitcherMultiForPrototype(const al::Scene* scene) {
|
|
scene->getLiveActorKit()->getCameraDirector()->initAreaCameraSwitcherMultiForPrototype(
|
|
scene->getLiveActorKit()->getAreaObjDirector());
|
|
}
|
|
} // namespace alSceneFunction
|