// // SAMPLE TOD ANIMATION PROGRAM // // INCLUDE FILES //--------------- #include #include #include "pad.h" #include "tod.h" /* definition for TOD functions */ #include "IDLists.h" /* TMD ID list */ #include "graphics.h" #include "addrs.h" // DEFINES //------------ // PROTOS //-------- void UpdateWorld(); void RenderWorld(); long ProcessInput(); // GLOBALS //---------- u_long pad; // For controller GsRVIEW2 view; // For viewing LinkObjectStruct theModel; // The animated model ObjectStruct theFloor; // The floor model ////////////////////////////////////////////////////////////////////////////////// void UpdateWorld() { } void RenderWorld() { RenderPrepare(); DrawObject(&theFloor); DrawObjectLink(theModel.objs); RenderFinish(); } long ProcessInput() { static int camera=0; static int pressed=0; pad = PadRead(); if(pressed==0) { if((pad & PADRright) > 0) { ResetAnim(&theModel,0); } if((pad & PADRleft) > 0) { ResetAnim(&theModel,0); } if((pad & PADRdown) > 0) { NextFrame(&theModel,TRUE); } if((pad & PADRup) > 0) { ResetAnim(&theModel,0); } if ((pad & PADo)>0){ } if((pad & PADLleft)>0) { camera--; if(camera<0) camera = 7; pressed=1; } if ((pad & PADLright)>0) { camera++; if(camera>7) camera = 0; pressed=1; } if ((pad & PADLdown)>0){} if ((pad & PADLup)>0){} if ((pad & PADh)>0){} if ((pad & PADk)>0) { return FALSE; } } if(pressed==1) { if(!(pad & PADLleft) && !(pad & PADLright)) { pressed=0; } } switch(camera) { case 0:InitialiseView(&view,100,0,0,-2000,4000,0,0,0);break; case 1:InitialiseView(&view,100,0,0,-2000,4000,theModel.obj_coord[0].coord.t[0],theModel.obj_coord[0].coord.t[1],theModel.obj_coord[0].coord.t[2]);break; case 2:InitialiseView(&view,100,0,0,-4000,-15000,0,0,0);break; case 3:InitialiseView(&view,100,0,0,-4000,-15000,theModel.obj_coord[0].coord.t[0],theModel.obj_coord[0].coord.t[1],theModel.obj_coord[0].coord.t[2]);break; case 4:InitialiseView(&view,100,0,-2000,-4000,-5000,0,0,0);break; case 5:InitialiseView(&view,100,0,-2000,-4000,-5000,theModel.obj_coord[0].coord.t[0],theModel.obj_coord[0].coord.t[1],theModel.obj_coord[0].coord.t[2]);break; case 6:InitialiseView(&view,100,0,-4000,-4000,-8000,0,0,0);break; case 7:InitialiseView(&view,100,0,-4000,-4000,-8000,theModel.obj_coord[0].coord.t[0],theModel.obj_coord[0].coord.t[1],theModel.obj_coord[0].coord.t[2]);break; case 8:InitialiseView(&view,100,0,-14000,-4000,-18000,0,0,0);break; case 9:InitialiseView(&view,100,0,-14000,-4000,-18000,theModel.obj_coord[0].coord.t[0],theModel.obj_coord[0].coord.t[1],theModel.obj_coord[0].coord.t[2]);break; } GsSetRefView2(&view); return TRUE; } // Main routine //-------------- void main() { long running=TRUE; PadInit(); Initialise3DGraphics(); InitialiseView(&view,100,0,0,-2000,-4000,0,0,0); InitialiseLights(); LoadTextures(); InitialiseModel(&theFloor,0,0,0,(u_long *)FLOOR_TMD); InitialiseModelLink(&theModel,17,1,0,0,0,(u_long *)DWARF_TMD); initTod(&theModel,0,(u_long *)JUMP_TOD); //Set animation to first frame ResetAnim(&theModel,0); while(running) { if(ProcessInput() == FALSE) running = FALSE; UpdateWorld(); RenderWorld(); } ResetGraph(3); }