/*
	Ninja Sample
	
	COPYRIGHT (C) SEGA ENTERSRISES,LTD.

	F40 Sample for SET4

	1998.4.10
*/
#include <shinobi.h>
/*#include <Nindows.h>*/

#define	OBJECT	object_F40_GTE_sh_null1_1_null1_1
#define TEXLIST texlist_F40_GTE_sh_null1_1

extern	NJS_OBJECT	OBJECT[];
extern NJS_TEXLIST TEXLIST[];

/* テクスチャの設定 */
NJS_TEXMEMLIST	tex[100];

extern NJS_MATRIX	matrix[32];
extern NJS_VERTEX_BUF	vbuf[4096];

NJS_VIEW	view;
NJS_LIGHT	light;

Sint32	xx = 0,yy = 0,zz = 0;

void njUserInit(void)
{
	/*
		njInitSystemの変わりにsbInitSystemを実行する。
	
	*/
	sbInitSystem( NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1 );

	/*
		テクスチャのワークバッファを確保する。F40では1024x128のMIPMAPなしが
		一番大きなファイルなので、これがロードできるように0x40800バイト確保
		します。（詳しいサイズについては、テクスチャドキュメントをご覧ください）
		テクスチャのワークバッファはnjLoadTextureが実行している間だけ必要なので、
		vbuf領域で代用する。（このプログラムでvbufは4096*96=0x60000バイトある)
		注意：	njInitTextureBufferで確保するバッファは32バイトアラインで
				確保してください
	*/
	njInitTextureBuffer((Sint8 *)vbuf,0x40800);

	njInitVertexBuffer( 800000, 0, 100000, 0 );

	njInitMatrix( matrix, 32 , 0);
	njInit3D( vbuf, 4096 );
	njInitView( &view );
	njCreateLight( &light, NJD_SPEC_DIR );
	njSetLightIntensity( &light, 0.5f, 2.0f, 0.5f );
	njSetView( &view );

	njInitTexture( tex,100);
	
	/*
		NINDOWS初期化 SET4から引数にポートを設定する
	
	*/
	nwInitSystem(100,NJD_PORT_A0);

	/*
		テクスチャはDG WorkShopのカレントディレクトリに
		置いてください
	
	
	*/
	njLoadTexture( TEXLIST );
	njSetTexture( TEXLIST );
	njControl3D( NJD_CONTROL_3D_CONSTANT_ATTR|NJD_CONTROL_3D_NO_CLIP_CHECK );
	njSetConstantAttr( 0xffffffff, NJD_FILTER_BILINEAR);

	njClipZ( -2.0f, -100.f );
	njSetAspect( 1.0f, 1.0f );
	
	njSetBackColor(0x00000000,0x00000000,0x000000FF);
	
}

NJS_PERIPHERAL *per,*per1;
Sint32 mode = 0;
Uint8 dd;
NJS_MATRIX m2;

Sint32 njUserMain(void)
{

	per = njGetPeripheral(NJD_PORT_B0);

	if(per->press & NJD_DGT_TA){
		mode++;
		if(mode > 55) mode=0;
	}

	if(per->press & NJD_DGT_TB){
		mode--;
		if(mode < 0) mode=55;
	}

	njMultiMatrix(NULL,&m2);
	dd++;
	njClearMatrix();
	njTranslate( NULL, 1.f, 0.f, -7.f );
	njRotateXYZ( NULL, xx,yy,zz );
	njSimpleDrawObject(OBJECT);

    njPrintC(NJM_LOCATION(0,1),"TEST SET4 .. F40");
		
	yy += 173;
	xx = -6000;

	return nwExecute();
}

void njUserExit(void)
{
	nwExitSystem();
	njExitTexture();
	sbExitSystem();
}
