//=============================================================================
//	inWayjShot01𔭎˂
//-----------------------------------------------------------------------------
function WideShot01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let wideAngle,	// ̊px
	let way,		// Way
	let graphic,	// 摜
	let delay		// xt[
){
	let wayAngle = 0;
	if( way > 1 ){
		wayAngle = wideAngle / ( way - 1 );
		angle -= wideAngle / 2;
	}
	loop( way ){
		CreateShot01( x, y, speed, angle, graphic, delay );
		angle += wayAngle;
	}
}

//-----------------------------------------------------------------------------
//	SShot01𔭎˂
//-----------------------------------------------------------------------------
function RoundShot01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let way,		// Way
	let graphic,	// 摜
	let delay		// xt[
){
	let wayAngle = 360 / way;
	loop( way ){
		CreateShot01( x, y, speed, angle, graphic, delay );
		angle += wayAngle;
	}
}

//-----------------------------------------------------------------------------
//	d͂ŉe𔭎˂
//	 pxAd͊px͐ΊpxwiSetShotDirectionTypȅԂɂ͊֌WȂj
//-----------------------------------------------------------------------------
function GravityShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// pxiΊpxj
	let grvSpeed,	// d͉x
	let grvAngle,	// d͊pxiΊpxj
	let graphic,	// 摜
	let delay		// xt[
){
	let xSpeed = speed * cos( angle );
	let ySpeed = speed * sin( angle );
	let accXSpeed = grvSpeed * cos( grvAngle );
	let accYSpeed = grvSpeed * sin( grvAngle );
	let maxXSpeed = [ 99, - 99 ][ accXSpeed < 0 ];
	let maxYSpeed = [ 99, - 99 ][ accYSpeed < 0 ];
	CreateShot12( x, y, xSpeed, ySpeed, accXSpeed, accYSpeed, maxXSpeed, maxYSpeed, graphic, delay );
}

//-----------------------------------------------------------------------------
//	ʒ[Ŕ˂e𔭎˂
//	 SetShotDirectionType  ABSOLUTE ɂĂKv
//	 x傫Aˈʒǔ덷傫Ȃ
//-----------------------------------------------------------------------------
function ReflectShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let reflectNum,	// ˉ
	let reflectL,	// ʍ[Ŕ true/false
	let reflectU,	// ʏ[Ŕ true/false
	let reflectR,	// ʉE[Ŕ true/false
	let reflectD,	// ʉ[Ŕ true/false
	let graphic,	// 摜
	let delay		// xt[
){
	let minX = GetClipMinX();
	let maxX = GetClipMaxX();
	let minY = GetClipMinY();
	let maxY = GetClipMaxY();
	let totalFrame = 0;
	CreateShotA( 0, x, y, delay );
	SetShotDataA( 0, 0, speed, angle, 0, 0, 0, graphic );
	while( reflectNum >= 1 ){
		while( angle < 0 ){ angle += 360; }
		if( angle >= 360 ){ angle %= 360; }
		let angleLU = atan2( y - minY, x - minX ) + 180;
		let angleRU = atan2( y - minY, x - maxX ) + 180;
		let angleLD = atan2( y - maxY, x - minX ) + 180;
		let angleRD = atan2( y - maxY, x - maxX ) + 180;
		if( angleRU == 0 ){ angleRU = 360; }
		if( angleRD == 360 ){ angleRD = 0; }
		let reflectLength = 0;
		let reflectX = 0;
		let reflectY = 0;
		let reflectAngle = 0;
		let reflect = false;
		if( angle >= angleRU || angle < angleRD ){
			reflectLength = ( maxX - x ) / cos( angle );
			reflectX = maxX;
			reflectY = y + reflectLength * sin( angle );
			reflectAngle = 180 - angle;
			reflect = reflectR;
		}
		else if( angle >= angleLD && angle < angleLU ){
			reflectLength = ( minX - x ) / cos( angle );
			reflectX = minX;
			reflectY = y + reflectLength * sin( angle );
			reflectAngle = 180 - angle;
			reflect = reflectL;
		}
		else if( angle >= angleLU && angle < angleRU ){
			reflectLength = ( minY - y ) / sin( angle );
			reflectX = x + reflectLength * cos( angle );
			reflectY = minY;
			reflectAngle = - angle;
			reflect = reflectU;
		}
		else{
			reflectLength = ( maxY - y ) / sin( angle );
			reflectX = x + reflectLength * cos( angle );
			reflectY = maxY;
			reflectAngle = - angle;
			reflect = reflectD;
		}
		if( !reflect ){ break; }
		x = reflectX;
		y = reflectY;
		angle = reflectAngle;
		totalFrame += reflectLength / speed;
		SetShotDataA( 0, totalFrame, NULL, angle, 0, 0, 0, graphic );
		reflectNum --;
	}
	FireShot( 0 );
}
