
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//{֐
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

//Q̑傫Ԃ֐
function max(a, b){ if( a > b ){ return a; } return b; }

//Q̏Ԃ֐
function min(a, b){ if( a > b ){ return b; } return a; }

//Q̑傫Ԃ֐iΒlrj
function max_abs(a, b){ if( (|a|) > (|b|) ){ return a; } return b; }

//Q̏Ԃ֐iΒlrj
function min_abs(a, b){ if( (|a|) > (|b|) ){ return b; } return a; }

//R̒ԒlԂ֐
function mid(a, b, c){ if( a > b ){ if( a > c ){ if( b > c ){ return b; } return c; } return a; } if( b > c ){ if( a > c ){ return a; } return c; } return b; }

//^ꂽ̐ΒlԂ֐
function abs(x){ if( x > 0 ){ return x; } return -x; }

//^ꂽ̕Ԃ֐i0Ȃ1Ԃj
function sign(x){ if( x >= 0 ){ return 1; } return -1; }

//Op`̎Εӂ̒߂֐
function hypot(x, y){ return ((x ^ 2 + y ^ 2) ^ 0.5); }

//`̗̈悪ʊOɂ邩ǂ𔻒肷֐
function IsOutOfClipRange(x, y, r)
{
	if( x <= GetClipMinX() - r || x >= GetClipMaxX() + r || y <= GetClipMinY() - r || y >= GetClipMaxY() + r ){
		return 1;
	}
	return 0;
}

//wʒu玩@ւ̑_px擾֐
function GetSnipeAngle(x, y)
{
	return atan2(GetPlayerY() - y, GetPlayerX() - x);
}

//z[~Oe̊px擾֐
function GetHomingAngle(x, y, current_angle, max_d_angle)
{
	let d_ang = (GetSnipeAngle(x, y) - current_angle + 540) % 360 - 180;

	if( d_ang > 0 ){
		return (current_angle + min(d_ang,  max_d_angle));
	}
	else if( d_ang < 0 ){
		return (current_angle + max(d_ang, -max_d_angle));
	}
	return current_angle;
}

//w̍W(0, 0)ɉ]W擾
function GetRotateX(x, y, angle){ return (x * cos(angle) - y * sin(angle)); }
function GetRotateY(x, y, angle){ return (x * sin(angle) + y * cos(angle)); }

//w̍W(0, 0, 0)ɎO]W擾i]yz, zx, xyj
function GetRotate3D(x, y, z, ayz, azx, axy)
{
	let x1 = x;
	let y1 = GetRotateX(y, z, ayz);
	let z1 = GetRotateY(y, z, ayz);
	let x2 = GetRotateY(z1, x1, azx);
	let y2 = y1;
	let z2 = GetRotateX(z1, x1, azx);
	let ret = [GetRotateX(x2, y2, axy), GetRotateY(x2, y2, axy), z2];

	return ret;
}

//^XNň莞Ԓ~֐
function Wait(wait)
{
	loop( wait ){
		yield;
	}
}

