Mercurial > hg > Game > WebGL
diff dandy/resources/Player.js @ 1:54589bb5e57d
add dandy
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 23 Feb 2012 14:51:33 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dandy/resources/Player.js Thu Feb 23 14:51:33 2012 +0900 @@ -0,0 +1,361 @@ +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]); + } + + +}