view Test.cc @ 33:9a5300cedb14

add Test
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 May 2011 18:52:56 +0900
parents
children
line wrap: on
line source

#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 */