/**********************************/ /*** SpongeBob 3d Anim Creator ***/ /**********************************/ #include "stdio.h" #include #include #include #include #include #include #include #include "MkAnim3d.h" using namespace std; int QuatCount=0; /* buttbounceend.gin buttbouncestart.gin deathbackwards.gin deathdry.gin deathfall.gin deathforwards.gin deathspin.gin deathtar.gin electricshock.gin electricshockend.gin electricshockstart.gin faceback.gin facefront.gin fall.gin getup.gin getuprun.gin hitground.gin hover.gin hoverend.gin hoverstart.gin idlebreathe.gin idlehoola.gin idlelook.gin idlewigglearm.gin jumpend.gin karate.gin knockback.gin knockforward.gin run.gin runjumpend.gin runjumpstart.gin runstart.gin runstop.gin soakup.gin talk01.gin talk02.gin talk03.gin talk04.gin teeterback.gin teeterfront.gin */ /* duff anims deathfall.gin runjumpend.gin runjumpstart.gin */ //*************************************************************************** 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; case 'i': IncludeFile= CheckFileString(String); 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; GFName Name=Filename; printf("%s\t",Name.File()); Scene.Load(Filename); // Process Anim sAnim ThisAnim; ThisAnim.Name=Name.File(); ThisAnim.Name.Upper(); ThisAnim.FrameCount=ProcessSkelMove(Scene,ThisAnim,1); ProcessSkelAnim(Scene,ThisAnim,1); AnimList.push_back(ThisAnim); ThisBoneCount=ThisAnim.BoneAnim.size(); printf("\t(%i Bones, %i Frames)\n",ThisBoneCount,ThisAnim.FrameCount); // Check Skeleton if (BoneCount==-1) { BoneCount=ThisBoneCount; } else { if (BoneCount!=ThisBoneCount) { GObject::Error(ERR_FATAL,"Invalid skeleton\n"); } } } //*************************************************************************** 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 if (!ThisNode.GetTris().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