"use strict";

var	TILEWIDTH = 4;

var		Map = [
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
	[ 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
	[ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 3, 0, 0, ],
	[ 0, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 3, 6, 3, 6, 3, 0, ],
	[ 0, 3, 3, 6, 6, 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 6, 3, ],
	[ 0, 0, 3, 3, 6, 6, 6, 7, 7, 2, 2, 2, 7, 7, 2, 2, 2, 7, 7, 6, ],
	[ 0, 3, 3,10,11, 3, 3, 6, 7, 7, 2, 2, 2, 2, 2, 2, 1, 1, 7, 6, ],
	[ 0, 0, 3, 3, 3, 0, 3, 3, 3, 7, 7, 2, 2, 2, 2, 7, 7, 1, 1, 6, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 7, 7, 7, 7, 2, 7, 6, 3, 1, 3, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 6, 7, 2, 7, 6, 3, 1, 3, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 7, 7, 7, 6, 3, 1, 1, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 6, 7, 7, 7, 6, 3, 1, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 6, 6, 7, 7, 6, 3, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 6, 6, 6, 6, ],
	[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 6, 6, ],
];

function start( imf, imp )
{
	TUGames.GX.Init( "main", 640, 480 );	//	キャンバスIDと描画領域を指定してライブラリ初期化

	let		player = TUGames.GX.LoadTextureDiv( imp, 8, 8 );	//	指定されたファイルをテクスチャ画像として分割して読み込む
	let		field = TUGames.Primitive.CreateTile( TUGames.GU.Program.T2F_V3F, 20 * 15 );
	field.mTexture = TUGames.Texture.Create2p( imf );
	let		px = 300, py = 220, an = 0;
	TUGames.PF.StartLoop( 60,	//	fpsを指定してループを開始し、更新処理と描画処理を登録
	()=>{	//	更新処理
		if( TUGames.PF.IsKeyDown( 37 ) ){	px--;	an = 2;	}	//	引数で指定されたキーが押されている場合
		if( TUGames.PF.IsKeyDown( 38 ) ){	py--;	an = 6;	}	//	引数で指定されたキーが押されている場合
		if( TUGames.PF.IsKeyDown( 39 ) ){	px++;	an = 4;	}	//	引数で指定されたキーが押されている場合
		if( TUGames.PF.IsKeyDown( 40 ) ){	py++;	an = 0;	}	//	引数で指定されたキーが押されている場合
	},
	()=>{	//	描画処理
		TUGames.GX.Clear();	//	設定された背景色で画面初期化

		//	マップ描画
		let		ta = 1 / TILEWIDTH;
		for( let i = 0, my = 0; my < 15; my++ ){
			for( let mx = 0; mx < 20; mx++, i++ ){
				let	m = Map[ my ][ mx ];
				field.setRect2( TUGames.GU.BufType.TEXCOORD, i, ( m & 3 ) * ta, ( m >> 2 ) * ta, ta, ta );
				field.setRect3( TUGames.GU.BufType.POSITION, i, mx << 5, my << 5, 0, 32, 32 );
			}
		}
		field.draw();

		//	プレイヤー
		TUGames.GX.DrawTexture( player[ an | ( ( px + py ) >> 4 & 1 ) ], px, py, 1, 32, 32 );	//	指定されたテクスチャを、座標XYZへ幅高さWHにして描画

		GL.flush();	//	描画内容を画面に反映
	} );
}

window.onload = function()
{
	document.addEventListener( 'keydown', ( ev ) =>{	ev.preventDefault();	} );
	document.addEventListener( 'keyup'  , ( ev ) =>{	ev.preventDefault();	} );

	let		imf = new Image();
	imf.onload = function()
	{
		let		imp = new Image();
		imp.onload = function()
		{
			start( imf, imp );
		}
		imp.src = "../assets/player.png";
	}
	imf.src = "../assets/field.png";
}


戻る戻る back