//==============================================================================
//	 e ^e֐
//	̃t@Cinclude_functionŎ荞ނAKvȕRsyĎgp
//==============================================================================
//	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;
	}
}

//------------------------------------------------------------------------------
//	inWayjShot02𔭎˂
//------------------------------------------------------------------------------
function WideShot02(
	let x,			// exW 
	let y,			// eyW
	let speed,		// x
	let accSpeed,	// x
	let maxSpeed,	// ōxiŒᑬxj
	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 ){
		CreateShot02( x, y, speed, angle, accSpeed, maxSpeed, graphic, delay );
		angle += wayAngle;
	}
}

//------------------------------------------------------------------------------
//	inWayjLaser01𔭎˂
//------------------------------------------------------------------------------
function WideLaser01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let Length,		// 
	let width,		// 
	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 ){
		CreateLaser01( x, y, speed, angle, Length, width, 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;
	}
}

//------------------------------------------------------------------------------
//	SShot02𔭎˂
//------------------------------------------------------------------------------
function RoundShot02(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let accSpeed,	// x
	let maxSpeed,	// ōxiŒᑬxj
	let angle,		// px
	let way,		// Way
	let graphic,	// 摜
	let delay		// xt[
){
	let wayAngle = 360 / way;
	loop( way ){
		CreateShot02( x, y, speed, angle, accSpeed, maxSpeed, graphic, delay );
		angle += wayAngle;
	}
}

//------------------------------------------------------------------------------
//	SLaser01𔭎˂
//------------------------------------------------------------------------------
function RoundLaser01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let Length,		// 
	let width,		// 
	let way,		// Way
	let graphic,	// 摜
	let delay		// xt[
){
	let wayAngle = 360 / way;
	loop( way ){
		CreateLaser01( x, y, speed, angle, Length, width, graphic, delay );
		angle += wayAngle;
	}
}

//------------------------------------------------------------------------------
//	SWideShot01𔭎˂
//------------------------------------------------------------------------------
function RoundWideShot01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let wideAngle,	// ̊px
	let wideWay,	// Wayi1\Wayj
	let roundWay,	// SWayi̐j
	let graphic,	// 摜
	let delay		// xt[
){
	let roundWayAngle = 360 / roundWay;
	let wideWayAngle = 0;
	if( wideWay > 1 ){ wideWayAngle = wideAngle / ( wideWay - 1 ); }
	loop( roundWay ){
		let _angle = angle;
		if( wideWay > 1 ){ _angle -= wideAngle / 2; }
		loop( wideWay ){
			CreateShot01( x, y, speed, _angle, graphic, delay );
			_angle += wideWayAngle;
		}
		angle += roundWayAngle;
	}
}

//------------------------------------------------------------------------------
//	SWideShot02𔭎˂
//------------------------------------------------------------------------------
function RoundWideShot02(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let accSpeed,	// x
	let maxSpeed,	// ōxiŒᑬxj
	let angle,		// px
	let wideAngle,	// ̊px
	let wideWay,	// Wayi1\Wayj
	let roundWay,	// SWayi̐j
	let graphic,	// 摜
	let delay		// xt[
){
	let roundWayAngle = 360 / roundWay;
	let wideWayAngle = 0;
	if( wideWay > 1 ){ wideWayAngle = wideAngle / ( wideWay - 1 ); }
	loop( roundWay ){
		let _angle = angle;
		if( wideWay > 1 ){ _angle -= wideAngle / 2; }
		loop( wideWay ){
			CreateShot02( x, y, speed, _angle, accSpeed, maxSpeed, graphic, delay );
			_angle += wideWayAngle;
		}
		angle += roundWayAngle;
	}
}

//------------------------------------------------------------------------------
//	SWideLaser01𔭎˂
//------------------------------------------------------------------------------
function RoundWideLaser01(
	let x,			// exW
	let y,			// eyW
	let speed,		// x
	let angle,		// px
	let Length,		// 
	let width,		// 
	let wideAngle,	// ̊px
	let wideWay,	// Wayi1\Wayj
	let roundWay,	// SWayi̐j
	let graphic,	// 摜
	let delay		// xt[
){
	let roundWayAngle = 360 / roundWay;
	let wideWayAngle = 0;
	if( wideWay > 1 ){ wideWayAngle = wideAngle / ( wideWay - 1 ); }
	loop( roundWay ){
		let _angle = angle;
		if( wideWay > 1 ){ _angle -= wideAngle / 2; }
		loop( wideWay ){
			CreateLaser01( x, y, speed, _angle, Length, width, graphic, delay );
			_angle += wideWayAngle;
		}
		angle += roundWayAngle;
	}
}

//------------------------------------------------------------------------------
//	ɓԊux̒e𔭎˂
//------------------------------------------------------------------------------
function LineShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// {x
	let maxSpeed,	// ōx
	let angle,		// px
	let num,		// ̒ei1̏ꍇ͊{x̒e1̂݁j
	let graphic,	// 摜
	let delay		// xt[
){
	let numSpeed = 0;
	if( num > 1 ){ numSpeed = ( maxSpeed - speed ) / ( num - 1 ); }
	loop( num ){
		CreateShot01( x, y, speed, angle, graphic, delay );
		speed += numSpeed;
	}
}

//------------------------------------------------------------------------------
//	inWayjLineShot𔭎˂
//------------------------------------------------------------------------------
function WideLineShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// {x
	let maxSpeed,	// ōx
	let angle,		// px
	let wideAngle,	// ̊px
	let way,		// Way
	let num,		// ̒ei1̏ꍇ͊{x̒e1̂݁j
	let graphic,	// 摜
	let delay		// xt[
){
	let numSpeed = 0;
	if( num > 1 ){ numSpeed = ( maxSpeed - speed ) / ( num - 1 ); }
	let wayAngle = 0;
	if( way > 1 ){
		wayAngle = wideAngle / ( way - 1 );
		angle -= wideAngle / 2;
	}
	loop( way ){
		let _speed = speed;
		loop( num ){
			CreateShot01( x, y, _speed, angle, graphic, delay );
			_speed += numSpeed;
		}
		angle += wayAngle;
	}
}

//------------------------------------------------------------------------------
//	SLineShot𔭎˂
//------------------------------------------------------------------------------
function RoundLineShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// {x
	let maxSpeed,	// ōx
	let angle,		// px
	let way,		// Way
	let num,		// ̒ei1̏ꍇ͊{x̒e1̂݁j
	let graphic,	// 摜
	let delay		// xt[
){
	let numSpeed = 0;
	if( num > 1 ){ numSpeed = ( maxSpeed - speed ) / ( num - 1 ); }
	let wayAngle = 360 / way;
	loop( way ){
		let _speed = speed;
		loop( num ){
			CreateShot01( x, y, _speed, angle, graphic, delay );
			_speed += numSpeed;
		}
		angle += wayAngle;
	}
}

//------------------------------------------------------------------------------
//	SWideLineShot𔭎˂
//------------------------------------------------------------------------------
function RoundWideLineShot(
	let x,			// exW
	let y,			// eyW
	let speed,		// {x
	let maxSpeed,	// ōx
	let angle,		// px
	let wideAngle,	// ̊px
	let wideWay,	// Wayi1\Wayj
	let roundWay,	// SWayi̐j
	let num,		// ̒ei1̏ꍇ͊{x̒e1̂݁j
	let graphic,	// 摜
	let delay		// xt[
){
	let numSpeed = 0;
	if( num > 1 ){ numSpeed = ( maxSpeed - speed ) / ( num - 1 ); }
	let roundWayAngle = 360 / roundWay;
	let wideWayAngle = 0;
	if( wideWay > 1 ){ wideWayAngle = wideAngle / ( wideWay - 1 ); }
	loop( roundWay ){
		let _angle = angle;
		if( wideWay > 1 ){ _angle -= wideAngle / 2; }
		loop( wideWay ){
			let _speed = speed;
			loop( num ){
				CreateShot01( x, y, _speed, _angle, graphic, delay );
				_speed += numSpeed;
			}
			_angle += wideWayAngle;
		}
		angle += roundWayAngle;
	}
}

//------------------------------------------------------------------------------
//	ʒ[Ŕ˂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 );
}

//------------------------------------------------------------------------------
//	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 );
}
