view dandy/resources/collision.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 source

function collision_detect()
{
    for(var i = 0; Boolean(active_chara_list.enemy[i]) ; i++)
	{
	    var p = active_chara_list.enemy[i];
	    if(p.flag == true)
		{
		    p = p.collision(p);
		}
	}
}


atari = function collision(p)
{
    var i1=0; 
    var i2=0;
    var n = 0;
    var ex = p.x;
    var ey = p.y;
    var charano = p.charano;
    var w = p.w;
    var h = p.h;

    //自機やられ
    /*
    if ((ex < jiki.x + jiki.w /2 ) && (ex + w > jiki.x + jiki.w /2) 
	&& ( ey < jiki.y + jiki.h / 2) && (ey + h > jiki.y + jiki.h / 2)
	&& (jiki.muteki <= 0)) 
	{
    */
    if((Math.abs(jiki.x - ex) < (jiki.w + w - 15)/2)//-15 は当たり判定を緩和しているだけ
       &&(Math.abs(jiki.y - ey ) < (jiki.h + h - 15)/2)//-15 しないとちょっとシビアな感じ
       &&(jiki.muteki <= 0))
	{

	    Bom(jiki.x,jiki.y);
	    
	    jiki.bf = false;
	    
	    jiki.zanki--;
	    jiki.muteki = 120;


	    /*
	    infg.stg = 0;
	    infg_level--;
	    if ( infg_level < 0)
	    infg_level = 0;
	    */

	    return p;
	}

    if(p.tama != true) {

    /*玉レベル1の当たり判定-------------------------*/
    for ( i1 = 0; i1 < tama_lv1_end + 1; i1++) {
	if ((tama_lv1[i1].x + 5 + bullets[2].w/2  > ex - w/2) 
	    && (ex + w/2 > tama_lv1[i1].x + 5 - bullets[2].w/2 )
	    && (tama_lv1[i1].y + h > ey) 
	    && (tama_lv1[i1].y < ey +h)
	    && (tama_lv1[i1].l != -1)) {
	    tama_lv1[i1].r = -1;
	    p.vit -= TAMALV1P;
	    infg.stg += 4;
	    if (p.vit <= 0) {
		infg.stg += 4;
		Bom(p.x, p.y);
		//		enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
		p.state = delete_chara;
		p.collision= noaction;
		p.flag = false;
		return p;
	    }
	}
	if ((tama_lv1[i1].x - 5 + bullets[2].w/2  > ex - w/2) 
	    && (ex + w/2 > tama_lv1[i1].x - 5 - bullets[2].w/2 )
	    && (tama_lv1[i1].y + h > ey) 
	    && (tama_lv1[i1].y < ey +h)
	    && (tama_lv1[i1].l != -1)) {
	    tama_lv1[i1].l = -1;
	    p.vit -= TAMALV1P;

	    infg.stg++;
	    if (p.vit <= 0) {
		infg.stg += 4;
		Bom(p.x, p.y);
		//		enemycount += (p.score * ((infg.stg / 128) + infg_lvel + 1));
		p.state = delete_chara;
		p.collision = noaction;
		p.flag = false;
		return p;
	    }
	}
    }

    /*玉レベル2--------------------------------*/
    for(i1 = 0; i1 < tama_lv2_end + 1; i1++) {
	if((tama_lv2[i1].x + 10 + bullets[4].w/2 > ex - w/2 )
	   && (ex + w/2 > tama_lv2[i1].x + 10 - bullets[4].w/2)
	   && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 )
	   && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) 
	   && (tama_lv2[i1].rr != -1)) {
	   tama_lv2[i1].rr = -1;
	   p.vit -= TAMALV2P;
	   infg.stg++;
	   if(p.vit <= 0) {
	       infg.stg += 4;
	       Bom(p.x, p.y);
	       //	       enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
	       p.state = delete_chara;
	       p.collision = noaction;
	       p.f = false;
	       return p;
	   }
	}

	if((tama_lv2[i1].x + 5 + bullets[4].w/2 > ex - w/2 )
	   && (ex + w/2 > tama_lv2[i1].x + 5 - bullets[4].w/2)
	   && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 )
	   && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) 
	   && (tama_lv2[i1].sr != -1)) {
	   tama_lv2[i1].sr = -1;
	   p.vit -= TAMALV2P;
	   infg.stg++;
	   if(p.vit <= 0) {
	       infg.stg += 4;
	       Bom(p.x, p.y);
	       //	       enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
	       p.state = delete_chara;
	       p.collision = noaction;
	       p.f = false;
	       return p;
	   }
	}
	if((tama_lv2[i1].x - 10 + bullets[4].w/2 > ex - w/2 )
	   && (ex + w/2 > tama_lv2[i1].x - 10 - bullets[4].w/2)
	   && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 )
	   && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) 
	   && (tama_lv2[i1].ll != -1)) {
	   tama_lv2[i1].ll = -1;
	   p.vit -= TAMALV2P;
	   infg.stg++;
	   if(p.vit <= 0) {
	       infg.stg += 4;
	       Bom(p.x, p.y);
	       //	       enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
	       p.state = delete_chara;
	       p.collision = noaction;
	       p.f = false;
	       return p;
	   }
	}

	if((tama_lv2[i1].x - 5 + bullets[4].w/2 > ex - w/2 )
	   && (ex + w/2 > tama_lv2[i1].x - 5 - bullets[4].w/2)
	   && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 )
	   && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) 
	   && (tama_lv2[i1].sl != -1)) {
	   tama_lv2[i1].sl = -1;
	   p.vit -= TAMALV2P;
	   infg.stg++;
	   if(p.vit <= 0) {
	       infg.stg += 4;
	       Bom(p.x, p.y);
	       //	       enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
	       p.state = delete_chara;
	       p.collision = noaction;
	       p.f = false;
	       return p;
	   }
	}
    }

    }


    /*レーザーレベル1------------------------*/
    for(i1 = 0; i1 < laser_lv1_end + 1; i1++) {
	n = laser_lv1[i1].r * 128 / 4096;
	//	var nx = laser_lv1[i1].w + laser_lv1[i1].scale;
	//	var ny = laser_lv1[i1].h + laser_lv1[i1].scale;

	if ((laser_lv1[i1].x + n*d_x > ex) && (ex + w > laser_lv1[i1].x)
	    && (laser_lv1[i1].y + n*d_y > ey) && (laser_lv1[i1].y < ey + h)
	    && (laser_lv1[i1].r != -1)) {
	    laser_lv1[i1].r = -1;
	    laser_lv1[i1].y = -1;
	    p.vit -= LASERLV1P;	    
	    infg.stg++;
	    if(p.vit <= 0) {
		infg.stg += 4;
		Bom(p.x, p.y);
		//		enemycount += (p.score * ((infg.stg / 128) + infg_level + 1));
		p.state = delete_chara;
		p.collision = noaction;
		p.f = false;
		return 1;
	    }

	}
    }


    /*shield(laser lv2) */
    if((p.tama == true ) && (lg.stg > 0)
       && (laser_lv2[0].x + 128*d_x > ex ) && ( ex + w > laser_lv2[0].x - 128*d_x)
       && (laser_lv2[0].y + 128*d_y > ey ) && (laser_lv2[0].y - 128*d_y < ey + h)
       && (laser_lv2[0].r != 0)) {
	   p.vit -= LASERLV2P;
	   lg.stg -= 26;
	   infg.stg++;
	   if(p.vit <= 0) {
	       infg.stg += 4;
	       Bom(p.x, p.y);
	       //	       enemycount += (p.score * ((infg.stg / 128) + infg_level + 1 ));
	       p.state = delete_chara;
	       p.collision = noaction;
	       p.flag = false;
	       return p;
	   }
    }
    

}