//PlayerCore
let mv=0;
let tm=0;

let im =0;
let Hold =0;

sub Clock{
	alternative(tm)
	case(2){mv=0;}
	case(4){mv=1;}
	case(6){tm=0;}
	tm++;
	
	if(Right){
		if(Hold>30){im = 2;}
		else{im = 1;}
	}
	else if(Left){			
		if(Hold>30){im = -2;}
		else{im = -1;}
	}
	else{
		im =0;Hold =0;
	}
	Hold++;
}
///[sys]
task PI(b,d){//PlayerImg
	ImgEffect(Img[0],GetPlayerX,GetPlayerY,4,0,x[2+im],y[b],x[3+im],y[d]);
	yield;
}
task HI{//HoldImg
	ImgEffect(Img[0],GetPlayerX,GetPlayerY,4,0,x[7],y[0],x[8],y[1]);
	yield;
}
task WI(a,c){//WeaponImg
	ImgEffect(Img[0],510,GetCenterY+60,8,0,x[a],y[1],x[c],y[2]);
	yield;
}
task WIs(a,c){//WeaponImg
	ImgEffect(Img[0],550,GetCenterY+60,8,0,x[a],y[1],x[c],y[2]);
	yield;
}

task SPI{//SetPlayerImage
	let Li=0;
	loop(GetPlayerLife){
		ImgEffect(Img[0],510+Li,GetCenterY-50,8,0,x[5],y[0],x[6],y[1]);
		Li+=33;
	}
	let Bo=0;
	loop(GetPlayerBomb){
		ImgEffect(Img[0],510+Bo,GetCenterY-10,8,0,x[6],y[0],x[7],y[1]);
		Bo+=33;
	}
	yield;
}

///[sys]

///[img]
let x =[0,nx,nx*2,nx*3,nx*4,nx*5,nx*6,nx*7,nx*8,nx*9,nx*10,nx*11];
let y =[0,ny,ny*2,ny*3,ny*4,ny*5,ny*6,ny*7,ny*8,ny*9,ny*10,ny*11];
	
task ImgEffect(img,ImgX,ImgY,Layer,Angle,a,b,c,d){
	let ImgObj=Obj_Create(OBJ_EFFECT);
	EffectTask(ImgObj,img,Layer,Angle,a,b,c,d);
	loop(2){Obj_SetPosition(ImgObj,ImgX,ImgY);yield;}
	Obj_Delete(ImgObj);
	yield;
}

task EffectTask(obj,img,layer,Angle,a,b,c,d){
	ObjEffect_SetTexture(obj,img);
	ObjEffect_SetLayer(obj,layer);
	ObjEffect_SetAngle(obj,0,0,Angle);//X,Y,Z
	ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_CreateVertex(obj,4);
	EffectVertex(obj,a,b,c,d);
	yield;
}

task EffectVertex(obj,a,b,c,d){
	let GraphicXY=[a,b,c,d];
	let Vx=(GraphicXY[2]-GraphicXY[0])/2;
	let Vy=(GraphicXY[3]-GraphicXY[1])/2;
	ObjEffect_SetVertexUV(obj,0,GraphicXY[0],GraphicXY[1]);
	ObjEffect_SetVertexUV(obj,1,GraphicXY[2],GraphicXY[1]);
	ObjEffect_SetVertexUV(obj,2,GraphicXY[0],GraphicXY[3]);
	ObjEffect_SetVertexUV(obj,3,GraphicXY[2],GraphicXY[3]);
	ObjEffect_SetVertexXY(obj,0,-Vx,-Vy);
	ObjEffect_SetVertexXY(obj,1,Vx,-Vy);
	ObjEffect_SetVertexXY(obj,2,-Vx,Vy);
	ObjEffect_SetVertexXY(obj,3,Vx,Vy);
	yield;
}
///[img]

///[shot]
task ShotObj(X,Y,Ag,Sp,Id,Pow,Penetra,Type,Id2){
	let Shot = Obj_Create(OBJ_SHOT);
		ShotTask(Shot,X,Y,Ag,Id,Pow,Penetra);
		
		Obj_SetSpeed(Shot,Sp);
		
		alternative(Type)
		case(0){loop{yield;}}
		case(1){
			loop(5){yield;}
		}
		case(2){
			let Hg =atan2(GetEnemyY-Obj_GetY(Shot),GetEnemyX-Obj_GetX(Shot));
			while(!Obj_BeDeleted(Shot)){
				if(sin(Hg - Obj_GetAngle(Shot))>0){
					Obj_SetAngle(Shot,Obj_GetAngle(Shot)+5);
				}
				else{
					Obj_SetAngle(Shot,Obj_GetAngle(Shot)-5);
				}
				if(Obj_IsIntersected(Shot)){
					Obj_SetSpeed(Shot,0);
					ObjShot_SetGraphic(Shot,Id2);
					ObjShot_SetDamage(Shot,2);
					ObjShot_SetPenetration(Shot,10);
					loop(20){yield;}
					Obj_Delete(Shot);
				}
				yield;
			}
			yield;
		}
		case(3){
			loop(10){yield;}
			Obj_SetSpeed(Shot,10);
			while(!Obj_BeDeleted(Shot)){
				if(Obj_IsIntersected(Shot)){
					Obj_SetSpeed(Shot,0);
					ObjShot_SetGraphic(Shot,Id2);
					ObjShot_SetDamage(Shot,3);
					ObjShot_SetPenetration(Shot,10);
					loop(20){yield;}
					Obj_Delete(Shot);
					yield;
				}
				yield;
			}
			yield;
		}
		//others{loop{yield;}}
		Obj_Delete(Shot);
	yield;
}
task LaserObj(X,Y,Ag,Wh,Id,Pow,Penetra,Type){
	let Laser = Obj_Create(OBJ_LASER);
		ShotTask(Laser,X,Y,Ag,Id,Pow,Penetra);
		
		ObjLaser_SetWidth(Laser,Wh);
		ObjLaser_SetLength(Laser,600);
		ObjLaser_SetSource(Laser,false);
		
		alternative(Type)
		case(0){loop(5){yield;}}
		//others{loop{yield;}}
		Obj_Delete(Laser);
	yield;
}
task ShotTask(Obj,ObjX,ObjY,ObjAngle,ObjBullet,ObjDamage,ObjPenetration){
	Obj_SetX(Obj,ObjX);
	Obj_SetY(Obj,ObjY);
	Obj_SetAngle(Obj,ObjAngle);
	ObjShot_SetGraphic(Obj,ObjBullet);
	ObjShot_SetDamage(Obj,ObjDamage);
	ObjShot_SetPenetration(Obj,ObjPenetration);
	yield;
}
///[shot]
