// 弾の発射をサポートするインクルード専用スクリプトです
// nway弾などが詰まってます

//---------------------------------------------------------------------------------

//nway弾を発射する関数です。パラメータは以下の通り
//発射位置XY　速度　ゼロ位置角度　角速度　加速度　最大速度　弾画像　ディレイ　発射way数
function CreateShotNway01(let nX, let nY, let Speed, let Angle, let addAngle, let addSpeed, let limitSpeed, let Shot, let delay, let way){
	//弾ID
	let id = 1101;
	
	//禁則処理
	if(way <= 0){ return ; }
	if(delay < 0){ return ; }

	let sepAngle = 360 / way;
	ascent(let i in 0..way){
		CreateShotA(id, nX, nY, delay);
		SetShotDataA(id, 0, Speed, Angle + i*sepAngle, addAngle, addSpeed, limitSpeed, Shot);
		FireShot(id);
	}
}

//連打型のnway弾を発射するタスクです。パラメータは以下の通り
//発射位置XY　速度　ゼロ位置角度　角速度　加速度　最大速度　弾画像　ディレイ　発射way数　連射数　発射間隔
function CreateShotNway02(let nX, let nY, let Speed, let Angle, let addAngle, let addSpeed, let limitSpeed, let Shot, let delay, let way, let tk, let w){
	//弾ID
	let id = 1101;
	
	//禁則処理
	if(way <= 0){ return ; }
	if(delay < 0){ return ; }
	if(w <= 0){ return ; } 

	let sepAngle = 360 / way;
	ascent(let j in 0..tk){
		ascent(let i in 0..way){
			CreateShotA(id, nX, nY, delay);
			SetShotDataA(id, 0, Speed, Angle + i*sepAngle, addAngle, addSpeed, limitSpeed, Shot);
			FireShot(id);
		}
		loop(w){ yield; }
	}
}


//nway弾を一定方向に発射する関数です。パラメータは以下の通り
//発射位置XY　速度　ゼロ位置角度　角速度　加速度　最大速度　弾画像　ディレイ　発射way数　ゼロ位置角度からの＋−範囲
function CreateShotNway11(let nX, let nY, let Speed, let Angle, let addAngle, let addSpeed, let limitSpeed, let Shot, let delay, let way, let rad){
	//弾ID
	let id = 1101;
	
	//禁則処理
	if(way <= 0){ return ; }
	if(delay < 0){ return ; }

	let start = Angle - rad;
	let sepAngle = rad*2 / (way-1);
	ascent(let i in 0..way){
		CreateShotA(id, nX, nY, delay);
		SetShotDataA(id, 0, Speed, start + i*sepAngle, addAngle, addSpeed, limitSpeed, Shot);
		FireShot(id);
	}
}

//連打型のnway弾を一定方向に発射するタスクです。パラメータは以下の通り
//発射位置XY　速度　ゼロ位置角度　角速度　加速度　最大速度　弾画像　ディレイ　発射way数　連射数　発射間隔　ゼロ位置角度からの＋−範囲
function CreateShotNway12(let nX, let nY, let Speed, let Angle, let addAngle, let addSpeed, let limitSpeed, let Shot, let delay, let way, let tk, let w, let rad){
	//弾ID
	let id = 1101;
	
	//禁則処理
	if(way <= 0){ return ; }
	if(delay < 0){ return ; }
	if(w <= 0){ return ; } 

	let start = Angle - rad;
	let sepAngle = rad*2 / (way-1);
	ascent(let j in 0..tk){
		ascent(let i in 0..way){
			CreateShotA(id, nX, nY, delay);
			SetShotDataA(id, 0, Speed, start + i*sepAngle, addAngle, addSpeed, limitSpeed, Shot);
			FireShot(id);
		}
		loop(w){ yield; }
	}
}

//自由落下弾を発射する関数です。パラメータは以下の通り
//発射位置XY　速度　角度　重力加速度（Ｙ加速度）　弾画像　ディレイ
function CreateFreeFallShot01(let nX, let nY, let Speed, let Angle, let AccY, let Shot, let delay){
	//弾ID
	let id = 1101;
	//無限∞
	let INF	= 4294967295;
	
	//禁則処理
	if(delay < 0){ return ; }

	//速度と角度からＸ速度とＹ速度を求める
	let speedX = SAtoS_X(Speed, Angle);
	let speedY = SAtoS_Y(Speed, Angle);
	CreateShotA(id, nX, nY, delay);
	SetShotDataA_XY(id, 0, speedX, speedY, 0, AccY, 0, INF, Shot);
	FireShot(id);
}

//Ｘ速度が減速するタイプの自由落下弾を発射する関数です。パラメータは以下の通り
//発射位置XY　速度　角度　重力加速度（Ｙ加速度）　空気抵抗（Ｘ減速度）　弾画像　ディレイ
function CreateFreeFallShot02(let nX, let nY, let Speed, let Angle, let AccY, let ThrAccX, let Shot, let delay){
	//弾ID
	let id = 1101;
	//無限∞
	let INF	= 4294967295;
	
	//禁則処理
	if(delay < 0){ return ; }

	//速度と角度からＸ速度とＹ速度を求める
	let speedX = SAtoS_X(Speed, Angle);
	let speedY = SAtoS_Y(Speed, Angle);
	//speedXがゼロ以下のときは少しずつ増やす、ゼロ以上のときは少しずつ減らす。速度の限界値は０
	if(speedX < 0){
		//ゼロ以下
		CreateShotA(id, nX, nY, delay);
		SetShotDataA_XY(id, 0, speedX, speedY, ThrAccX, AccY, 0, INF, Shot);
		FireShot(id);
	}else{
		//ゼロ以上(＝ゼロ以下でない場合)
		CreateShotA(id, nX, nY, delay);
		SetShotDataA_XY(id, 0, speedX, speedY, -ThrAccX, AccY, 0, INF, Shot);
		FireShot(id);
	}
}

//全体の速度が常に一定な自由落下弾を発射する関数です。パラメータは以下の通り
//発射位置XY　速度　角度　重力加速度（Ｙ加速度）　弾画像　ディレイ
function CreateFreeFallShot03(let nX, let nY, let Speed, let Angle, let AccY, let Shot, let delay){
	//未実装
}





