Skip to content
Snippets Groups Projects
Commit b5c98efa authored by Tazpn's avatar Tazpn
Browse files

Slight modification so importing skeletons also bring in meshes (see storm atronach for example)

parent 8c3c7049
No related branches found
No related tags found
No related merge requests found
...@@ -182,96 +182,84 @@ bool NifImporter::DoImport() ...@@ -182,96 +182,84 @@ bool NifImporter::DoImport()
{ {
bool ok = true; bool ok = true;
NiNodeRef rootNode = root; NiNodeRef rootNode = root;
if (isBiped)
{ vector<string> importedBones;
if (useBiped){ if (!isBiped && importSkeleton && importBones)
ImportBipeds(nodes);
} else {
ImportBones(DynamicCast<NiNode>(rootNode->GetChildren()));
}
}
else
{ {
vector<string> importedBones; if (browseForSkeleton)
if (importSkeleton && importBones)
{ {
if (browseForSkeleton) TCHAR filter[64], *pfilter=filter;
{ pfilter = _tcscpy(filter, shortDescription.c_str());
TCHAR filter[64], *pfilter=filter; pfilter = _tcscat(pfilter, " (*.NIF)");
pfilter = _tcscpy(filter, shortDescription.c_str()); pfilter += strlen(pfilter);
pfilter = _tcscat(pfilter, " (*.NIF)"); *pfilter++ = '\0';
pfilter += strlen(pfilter); _tcscpy(pfilter, "*.NIF");
*pfilter++ = '\0'; pfilter += strlen(pfilter);
_tcscpy(pfilter, "*.NIF"); *pfilter++ = '\0';
pfilter += strlen(pfilter); *pfilter++ = '\0';
*pfilter++ = '\0';
*pfilter++ = '\0'; TCHAR filename[MAX_PATH];
GetFullPathName(skeleton.c_str(), _countof(filename), filename, NULL);
TCHAR filename[MAX_PATH];
GetFullPathName(skeleton.c_str(), _countof(filename), filename, NULL); OPENFILENAME ofn;
memset(&ofn, 0, sizeof(ofn));
OPENFILENAME ofn; ofn.lStructSize = sizeof(ofn);
memset(&ofn, 0, sizeof(ofn)); ofn.hwndOwner = gi->GetMAXHWnd();
ofn.lStructSize = sizeof(ofn); ofn.lpstrFilter = filter;
ofn.hwndOwner = gi->GetMAXHWnd(); ofn.lpstrFile = filename;
ofn.lpstrFilter = filter; ofn.nMaxFile = _countof(filename);
ofn.lpstrFile = filename; ofn.lpstrTitle = TEXT("Browse for Skeleton NIF...");
ofn.nMaxFile = _countof(filename); ofn.lpstrDefExt = TEXT("NIF");
ofn.lpstrTitle = TEXT("Browse for Skeleton NIF..."); ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = TEXT("NIF"); importSkeleton = GetOpenFileName(&ofn) ? true : false;
ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST; if (importSkeleton) {
importSkeleton = GetOpenFileName(&ofn) ? true : false; skeleton = filename;
if (importSkeleton) {
skeleton = filename;
}
} }
if (importSkeleton && !skeleton.empty()) { }
NifImporter skelImport(skeleton.c_str(), i, gi, suppressPrompts); if (importSkeleton && !skeleton.empty()) {
if (skelImport.isValid()) NifImporter skelImport(skeleton.c_str(), i, gi, suppressPrompts);
{ if (skelImport.isValid())
if (skelImport.useBiped){ {
skelImport.ImportBipeds(skelImport.nodes); skelImport.isBiped = true;
} else { skelImport.importBones = true;
NiNodeRef skelRoot = skelImport.root; skelImport.DoImport();
skelImport.ImportBones(DynamicCast<NiNode>(skelRoot->GetChildren())); if (!skelImport.useBiped && removeUnusedImportedBones)
if (removeUnusedImportedBones){ importedBones = GetNamesOfNodes(skelImport.nodes);
importedBones = GetNamesOfNodes(skelImport.nodes); ok = ImportMeshes(rootNode); // do we really want to import meshes on skeletons?
}
}
}
} }
} else if (hasSkeleton && useBiped && importBones) {
ImportBipeds(nodes);
} }
} else if (hasSkeleton && useBiped && importBones) {
ImportBipeds(nodes);
}
if (isValid()) { if (isValid()) {
if (importBones) { if (importBones) {
if (strmatch(rootNode->GetName(), "Scene Root")) if (strmatch(rootNode->GetName(), "Scene Root"))
ImportBones(DynamicCast<NiNode>(rootNode->GetChildren())); ImportBones(DynamicCast<NiNode>(rootNode->GetChildren()));
else else
ImportBones(rootNode); ImportBones(rootNode);
} }
ok = ImportMeshes(rootNode); ok = ImportMeshes(rootNode);
if (importSkeleton && removeUnusedImportedBones){ if (importSkeleton && removeUnusedImportedBones){
vector<string> importedNodes = GetNamesOfNodes(nodes); vector<string> importedNodes = GetNamesOfNodes(nodes);
sort(importedBones.begin(), importedBones.end()); sort(importedBones.begin(), importedBones.end());
sort(importedNodes.begin(), importedNodes.end()); sort(importedNodes.begin(), importedNodes.end());
vector<string> results; vector<string> results;
results.resize(importedBones.size()); results.resize(importedBones.size());
vector<string>::iterator end = set_difference ( vector<string>::iterator end = set_difference (
importedBones.begin(), importedBones.end(), importedBones.begin(), importedBones.end(),
importedNodes.begin(), importedNodes.end(), results.begin()); importedNodes.begin(), importedNodes.end(), results.begin());
for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){ for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){
if (INode *node = gi->GetINodeByName((*itr).c_str())){ if (INode *node = gi->GetINodeByName((*itr).c_str())){
node->Delete(0, TRUE); node->Delete(0, TRUE);
}
} }
} }
} }
} }
// Kick of animation import // Kick of animation import
ImportAnimation(); ImportAnimation();
return true; return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment