view webGL/dandy/resources/Player.js @ 24:7c1ff1927da3

enemy.js character.js Player.js
author NOBUYASU Oshiro
date Tue, 26 Oct 2010 08:41:45 +0900
parents fac103fcf60d
children
line wrap: on
line source

lg = new Object();
lg.stg = 0;//レーザーゲージ
pg = new Object();
pg.stg = 0;
infg = new Object();
infg.stg = 0;
infg_level = 0;
p_extend = 0;
fastebos = 0;
se_key = [-1,-1,-1,-1,-1,-1];

rswait = 0;

function Pad()
{
    this.up=0;
    this.down=0;
    this.right=0;
    this.left=0;
    this.count=0;
    this.ccount=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.ch = 0;
    this.dx = 0;
    this.dy = 0;
    this.scale = 1.0;
    this.muteki = 120;
    this.bf = true;
    this.zanki = 3;
    this.point = 0;
    this.count = 0;
    this.ccount = 0;
    this.idle = object["player_idle"];
    this.rightmove = object["player_rightmove"];
    this.leftmove = object["player_leftmove"];
    this.turntoright = object["player_turnright"];
    this.turntoleft = object["player_turnleft"];
    this.image = this.idle;
    this.w = this.image.w;
    this.h = this.image.h;
	this.vertexObject =  new Object();
	this.normalObject =  new Object();
	this.texCoordObject = new Object();
	this.indexObject = new Object();
	this.numIndices = new Object();
    this.texture=new Object();
    
    return this;
}



function loadImageJiki( jiki, Image)
{
	jiki.vertexObject = Image.vertexObject;
	jiki.normalObject = Image.normalObject;
	jiki.texCoordObject = Image.texCoordObject;
	jiki.indexObject = Image.indexObject;
	jiki.numIndices = Image.numIndices;
	jiki.texture = Image.texture;
}



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



    /*自機無敵計算*/
    /*
    if(jiki.muteki > 0 && jiki.bf == true){
	cout++;
	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 ) 	loadImageJiki(jiki, jiki.idle);
    if( pad.state == 1 ) {
	if( pad.right > 0 ) loadImageJiki(jiki, jiki.turntoright);
        if( pad.left > 0 )loadImageJiki(jiki, jiki.turntoleft);
    }
    if( pad.state == 2 ) {
	if( pad.right > 0 ) loadImageJiki(jiki, jiki.rightmove);
        if( pad.left > 0 ) loadImageJiki(jiki, 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.muteki > 0) jiki.muteki--;
    if(jiki.bf == true) {
	PutSpriteF(ctx, jiki.x, jiki.y, jiki.scale, jiki);
    } else {

	/* 自機が復活するまでは玉は撃たせない  */
	pad.k4 = 0;
	pad.k3 = 0;
	pad.k1 = 0;
	pad.k0 = 0;
    }
    


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

	tama_lv1_end++;

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

	tama = new tama1();
	tama.x = jiki.x;
	tama.y = jiki.y;
	tama.r = 1;
	tama.l = 1;
	tama.scale = 1.0; //玉がでかいので調整
	tama_lv1[i] = tama;
    }

    /*玉レベル2登録--------------------------------------*/
    if((pad.k3 % 3 == 1) && (pad.k4 == 0) && (pg.stg > 64)) {
	    //	    PlaySdlMixer(0, SHOT_B);
	SoundPlay(2);
	    
	    //	    se_key[1] = SsUtKeyOn(vab[SHOT_B], 0, 0, 65, 0, 80, 80);
	    
	    pad.k3 = 1;
	    tama_lv2_end++;
	    i = tama_lv2_end;
	    
	    tama = new tama2();
	    tama.x = jiki.x;
	    tama.y = jiki.y;
	    tama.rr = 1;
	    tama.sr = 1;
	    tama.sl = 1;
	    tama.ll = 1;
	    tama.scale = 1.0;//少し画像がでかいので調整
	    
	    tama_lv2[i] = tama;
	    
	    pg.stg -= 64;
	}

    /*押してないときの玉ゲージ回復-------------------*/
    if ((pad.k3 == 0) && (pad.k4 == 0))
	if(pg.stg <= MAXP)
	    pg.stg += 4;

    //玉レベル1表示
    for (i = 0; i < tama_lv1_end + 1; i++) 
	{
	    tama_lv1[i].y -= 10;
	    if (tama_lv1[i].r == 1) {
		PutSpriteF(ctx, tama_lv1[i].x+5, tama_lv1[i].y, tama_lv1[i].scale, bullets[2]);
	    }
	    if (tama_lv1[i].l == 1) {
		PutSpriteF(ctx, tama_lv1[i].x-5, tama_lv1[i].y, tama_lv1[i].scale, bullets[2]);
	    }
	    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--;
		}

	    }

	}
    
    /*玉レベル2表示--------------------------*/
    for(i = 0; i < tama_lv2_end + 1; i++) {
	tama_lv2[i].y -= 10;
	if(tama_lv2[i].rr == 1) {
	    count++;
	    PutSpriteF(ctx, tama_lv2[i].x+10, tama_lv2[i].y, tama_lv2[i].scale, bullets[4]);
	}
	if(tama_lv2[i].sr == 1) {
	    count++;
	    PutSpriteF(ctx, tama_lv2[i].x+5, tama_lv2[i].y, tama_lv2[i].scale, bullets[4]);
	}
	if(tama_lv2[i].sl == 1) {
	    count++;
	    PutSpriteF(ctx, tama_lv2[i].x-5, tama_lv2[i].y, tama_lv2[i].scale, bullets[4]);
	}
	if(tama_lv2[i].ll == 1) {
	    count++;
	    PutSpriteF(ctx, tama_lv2[i].x-10, tama_lv2[i].y, tama_lv2[i].scale, bullets[4]);
	}
	if(tama_lv2[i].y < 0) {
	    if(tama_lv2_end == i) {
		tama_lv2_end--;
		break;
	    }
	    if(tama_lv2_end > i) {
		tama_lv2[i] = tama_lv2[tama_lv2_end];
		tama_lv2_end--;
		i--;
	    }
	}
    }


    /* 照準コントロール--------------------- */
    if(pad.r1 == 1) {
	pad.r1 = 1;
	jiki.point += 10;
    }
    if(pad.l1 == 1) {
	pad.l1 = 1;
	jiki.point -= 10;
    }
    jiki.point %= 360;
    //    var siny = 50 * Mysin(jiki.point - 90) / SANKAKU;
    //    var cosx = 30 + 50 * Mycos(jiki.point - 90) / SANKAKU;
    var siny = -100 + 50 * Mysin(jiki.point - 90) / SANKAKU;
    var cosx = -80 + 50 * Mycos(jiki.point - 90) / SANKAKU;

    count++;
    if(jiki.bf) PutSpriteA(ctx, (jiki.x + cosx * d_x), (jiki.y + siny * d_y), 1.0, jiki.point, bullets[1]);


    /* 押してないときレーザーゲージ回復--------------------  */
    if((pad.k1 == 0) && (pad.k0 == 0))
	if (lg.stg <= MAXP)
	    lg.stg += 4;
    
    /* レーザーレベル1登録---------------------------------- */
    if((pad.k1 %3 == 1) && (pad.k0 == 0) && (lg.stg > 16)) {
	//	PlaySdlMixer(0, RING)
	SoundPlay(4);

	pad.k1 = 1;
	laser_lv1_end++;
	var i = laser_lv1_end;

	var tama = new laser();
	tama.sx = ( 32 * Mysin(jiki.point) / SANKAKU ) * d_x;
	tama.sy = (32 * Mycos(jiki.point) / SANKAKU) * d_y;
	tama.x = jiki.x;// + 128*d_x;
	tama.y = jiki.y;// + 128*d_y;
	tama.r = 1000;
	tama.s = 0.08;
	tama.scale = 1.0;
	lg.stg -= 16;
	
	laser_lv1[i] = tama;

    }
    /*laser_lv1表示----------------------------------*/
    for(i = 0; i < laser_lv1_end + 1; i++) {
	if(laser_lv1[i].r != -1) {
	    laser_lv1[i].y -= laser_lv1[i].sy;
	    laser_lv1[i].x += laser_lv1[i].sx;
	    laser_lv1[i].r += 100;
	    laser_lv1[i].s += 0.05;
	    count++;
	    //	    DefSpriteEx(16, 16, 16);
	    //            PutSpriteEx(16, laser_lv1[i].x, laser_lv1[i].y, laser_lv1[i].s, laser_lv1[i].s, 1);
		PutSpriteF(ctx, laser_lv1[i].x, laser_lv1[i].y, laser_lv1[i].scale, bullets[5]);
	}
	//	if(waku(laser_lv1[i].x, laser_lv1[i].y)) {
	if( (laser_lv1[i].y < ortho.top ) || (laser_lv1[i].y > ortho.bottom)
	    || (laser_lv1[i].x < ortho.left) || (laser_lv1[i].x > ortho.right)) {
	    if(laser_lv1_end == i) {
		laser_lv1_end--;
		break;
	    }
	    if(laser_lv1_end > i) {
		laser_lv1[i] = laser_lv1[laser_lv1_end];
		laser_lv1_end--;
		i--;
	    }
	}
    }

    /*レーザーレベル2登録--------------------------*/
    if((pad.k1 == 0) && (pad.k0 != 0) && (lg.stg > 200)) {
	    //	    PlaySdlMixer(0. NEW);
	    if(laser_lv2[0].r == 0) {
		laser_lv2[0].r = 1;
		lg.stg -= 100;
	    } else {
		laser_lv2[0].r %= 45;
		laser_lv2[0].r++;
		lg.stg -= 10;
	    }
	} else {
	    laser_lv2[0].r = 0;
    }

    /*レーザーレベル2表示 -----------------------*/
    if(laser_lv2[0].r != 0) {
	laser_lv2[0].x = jiki.x  + jiki.w*2 * Mysin(jiki.point) / SANKAKU;
	laser_lv2[0].y = jiki.y  - jiki.w*2 * Mycos(jiki.point) / SANKAKU;
	laser_lv2[0].scale = 1.0;
	count++;
	PutSpriteF(ctx, laser_lv2[0].x, laser_lv2[0].y, laser_lv2[0].scale, bullets[0]);
    }


}