changeset 33:9a5300cedb14

add Test
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 May 2011 18:52:56 +0900
parents 8abcc221bbac
children b65f6fc9c84f
files Makefile SgoexCerium.cc Test.cc Test.h
diffstat 4 files changed, 425 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Sat May 21 15:15:26 2011 +0900
+++ b/Makefile	Sat May 21 18:52:56 2011 +0900
@@ -8,7 +8,7 @@
 LIBS	+=  `sdl-config --libs`,-framework,OpenGL -lSDL_mixer -lSDL_image `xml2-config --libs`
 LIBS += -lCerium -lFifoManager
 
-TARGET = demo dandy
+TARGET = demo dandy test1
 OBJS    =  Character.o Bom.o tokuten.o collision.o count2.o Character_state.o schedule3.o tama2.o syokika.o Ss.o sound.o  profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o 
 
 all: $(TARGET)
@@ -22,8 +22,11 @@
 dandy: $(OBJS) Dandy.o SgoexCerium.o
 	$(CC) $(ABI) -o $@ $(OBJS) Dandy.o SgoexCerium.o $(LIBS)
 
+test1: $(OBJS) Test.o SgoexCerium.o
+	$(CC) $(ABI) -o $@ $(OBJS) Test.o SgoexCerium.o $(LIBS)
+
 clean:
-	rm -f $(TARGET) $(OBJS) main.o sgoex.o
+	rm -f $(TARGET) $(OBJS) main.o sgoex.o Dandy.o  SgoexCerium.o Test.o
 
 .c.o:
 	$(CC) $(CFLAGS) $(INCLUDES) -c $<
--- a/SgoexCerium.cc	Sat May 21 15:15:26 2011 +0900
+++ b/SgoexCerium.cc	Sat May 21 18:52:56 2011 +0900
@@ -1,7 +1,13 @@
-#include "Dandy.h"
+
 #include "matrix_calc.h"
+#include "TaskManager.h"
+#include "SceneGraph.h"
+#include "Application.h"
+
 #include "SgoexCerium.h"
 
+extern Viewer *droot;
+
 static SceneGraphPtr root;
 
 void
@@ -87,7 +93,7 @@
 void
 PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle)
 {
- if (1) {
+ if (0) {
     PutSprite(1, x, y, number);
     return;
  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Test.cc	Sat May 21 18:52:56 2011 +0900
@@ -0,0 +1,391 @@
+#include "Test.h"
+#include "SgoexCerium.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "tree_controll.h"
+#include "xml.h"
+#include "profile.h"
+#include "syokika.h"
+#include "sankaku.h"
+#include "sgoex.h"
+#include "sound.h"
+#include "bool.h"
+#include "bom.h"
+#include "count2.h"
+#include "tokuten.h"
+#include "schedule.h"
+#include "tama.h"
+#include "debug.h"
+#include "trace.h"
+#include "LoadSprite.h"
+#include <SDL_mixer.h>
+#include "error.h"
+#include "matrix_calc.h"
+
+#include "Character.h"
+#include "Character_state.h"
+
+static int use_keybord = 0;
+
+static int i;
+
+static int test_mode = 0;
+static const char *test_object  = "" ;
+
+//static SDL_Surface *screen;
+// static Uint32 background;
+// static char *pad_trace_file;
+
+extern void schedule();
+extern void tokuten();
+extern void Pad();
+extern void keybord();
+static int gamesyokika(int gamef);
+//static char *pad_trace_file;
+
+/**
+ * runmode:
+ * 0 - normal game                                                         
+ * 1 - capture mode                                                        
+ *     program will capture all pad traces on a play and               
+ *     dump it into a file                                             
+ * 2 - trace mode                                                          
+ *     program will run with a trace file which is generated           
+ *     by capture-mode
+ */
+int runmode;
+
+SDL_Joystick *joy;
+
+
+
+const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\
+  -length  Number of data (default DATA_NUM (Func.h))\n\
+  -count   Number of task (default 1)\n";
+
+Viewer *droot;
+
+static    int screen_w;
+static    int screen_h;
+
+MainLoopPtr
+Test::init(Viewer *sgroot_, int w, int h)
+{
+    screen_w = w;
+    screen_h = h;
+    droot = sgroot_;
+    return droot;
+}
+
+Application *
+application() {
+    return new Test();
+}
+
+
+static int opening(int gamef);
+static int dandy_closing(int gamef);
+static int dandy_main_loop(int gamef);
+static int dandy_main_init(int gamef);
+extern int init(TaskManager *manager, int argc, char *argv[]);
+extern void task_initialize();
+static void TMend(TaskManager *manager);
+
+bool 
+Test::app_loop(Viewer *viewer){
+    // don't use allExecute
+    return 0;
+};
+
+static int gamef = 0;
+
+HTaskPtr 
+Test::application_task(HTaskPtr next, Viewer* viewer){
+    // printf("gamef = %d\n",gamef);
+    switch (gamef) {
+    case 0:    gamef= dandy_main_init(gamef); break;
+    case 1:    gamef= gamesyokika(gamef); break;
+    case 2:    gamef= opening(gamef); break;
+    case 3:    gamef= dandy_main_loop(gamef); break;
+    case 4:    gamef= dandy_closing(gamef); break;
+    }
+    return next;
+}; 
+
+
+
+
+int
+TMmain(TaskManager *manager,int argc, char *argv[])
+{
+    for(int i = 1; i<argc ; i++) {
+	if (strcmp(argv[i],"-t")) {
+	    test_mode=1;
+	    if (i+1<argc && argv[i+1]) {
+		i++;
+		test_object=argv[i];
+	    }
+	}
+    }
+
+    task_initialize();
+    manager->set_TMend(TMend);
+
+    return init(manager,argc, argv);
+}
+
+void
+TMend(TaskManager *manager)
+{
+    printf("game end\n");
+}
+
+static int light_sysswitch = 0;
+static int light_num = 4;
+
+static void 
+LightSysSwitch(Viewer *sgroot) {
+  if (light_sysswitch == 1) {
+    sgroot->OnLightSysSwitch();
+    for (int i = 0; i < light_num; i++) {
+        SceneGraphPtr light = sgroot->getLight(i);
+        sgroot->OnLightSwitch(i);
+        light->xyz[0] = screen_w / 2;
+        light->xyz[1] = screen_h / 2;
+        light->xyz[2] = -100;
+    }
+  } else if (light_sysswitch == 0) {
+    sgroot->OffLightSysSwitch();
+  }
+}
+
+
+static int 
+dandy_main_init(int gamef)
+{
+    //Timeprof timeprof_move;
+    //timeprof_move = timeprof_new();
+    dbg_init("/dev/stdout");
+
+    /**
+     * timeprof があるんだけどね
+     */
+
+    droot->createFromXMLfile("xml/character.xml");
+    droot->createFromXMLfile("xml/font.xml");
+    droot->createFromXMLfile("xml/effect.xml");
+    droot->createFromXMLfile("xml/boss.xml");
+
+    LightSysSwitch(droot);
+
+
+    init_sprite(0,0,0,0);
+
+    __debug("syokikaが呼びだされました\n");
+    joy=SDL_JoystickOpen(0);
+    if(!joy) {
+	fprintf(stderr,"failed to open joystick 0\n");
+	use_keybord = 1;
+    }
+
+    /**
+     * sound.c に移しました
+     * 代わりに InitSdlMixer(void); を使います。
+     * まあ中身一緒なんだけどね
+     */
+    /**
+      if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) {
+        fprintf(stderr,"failed to initialize SDL_mixer.\n");
+        SDL_Quit();
+        exit(-1);
+      }
+    */
+
+    // SDL_mixer とかいろいろ初期化
+    // もし Init に失敗したら
+    // 以後の Mixer 関連の関数を呼び出しても
+    // 中では何も行われないとかいう小細工を入れました。
+    InitSdlMixer();
+
+    // 音楽ファイルの読み込み
+    LoadSdlMixer();
+
+    // ボリューム調整
+    InitVolume();
+	
+    // 音出しテスト
+    PlaySdlMixer(-1, BGM);
+
+    if(!(init_chara_list(1024))){
+	__debug("failed to init_chara_list\n");
+    }
+
+    __debug("finished init_chara_list\n");
+
+    return 1;
+}
+
+
+static int
+dandy_main_loop(int gamef)
+{
+	
+
+	if ((pad[0].l1 != 0) && (pad[0].r1 != 0) &&
+	    (pad[0].l2 != 0) && (pad[0].r2 != 0)) {
+	    gamef = gamesyokika(gamef);
+	}
+
+	if (pad[0].quit != 0) {
+	    gamef = 4;
+	}
+	flip();
+
+	//SDL_FillRect(screen, NULL, background);
+    
+	enemyfaste = count;
+    
+	// timeprof_begin(timeprof_move);
+	//Move(); //enemy move
+	// timeprof_end(timeprof_move);
+	asteroidi = 0;
+	//charpatern();
+	//bosguage();
+
+	count++;
+	PutSprite(count++, jiki.x, jiki.y,PLAYER_LEFTMOVE );
+	PutSprite(count++, jiki.x, jiki.y,PLAYER_TURNTOLEFT );
+	PutSprite(count++, jiki.x, jiki.y,PLAYER_IDLE);
+	PutSprite(count++, jiki.x, jiki.y,PLAYER_TURNTORIGHT );
+	PutSprite(count++, jiki.x, jiki.y,PLAYER_RIGHTMOVE);
+
+
+	tokuten();
+    
+	count++;
+	//PutSprite(count, 0, 960 - 96, 10);
+	/*インフレゲージ */
+	count++;
+	//PutSprite(count, 0, 0, 48);
+
+	obj_draw();
+
+	if (use_keybord) {
+	    keybord();
+	} else {
+	    Pad(joy);
+	}
+	filpcount++;
+	count = 0;
+
+	return gamef;
+}
+
+static int
+dandy_closing(int gamef)
+{
+
+    //_______________________________________________
+    // SDL_mixerの後始末
+    Mix_CloseAudio();
+    Mix_HaltMusic();
+    FreeSdlMixer() ;
+    //_______________________________________________
+    return 0;
+}
+
+
+static int
+gamesyokika(int gamef)
+{
+    laser_lv3[0].r = 62;
+    laser_lv3[0].r = 62;
+    for (i = 0; i < 3; i++) {
+	tlv3[i].y = -1;
+    }
+    filpcount = 0;
+    stage = 0;
+    //for (i = 0; i < 300; i++)
+    //enemy[i].f = FALSE;
+    jiki.zanki = 3;
+    jiki.x = 60;
+    jiki.y = 200;
+    jiki.ch = 3;
+    jiki.point = 0;
+    jiki.bf = FALSE;
+    jiki.muteki = 120;
+    enemycount = 0;
+    lg.stg = 4096;
+    pg.stg = 4096;
+    infg.stg = 0;
+    infg_level = 0;
+    //kyeenemyno = -1;
+    fastebos = 0;
+    jiki.ccount = 99;
+    p_extend = 200000;
+    pad[0].up=0;
+    pad[0].down=0;
+    pad[0].right=0;
+    pad[0].left=0;
+    pad[0].st=0;
+    pad[0].se=0;
+
+    SoundStop();
+    SoundPlay(7);
+    gamef =  2;
+    flip();  
+    return gamef;
+}
+
+static int
+opening(int gamef)
+{
+    if(use_keybord == 1) {
+	keybord();
+    } else {
+	Pad(joy);
+    }
+
+    count = 1;
+
+    PutSprite(count, 700, 480, 53); //  put `push start' string on screen.  
+    count++;
+    PutSprite(count, 224, 776, 119); //  put `super dandy'                   
+    count++;
+    //    PutSprite(count, 200, 64, 190);
+    //    PutSpriteEx(count, 8192, 8192, 0);
+    PutSpriteEx(190, 800, 264, 2, 2, 5);
+    count++;
+    PutSprite(count, 396, 432, 191);
+    //PutSpriteEx(count, 8192, 8192, 0);
+    count++;
+    PutSprite(count, 640, 640, 192);
+    //PutSpriteEx(count, 8192, 8192, 0);
+
+    if (pad[0].st > 1) {
+	jiki.bf = TRUE;
+	
+	//CdPlay(1,&cdp[0],0);                                          
+	SoundStop();
+	SoundPlay(0);
+
+	gamef = 3;
+	pad[0].st = 1;
+    } else if ((pad[0].se > 0) && (pad[0].st > 0)) {
+	gamef = 2;
+    }
+    flip();  
+    return gamef;
+}
+
+
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Test.h	Sat May 21 18:52:56 2011 +0900
@@ -0,0 +1,21 @@
+#ifndef INCLUDE_TEST_H
+#define INCLUDE_TEST_H
+
+#include "TaskManager.h"
+#include "SceneGraph.h"
+#include "Application.h"
+#include "MainLoop.h"
+#include "Func.h"
+
+class Test : public Application {
+    bool app_loop(Viewer *viewer);
+    HTaskPtr application_task(HTaskPtr next, Viewer* viewer);
+    MainLoopPtr init(Viewer *viewer, int w, int h);
+};
+
+extern Viewer *droot;
+
+typedef void (*move)(SceneGraphPtr node, void *sgroot_, int w, int h);
+typedef void (*coll)(SceneGraphPtr node, void *sgroot_, int w, int h, SceneGraphPtr tree);
+
+#endif