/**
 * OBJ_SHOT生成関数
 * 
 * @param {Integer} x     弾源x座標
 * @param {Integer} y     弾源y座標
 * @param {Integer} speed 速度
 * @param {Integer} angle 角度
 * @param {Integer} graph 画像
 * @param {Integer} delay 遅延フレーム数
 * @return {Object} 作成したオブジェクトのid
 */
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生成関数
 * 
 * @param {Integer} x     弾源x座標
 * @param {Integer} y     弾源y座標
 * @param {Integer} speed 速度
 * @param {Integer} angle 角度
 * @param {Integer} lng   長さ
 * @param {Integer} wid   幅
 * @param {Integer} graph 画像
 * @param {Integer} delay 遅延フレーム数
 * @param {Boolean} src   光源の有無
 * @return {Object} 作成したオブジェクトのid
 */
function CreateObjLaser( x, y, speed, angle, lng, wid, graph, delay, 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_SINUATE_LASER生成関数
 * 
 * @param {Integer} x     弾源x座標
 * @param {Integer} y     弾源y座標
 * @param {Integer} speed 速度
 * @param {Integer} angle 角度
 * @param {Integer} lng   長さ
 * @param {Integer} wid   幅
 * @param {Integer} graph 画像
 * @param {Integer} delay 遅延フレーム数
 * @return {Object} 作成したオブジェクトのid
 */
function CreateObjSinuateLaser( x, y, speed, angle, lng, wid, graph, delay ){
	let obj = Obj_Create( OBJ_SINUATE_LASER );
	Obj_SetPosition( obj, x, y );
	Obj_SetSpeed( obj, speed );
	Obj_SetAngle( obj, angle );
	ObjShot_SetGraphic( obj, graph );
	ObjShot_SetDelay( obj, delay );
	ObjSinuateLaser_SetLength( obj, lng );
	ObjSinuateLaser_SetWidth( obj, wid );
	
	return obj;
}

/**
 * OBJ_EFFECT生成関数
 * 
 * @param {String}  effectimg 画像
 * @param {Integer} x         中心x座標
 * @param {Integer} y         中心y座標
 * @param {Integer} cutx      切り出す基点x値
 * @param {Integer} cuty      切り出す基点y値
 * @param {Integer} imgx      画像のX幅
 * @param {Integer} imgy      画像のY幅
 * @param {Integer} layer     表示レイヤー
 * @param {Integer} alpha     α値
 * @param {Integer} r         R値
 * @param {Integer} g         G値
 * @param {Integer} b         B値
 * @return {Object} 作成したオブジェクトのid
 */
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;
}
