//------------------------------------------------------------------------------
//	OBJ_SHOT生成関数(戻り値としてオブジェクト値が帰ります)
//	@X		弾源x座標
//	@Y		弾源y座標
//	@Speed		速度
//	@Angle		角度
//	@Graph		画像
//	@Delay		遅延フレーム数
//------------------------------------------------------------------------------
function CreateObjShot(X,Y,Speed,Angle,Graph,Delay){
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,X,Y);
	Obj_SetSpeed(obj,Speed);
	Obj_SetAngle(obj,Angle);
	ObjShot_SetGraphic(obj,Graph);
	ObjShot_SetDelay(obj,Delay);
	
	return obj;
}

//------------------------------------------------------------------------------
//	射出用OBJ_LASER生成関数(戻り値としてオブジェクト値が帰ります)
//	@X		弾源x座標
//	@Y		弾源y座標
//	@Speed		速度
//	@Angle		角度
//	@Graph		画像
//	@Delay		遅延フレーム数
//	@Lng		長さ
//	@Wid		幅
//	@Src		光源の有無
//------------------------------------------------------------------------------
function CreateObjLaserA(X,Y,Speed,Angle,Graph,Delay,Lng,Wid,Src){
	let obj = Obj_Create(OBJ_LASER);
	Obj_SetPosition(obj,X,Y);
	Obj_SetSpeed(obj,Speed);
	Obj_SetAngle(obj,Angle);
	ObjShot_SetGraphic(obj,Graph);
	ObjShot_SetDelay(obj,Delay);
	
	ObjLaser_SetLength(obj,0);
	ObjLaser_SetWidth(obj,Wid);
	ObjLaser_SetSource(obj,Src);
	
	CreateObjLaserTask(obj,X,Y,Speed,Angle,Graph,Delay,Lng,Wid,Src);
	
	return obj;
}

task CreateObjLaserTask(Obj,X,Y,Speed,Angle,Graph,Delay,Lng,Wid,Src){
	let vLng = 0;
	let mx = Speed * cos(Angle);
	let my = Speed * sin(Angle);
	
	loop(Delay){
		yield;
	}
	
	loop( truncate( Lng / Speed ) ){
		ObjLaser_SetLength(Obj,vLng);
		vLng += Speed;
		yield;
	}
	
	while( !Obj_BeDeleted(Obj) ){
		Obj_SetX( Obj , Obj_GetX(Obj) + mx );
		Obj_SetY( Obj , Obj_GetY(Obj) + my );
		
		yield;
	}
}

//------------------------------------------------------------------------------
//	設置用OBJ_LASER生成関数(戻り値としてオブジェクト値が帰ります)
//	@X		弾源x座標
//	@Y		弾源y座標
//	@Speed		速度
//	@Angle		角度
//	@Graph		画像
//	@Delay		遅延フレーム数
//	@Lng		長さ
//	@Wid		幅
//	@Src		光源の有無
//------------------------------------------------------------------------------
function CreateObjLaserB(X,Y,Speed,Angle,Graph,Delay,Lng,Wid,Src){
	let obj = Obj_Create(OBJ_LASER);
	Obj_SetPosition(obj,X,Y);
	Obj_SetSpeed(obj,Speed);
	Obj_SetAngle(obj,Angle);
	ObjShot_SetGraphic(obj,Graph);
	ObjShot_SetDelay(obj,Delay);
	
	ObjLaser_SetLength(obj,Lng);
	ObjLaser_SetWidth(obj,Wid);
	ObjLaser_SetSource(obj,Src);
	
	return obj;
}

//------------------------------------------------------------------------------
//	OBJ_EFFECT生成関数(戻り値としてオブジェクト値が帰ります)
//	@EffectImg	画像
//	@X		中心x座標
//	@Y		中心y座標
//	@CutX		切り出す基点x値
//	@CutY		切り出す基点y値
//	@ImgX		画像のX幅
//	@ImgY		画像のY幅
//	@Layer		表示レイヤー
//	@Alpha		α値
//	@R		R値
//	@G		G値
//	@B		B値
//------------------------------------------------------------------------------
function CreateObjEffect(EffectImg,X,Y,CutX,CutY,ImgX,ImgY,Layer,Alpha,R,G,B){
	let ImgXHalf = ImgX / 2;
	let ImgYHalf = ImgY / 2;
	
	let obj = Obj_Create(OBJ_EFFECT);
	ObjEffect_SetTexture(obj,EffectImg);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_CreateVertex(obj,4);
	
	ObjEffect_SetVertexXY(obj, 0, -ImgXHalf, -ImgYHalf);
	ObjEffect_SetVertexXY(obj, 1, -ImgXHalf,  ImgYHalf);
	ObjEffect_SetVertexXY(obj, 2,  ImgXHalf, -ImgYHalf);
	ObjEffect_SetVertexXY(obj, 3,  ImgXHalf,  ImgYHalf);
	
	ObjEffect_SetVertexUV(obj, 0,        CutX,        CutY);
	ObjEffect_SetVertexUV(obj, 1,        CutX, CutY + ImgY);
	ObjEffect_SetVertexUV(obj, 2, CutX + ImgX,        CutY);
	ObjEffect_SetVertexUV(obj, 3, CutX + ImgX, CutY + ImgY);
	
	ObjEffect_SetVertexColor(obj,0,Alpha,R,G,B);
	ObjEffect_SetVertexColor(obj,1,Alpha,R,G,B);
	ObjEffect_SetVertexColor(obj,2,Alpha,R,G,B);
	ObjEffect_SetVertexColor(obj,3,Alpha,R,G,B);
	
	ObjEffect_SetLayer(obj,Layer);
	
	Obj_SetPosition(obj,X,Y);
	
	return obj;
}