/**********************************/ /*** SpongeBob 3d Anim Creator ***/ /**********************************/ #include "stdio.h" #include #include #include #include #include #include #include "MkAnim3d.h" using namespace std; int QuatCount=0; //*************************************************************************** char * CycleCommands(char *String,int Num) { //char Text[256],*TextPtr; //int Count; if (String[0]=='-' || String[0]=='/') { GString TpStr; switch (String[1]) { // Switches case 'o': OutStr = CheckFileString(String); break; case 'd': DebugOn =true; break; case 's': TpStr= CheckFileString(String); Scale=atof(TpStr); break; default: GObject::Error(ERR_FATAL,"Unknown switch %s",String); break; } } else { GString UpperName(String); UpperName.Upper(); MyFiles.AddFile(UpperName); } return(String); } //*************************************************************************** //*************************************************************************** //*************************************************************************** void CMkAnim3d::Add(GString const &Filename) { CScene Scene; int ThisBoneCount; printf("%s\n",Filename); Scene.Load(Filename); ThisBoneCount=Scene.GetPruneTreeSize()-2; // Check Skeleton if (BoneCount==-1) { BoneCount=ThisBoneCount; } else { if (BoneCount!=ThisBoneCount) { GObject::Error(ERR_FATAL,"Invalid skeleton\n"); } } // Process Anim sAnim ThisAnim; ThisAnim.FrameCount=ProcessSkelMove(Scene,ThisAnim,1); ProcessSkelAnim(Scene,ThisAnim,1); AnimList.push_back(ThisAnim); } //*************************************************************************** int CMkAnim3d::ProcessSkelMove(CScene &Scene,sAnim &ThisAnim,int Idx) { CNode &ThisNode=Scene.GetNode(Idx); vector const &NodeAnim=ThisNode.GetAnim(); int FrameCount=NodeAnim.size(); vector &Move=ThisAnim.Move; Move.resize(FrameCount); for (int i=0; i const &NodeAnim=ThisNode.GetAnim(); int FrameCount=NodeAnim.size(); if (!ThisNode.Pts.size()) // Dont export Skin as bone { sBoneAnim FrameList; FrameList.Idx.resize(FrameCount); for (int i=0; i [ .. ] [ switches.. ]\n"); printf("Switches:\n"); printf(" -o:[FILE] Set output File\n"); printf(" -d: Enable Debug output\n"); printf(" -s: Set Scale\n"); GObject::Error(ERR_FATAL,ErrStr); } //*************************************************************************** int main (int argc, char *argv[]) { CMkAnim3d AnimBank; CommandLine(argc,argv,CycleCommands); if (OutStr.Empty()) Usage("No Output File Set\n"); vector const &Files = MyFiles.GetFileInfoVector(); for (int Loop=0; Loop