OdysseyDecomp/lib/al/Library/Resource/ActorResource.cpp

64 lines
2.2 KiB
C++

#include "Library/Resource/ActorResource.h"
#include "Library/Base/StringUtil.h"
#include "Library/LiveActor/ActorInitResourceData.h"
#include "Library/LiveActor/ActorResourceFunction.h"
#include "Library/Resource/Resource.h"
#include "Library/Resource/ResourceFunction.h"
#include "Project/Action/InitResourceDataAction.h"
#include "Project/Anim/InitResourceDataAnim.h"
namespace al {
ActorResource::ActorResource(const sead::SafeString& name, Resource* modelResource,
Resource* animResource)
: mModelRes(modelResource), mAnimRes(animResource) {
mName = name;
}
void ActorResource::initResourceData(const char* suffix, bool mergeAnim) {
StringTmp<64> fileSuffixName = "";
if (!tryGetActorInitFileSuffixName(&fileSuffixName, mModelRes, "ActionAnimCtrl", suffix)) {
const char* newSuffix = "";
if (suffix)
newSuffix = suffix;
fileSuffixName.copy(newSuffix);
}
StringTmp<128> fileName = "";
createFileNameBySuffix(&fileName, "ActionAnimCtrl", fileSuffixName.cstr());
Resource* mainRes = mModelRes;
Resource* animRes = mAnimRes;
if (animRes) {
mHasAnimData = true;
if (mergeAnim) {
if (mainRes->getResData() && mainRes->getResData()->getAnimData()) {
if (animRes->getResData() && animRes->getResData()->getAnimData()) {
mAnimResData = InitResourceDataAnim::tryCreate(mainRes, animRes);
mActionResData = InitResourceDataAction::tryCreate(animRes, mAnimResData,
fileSuffixName.cstr());
return;
}
}
}
mainRes = animRes;
}
ActorInitResourceData* resData = mainRes->getResData();
if (!resData)
return;
mAnimResData = resData->getAnimData();
if (suffix && !isEqualString(fileName.cstr(), "ActionAnimCtrl") &&
isExistResourceYaml(mainRes, fileName.cstr(), nullptr)) {
mActionResData =
InitResourceDataAction::tryCreate(mainRes, mAnimResData, fileSuffixName.cstr());
} else {
mActionResData = resData->getDataAction();
}
}
} // namespace al