view webGL/dandy/resources/Player.js @ 11:680b5b0cd1e4

upload
author NOBUYASU Oshiro
date Mon, 12 Jul 2010 08:01:12 +0900
parents 03b67cd2bde7
children 61febc94fa62
line wrap: on
line source

rswait = 0;

function Pad()
{
    this.up=0;
    this.down=0;
    this.right=0;
    this.left=0;
    this.count=0;
    this.state=0;
    this.k0=0;
    this.k1=0;
    this.k2=0;
    this.k3=0;
    this.k4=0;
    this.r2=0;
    this.r1=0;
    this.r2=0;
    this.l1=0;
    this.l2=0;
    this.l3=0;
    this.se=0;
    this.st=0;

    //勝手につけた
    this.quit=0;
    this.start=0;
    return this;
}

function makePlayer( object )
{
    this.x = 100;
    this.y = 100;
    this.z = 10;
    this.dx = 0;
    this.dy = 0;
    this.scale = 1.0;
    this.muteki = 120;
    this.bf = true;
    this.zanki = 3;
    this.point = 0;
    this.ccount = 0;
    this.idle = object["player_idle"];
    this.rightmove = object["player_rightmove"];
    this.leftmove = object["player_leftmove"];
    this.turntoright = object["player_turntoright"];
    this.turntoleft = object["player_turntoleft"];
    this.image = this.idle;
    this.w = this.image.w;
    this.h = this.image.h;
    return this;
}


function drawPlayer(ctx, jiki)
{
    // setup VBOs
    ctx.enableVertexAttribArray(0);
    ctx.enableVertexAttribArray(1);
    ctx.enableVertexAttribArray(2);

    ctx.bindBuffer(ctx.ARRAY_BUFFER, jiki.image.vertexObject);
    ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ARRAY_BUFFER, jiki.image.normalObject);
    ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ARRAY_BUFFER, jiki.image.texCoordObject);
    ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, jiki.image.indexObject);

    // generate the model-view matrix
    var mvMatrix = new CanvasMatrix4();
    mvMatrix.scale(jiki.scale, jiki.scale, jiki.scale);
    //    mvMatrix.rotate(180, 1,0,0);
    mvMatrix.translate(jiki.x, jiki.y, jiki.z);

    // construct the normal matrix from the model-view matrix
    var normalMatrix = new CanvasMatrix4(mvMatrix);
    normalMatrix.invert();
    normalMatrix.transpose();
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false, normalMatrix.getAsWebGLFloatArray());
    
    // construct the model-view * projection matrix
    var mvpMatrix = new CanvasMatrix4(mvMatrix);
    mvpMatrix.multRight(ctx.perspectiveMatrix);
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false, mvpMatrix.getAsWebGLFloatArray());


    ctx.bindTexture(ctx.TEXTURE_2D, jiki.image.texture);
    ctx.drawElements(ctx.TRIANGLES, jiki.image.numIndices, ctx.UNSIGNED_SHORT, 0);
}


function Player(ctx, jiki, pad, ortho )
{



    /*自機無敵計算*/
    /*
    if(jiki.muteki > 0 && jiki.bf == true){
	cout++;
	drawPlayer(ctx, jiki);
	jiki.muteki--;
    }
    */

    
    pad.right = Math.min(pad.right, 0.7);
    pad.left = Math.min(pad.left, 0.7);
    pad.up = Math.min(pad.up, 0.7);
    pad.down = Math.min(pad.down, 0.7);

    /*コントローラー上限値----------------------*/
    jiki.x += pad.right;
    jiki.x -= pad.left;
    jiki.y -= pad.up;
    jiki.y += pad.down;

    /*自機の動き--------------------------------*/
    jiki.x = Math.min(jiki.x, ortho.right - jiki.w/2);
    jiki.x = Math.max(jiki.x, ortho.left + jiki.w/2);
    jiki.y = Math.min(jiki.y, ortho.bottom - jiki.w/2);
    jiki.y = Math.max(jiki.y, ortho.top + jiki.w/2);


    if( pad.count == 1) pad.state=0;
    if( pad.count > 0) pad.state=1;
    if( pad.count > 10 ) pad.state=2;

    if( pad.state == 0 ) jiki.image  = jiki.idle;
    if( pad.state == 1 ) {
	if( pad.right > 0 ) jiki.image = jiki.turntoright;
        if( pad.left > 0 ) jiki.image  = jiki.turntoleft;
    }
    if( pad.state == 2 ) {
	if( pad.right > 0 ) jiki.image = jiki.rightmove;
        if( pad.left > 0 ) jiki.image  = jiki.leftmove;
    }
    //分かりやすいように横幅と縦幅はjiki.w,jiki.hに直でいれておく
    jiki.w = jiki.image.w;
    jiki.h = jiki.image.h;


    //    if(jiki.muteki < 5) alert("jiki.muteki "+jiki.muteki);
    if(jiki.bf == true) drawPlayer(ctx, jiki);//自機の描画(一先ずここでしておく)
    if(jiki.muteki > 0) jiki.muteki--;


    //玉レベル1登録
    if ((pad.k4 % 3 == 1) && (pad.k3 % 3 == 0)){
 	pad.k4 = 1;
	audioShoot && audioShoot.play();//このaudioは試験使用中.global宣言されてる奴(htmlファイルのなかで)


	tama_lv1_end++;

	//	if(tama_lv1_end > 19) tama_lv1_end = 0;
	var i = tama_lv1_end;
	//     	if(tama_lv1_end > 50) alert(tama_lv1_end);

	var tama = new Tama1();
	tama.x = jiki.x;
	tama.y = jiki.y;
	tama.r = 1;
	tama.l = 1;
	tama_lv1[i] = tama;
    }

    //玉レベル1表示
    for (i = 0; i < tama_lv1_end + 1; i++) 
	{
	    tama_lv1[i].y -= 10;

		
	    if (tama_lv1[i].r == 1) {
		tama_lv1[i].x -= 5;//右に5ずらす
		PutSpriteBullet(ctx, tama_lv1[i], bullets[1]);
		tama_lv1[i].x += 5;//ずらした分戻す
	    }
	    if (tama_lv1[i].l == 1) {
		tama_lv1[i].x += 5;//左に5ずらす
		PutSpriteBullet(ctx, tama_lv1[i], bullets[1]);
		tama_lv1[i].x -= 5;//ずらし分を戻す
	    }
	    if (tama_lv1[i].y < ortho.top) {
		if(tama_lv1_end == i){
		    tama_lv1_end--;
		    break;
		}
		if(tama_lv1_end > i){
		    tama_lv1[i] = tama_lv1[tama_lv1_end];
		    tama_lv1_end--;
		    i--;
		}

	    }

	}

}


function PutSpriteBullet( ctx, tama, glObj)
{

    // setup VBOs
    ctx.enableVertexAttribArray(0);
    ctx.enableVertexAttribArray(1);
    ctx.enableVertexAttribArray(2);
				
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
    ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
    ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
    ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
				
    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);

    // generate the model-view matrix
    var mvMatrix = new CanvasMatrix4();
    mvMatrix.scale(1, 1, 1);
    mvMatrix.translate(tama.x,tama.y,10);
    
    // construct the normal matrix from the model-view matrix
    var normalMatrix = new CanvasMatrix4(mvMatrix);
    normalMatrix.invert();
    normalMatrix.transpose();
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false, normalMatrix.getAsWebGLFloatArray());
    
    // construct the model-view * projection matrix
    var mvpMatrix = new CanvasMatrix4(mvMatrix);
    mvpMatrix.multRight(ctx.perspectiveMatrix);
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false, mvpMatrix.getAsWebGLFloatArray());
    
    ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
    ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
}