view webGL/dandy/resources/Player.js~ @ 7:4343c1feedb5

upload boss.js xmlAlpha file
author NOBUYASU Oshiro
date Mon, 05 Jul 2010 17:19:51 +0900
parents 881478004f18
children 03b67cd2bde7
line wrap: on
line source

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;
    return this;
}

function makePlayer( object )
{
    this.x = 0;
    this.y = 0;
    this.z = 10;
    this.scale = 1.0;
    this.dx = 0;
    this.dy = 0;
    this.scale = 1.0;
    this.muteki = 120;
    this.bf = true;
    this.zanki = 3;
    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, 0,0,1);
    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 )
{
    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.x = Math.max(jiki.x, ortho.left);
    jiki.y = Math.min(jiki.y, ortho.top);
    jiki.y = Math.max(jiki.y, ortho.bottom);    


    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.bf == true) drawPlayer(ctx, jiki);//自機の描画(一先ずここでしておく)


    //玉レベル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(0,0,0);
    mvMatrix.rotate(180, 0,0,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);
}