# HG changeset patch # User koba # Date 1294758062 -32400 # Node ID cbe5bb9068c32a7d8acfde68dcb9dd57a78209c1 # Parent 5484b8606e8e6d32bcc729702d60a65bf11f71ae add trace mode to tree_dandy2(SceneGraph) diff -r 5484b8606e8e -r cbe5bb9068c3 Dandy.cc --- a/Dandy.cc Tue Jan 11 23:39:31 2011 +0900 +++ b/Dandy.cc Wed Jan 12 00:01:02 2011 +0900 @@ -49,7 +49,7 @@ static int gamesyokika(int gamef); static int game_pause(int); -//static char *pad_trace_file; +static char *pad_trace_file; /** * runmode: @@ -61,11 +61,10 @@ * program will run with a trace file which is generated * by capture-mode */ -int runmode; SDL_Joystick *joy; - +#define SCMP_SIZ 8 const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\ -length Number of data (default DATA_NUM (Func.h))\n\ @@ -93,7 +92,8 @@ return new Dandy(); } - +static void print_usage(); +static int get_option(int argc, char *argv[]); static int opening(int gamef); static int dandy_closing(int gamef); static int dandy_main_loop(int gamef); @@ -135,6 +135,9 @@ task_init(); task_initialize(); manager->set_TMend(TMend); + if (get_option(argc, argv)) { + print_usage(); + } return init(manager,argc, argv); } @@ -165,6 +168,47 @@ } +static void +print_usage() +{ + printf("usage: exe_file [-h|-help|--help][-capture filename][-trace filename]\n"); +} + + +static int +get_option(int argc, char *argv[]) +{ + int i; + if (argc < 2) { + return 0; + } + for (i = 0; i < argc; i++) { + if (!strncmp(argv[i], "-capture", SCMP_SIZ)) { + if (++i >= argc) { + return 1; + } + printf("Start capture mode.\n"); + pad_trace_file = argv[i]; + runmode = 1; + return 0; + } else if (!strncmp(argv[i], "-trace", SCMP_SIZ)) { + if (++i >= argc) { + return 1; + } + printf("Start trace mode.\n"); + pad_trace_file = argv[i]; + runmode = 2; + return 0; + } else if (!strncmp(argv[i], "--help", SCMP_SIZ) || + !strncmp(argv[i], "-help", SCMP_SIZ) || + !strncmp(argv[i], "-h", SCMP_SIZ)) { + return 1; + } + } + return 1; +} + + static int dandy_main_init(int gamef) { @@ -175,6 +219,9 @@ /** * timeprof があるんだけどね */ + if ((runmode == 1)||(runmode == 2)) { + pad_file_open(pad_trace_file); + } sgroot->createFromXMLfile("xml/character.xml"); sgroot->createFromXMLfile("xml/font.xml"); @@ -301,11 +348,30 @@ obj_draw(); gamef = game_pause(gamef); - if (use_keybord) { - keybord(); - } else { - Pad(joy); + switch (runmode) { + case 0: + if (use_keybord) { + keybord(); + } else { + Pad(joy); + } + break; + case 1: + if (use_keybord) { + keybord(); + } else { + Pad(joy); + } + capture_pad(); + break; + case 2: + if (!pad_file_read()) { + printf("can't trace file.\n"); + runmode = 0; + } + break; } + filpcount++; count = 0; @@ -315,6 +381,7 @@ static int dandy_closing(int gamef) { + pad_file_close(); //_______________________________________________ // SDL_mixerの後始末 @@ -335,7 +402,7 @@ tlv3[i].y = -1; } filpcount = 0; - stage = 4; + stage = 0; //for (i = 0; i < 300; i++) //enemy[i].f = FALSE; jiki.zanki = 3; @@ -788,6 +855,8 @@ } if (keys[SDLK_ESCAPE]) { + pad_file_close(); + SDL_Quit(); exit(1); //pad[0].st = 1; diff -r 5484b8606e8e -r cbe5bb9068c3 sgoex.c --- a/sgoex.c Tue Jan 11 23:39:31 2011 +0900 +++ b/sgoex.c Wed Jan 12 00:01:02 2011 +0900 @@ -404,24 +404,3 @@ pad[0].quit = 0; } } - - -void -capture_pad() -{ - fprintf(pad_fp, "%hd ", pad[0].up); - fprintf(pad_fp, "%hd ", pad[0].down); - fprintf(pad_fp, "%hd ", pad[0].right); - fprintf(pad_fp, "%hd ", pad[0].left); - fprintf(pad_fp, "%hd ", pad[0].k0); - fprintf(pad_fp, "%hd ", pad[0].k1); - fprintf(pad_fp, "%hd ", pad[0].k3); - fprintf(pad_fp, "%hd ", pad[0].k4); - fprintf(pad_fp, "%hd ", pad[0].r1); - fprintf(pad_fp, "%hd ", pad[0].r2); - fprintf(pad_fp, "%hd ", pad[0].l1); - fprintf(pad_fp, "%hd ", pad[0].st); - fprintf(pad_fp, "%hd ", pad[0].se); - - fprintf(pad_fp, "\n"); -} diff -r 5484b8606e8e -r cbe5bb9068c3 trace.c --- a/trace.c Tue Jan 11 23:39:31 2011 +0900 +++ b/trace.c Wed Jan 12 00:01:02 2011 +0900 @@ -33,6 +33,27 @@ } +void +capture_pad() +{ + fprintf(pad_fp, "%hd ", pad[0].up); + fprintf(pad_fp, "%hd ", pad[0].down); + fprintf(pad_fp, "%hd ", pad[0].right); + fprintf(pad_fp, "%hd ", pad[0].left); + fprintf(pad_fp, "%hd ", pad[0].k0); + fprintf(pad_fp, "%hd ", pad[0].k1); + fprintf(pad_fp, "%hd ", pad[0].k3); + fprintf(pad_fp, "%hd ", pad[0].k4); + fprintf(pad_fp, "%hd ", pad[0].r1); + fprintf(pad_fp, "%hd ", pad[0].r2); + fprintf(pad_fp, "%hd ", pad[0].l1); + fprintf(pad_fp, "%hd ", pad[0].st); + fprintf(pad_fp, "%hd ", pad[0].se); + + fprintf(pad_fp, "\n"); +} + + int pad_file_read() { diff -r 5484b8606e8e -r cbe5bb9068c3 trace.h --- a/trace.h Tue Jan 11 23:39:31 2011 +0900 +++ b/trace.h Wed Jan 12 00:01:02 2011 +0900 @@ -3,5 +3,6 @@ void pad_trace(int); void pad_file_open(char *f); +void capture_pad(); int pad_file_read(); void pad_file_close();