mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-27 02:54:08 +00:00
64 lines
2.2 KiB
C++
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
|