changeset 40:cbe5bb9068c3

add trace mode to tree_dandy2(SceneGraph)
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Wed, 12 Jan 2011 00:01:02 +0900
parents 5484b8606e8e
children 6974c3834700
files Dandy.cc sgoex.c trace.c trace.h
diffstat 4 files changed, 100 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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");
-}
--- 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()
 {
--- 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();