Cook/cache fixes for unset original IDs

This commit is contained in:
Phillip Stephens 2019-10-13 19:45:43 -07:00
parent 76f90569ca
commit 6260708ba4
Signed by: Antidote
GPG Key ID: F8BEE4C83DACA60D
2 changed files with 62 additions and 13 deletions

View File

@ -1018,7 +1018,12 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat
for (const DNAANCS::Actor::Subtype& sub : actor.subtypes) { for (const DNAANCS::Actor::Subtype& sub : actor.subtypes) {
if (sub.name == ch.name) { if (sub.name == ch.name) {
hecl::SystemStringConv chSysName(ch.name); hecl::SystemStringConv chSysName(ch.name);
ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, sub.cskrId)); if (!sub.cskrId.empty()) {
hecl::SystemStringConv cskrSysName(sub.cskrId);
ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, cskrSysName));
} else {
ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), chSysName));
}
/* Add subtype AABBs */ /* Add subtype AABBs */
ch.animAABBs.reserve(actor.actions.size()); ch.animAABBs.reserve(actor.actions.size());
@ -1040,8 +1045,14 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat
if (search != sub.overlayMeshes.cend()) { if (search != sub.overlayMeshes.cend()) {
hecl::SystemStringConv overlaySys(search->name); hecl::SystemStringConv overlaySys(search->name);
ch.cmdlIce = search->mesh; ch.cmdlIce = search->mesh;
if (!search->cskrId.empty()) {
hecl::SystemStringConv cskrSys(search->cskrId);
ch.cskrIce = inPath.ensureAuxInfo( ch.cskrIce = inPath.ensureAuxInfo(
fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), chSysName, overlaySys, search->cskrId)); fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), chSysName, overlaySys, cskrSys));
} else {
ch.cskrIce = inPath.ensureAuxInfo(
fmt::format(fmt(_SYS_STR("{}.{}.CSKR")), chSysName, overlaySys));
}
} }
} }
@ -1060,7 +1071,13 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat
hecl::SystemStringConv sysStr(prim.animName); hecl::SystemStringConv sysStr(prim.animName);
for (const DNAANCS::Action& act : actor.actions) { for (const DNAANCS::Action& act : actor.actions) {
if (act.name == prim.animName) { if (act.name == prim.animName) {
hecl::ProjectPath pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, act.animId)); hecl::ProjectPath pathOut;
if (!act.animId.empty()) {
hecl::SystemStringConv idSys(act.animId);
pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, idSys));
} else {
inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr));
}
prim.animId = pathOut; prim.animId = pathOut;
break; break;
} }
@ -1073,7 +1090,13 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat
ancs.animationSet.animResources.reserve(actor.actions.size()); ancs.animationSet.animResources.reserve(actor.actions.size());
for (const DNAANCS::Action& act : actor.actions) { for (const DNAANCS::Action& act : actor.actions) {
hecl::SystemStringConv sysStr(act.name); hecl::SystemStringConv sysStr(act.name);
hecl::ProjectPath pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, act.animId)); hecl::ProjectPath pathOut;
if (!act.animId.empty()) {
hecl::SystemStringConv animIdSys(act.animId);
pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animIdSys));
} else {
pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr));
}
ancs.animationSet.animResources.emplace_back(); ancs.animationSet.animResources.emplace_back();
ancs.animationSet.animResources.back().animId = pathOut; ancs.animationSet.animResources.back().animId = pathOut;

View File

@ -307,7 +307,12 @@ void SpecBase::flattenDependenciesBlend(const hecl::ProjectPath& in, std::vector
} }
hecl::SystemStringConv chSysName(sub.name); hecl::SystemStringConv chSysName(sub.name);
pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, sub.cskrId))); if (sub.cskrId != "") {
hecl::SystemStringConv cskrSysName(sub.cskrId);
pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, cskrSysName)));
} else {
pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), chSysName)));
}
const auto& arm = actor.armatures[sub.armature]; const auto& arm = actor.armatures[sub.armature];
if (hecl::IsPathBlend(arm.path)) if (hecl::IsPathBlend(arm.path))
@ -995,16 +1000,26 @@ bool SpecBase::addFileToIndex(const hecl::ProjectPath& path, athena::io::YAMLDoc
for (const auto& sub : subtypeNames) { for (const auto& sub : subtypeNames) {
hecl::SystemStringConv subName(sub.first); hecl::SystemStringConv subName(sub.first);
hecl::ProjectPath subPath;
if (!sub.second.empty()) {
hecl::SystemStringConv cskrId(sub.second); hecl::SystemStringConv cskrId(sub.second);
hecl::ProjectPath subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), subName, cskrId)); subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), subName, cskrId));
} else {
subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), subName));
}
insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath);
std::vector<std::pair<std::string, std::string>> overlayNames = ds.getSubtypeOverlayNames(sub.first); std::vector<std::pair<std::string, std::string>> overlayNames = ds.getSubtypeOverlayNames(sub.first);
for (const auto& overlay : overlayNames) { for (const auto& overlay : overlayNames) {
hecl::SystemStringConv overlaySys(overlay.first); hecl::SystemStringConv overlaySys(overlay.first);
hecl::SystemStringConv overlayCskrId(overlay.second); hecl::SystemStringConv overlayCskrId(overlay.second);
hecl::ProjectPath subPath = asGlob.ensureAuxInfo( if (!overlay.second.empty()) {
fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), subName, overlaySys, overlayCskrId)); subPath =
asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), subName, overlaySys, overlayCskrId));
} else {
subPath =
asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.{}.CSKR")), subName, overlaySys));
}
insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath);
} }
} }
@ -1013,15 +1028,26 @@ bool SpecBase::addFileToIndex(const hecl::ProjectPath& path, athena::io::YAMLDoc
for (const auto& attachment : attachmentNames) { for (const auto& attachment : attachmentNames) {
hecl::SystemStringConv attachmentSys(attachment.first); hecl::SystemStringConv attachmentSys(attachment.first);
hecl::SystemStringConv attachmentCskrId(attachment.second); hecl::SystemStringConv attachmentCskrId(attachment.second);
hecl::ProjectPath subPath = hecl::ProjectPath subPath;
if (!attachment.second.empty()) {
subPath =
asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}_{}.CSKR")), attachmentSys, attachmentCskrId)); asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}_{}.CSKR")), attachmentSys, attachmentCskrId));
} else {
subPath =
asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}.CSKR")), attachmentSys));
}
insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath);
} }
for (const auto& act : actionNames) { for (const auto& act : actionNames) {
hecl::SystemStringConv sysStr(act.first); hecl::SystemStringConv sysStr(act.first);
hecl::SystemStringConv animId(act.second); hecl::SystemStringConv animId(act.second);
hecl::ProjectPath subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animId)); hecl::ProjectPath subPath;
if (!act.second.empty()) {
subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animId));
} else {
subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr));
}
insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath);
} }
} }