#include "./PlayerAnimation.txt"
#include "./PlayerEffect.txt"

function GetCenterX(){return GetStgFrameWidth()/2;}
function GetCenterY(){return GetStgFrameHeight()/2;}
let GetClipMinX = 0;
let GetClipMinY = 0;
function GetClipMaxX(){return GetStgFrameWidth();}
function GetClipMaxY(){return GetStgFrameHeight();}

let Texture = current ~ "./img/reimu_shots.png";
//let TexSpirit = current ~ "./img/SpiritAttack.png";
let TexSpirit2 = current ~ "./img/Default_Player_MagicCircle.png";
let SE_GRAZE;
let SE_PDOWN;
//let SE_CHARGE;
//let SE_SENABLE;
//let SE_PSHOT;
//let SE_EPLAYER;
//let SE_ESPELL;
let SE_SPELL1;
let SE_SPELL2;
let SE_SPELL3;
let SE_SPELL4;

let charge = 0;
let spiritenable = false;
let SP_SPELL = 0;
let SP_USER = 1;

function LoadPlayerData{
	let path = current ~ "./reimuShotData.txt";
	LoadPlayerShotData(path); //e摜[h
	LoadTexture(Texture);
	SE_GRAZE = _LoadSE(current ~ "./se/graze.wav");
	SE_PDOWN = _LoadSE(current ~ "./se/playerdown.wav");
//	SE_CHARGE = _LoadSE(current ~ "./se/charge.wav");
//	SE_SENABLE = _LoadSE(current ~ "./se/spiritEnable.wav");
//	SE_PSHOT = _LoadSE(current ~ "./se/playershot.wav");
//	SE_EPLAYER = _LoadSE(current ~ "./se/extend1.wav");
//	SE_ESPELL = _LoadSE(current ~ "./se/extend2.wav");
	SE_SPELL1 = _LoadSE(current ~ "./se/spellA1.wav");
	SE_SPELL2 = _LoadSE(current ~ "./se/spellA2.wav");
	SE_SPELL3 = _LoadSE(current ~ "./se/spellB1.wav");
	SE_SPELL4 = _LoadSE(current ~ "./se/spellB2.wav");
	
	ObjMove_SetX(objPlayer,80);
	ObjMove_SetY(objPlayer,GetScreenHeight()/2);
}

function _PlaySE(SE){
	ObjSound_SetVolumeRate(SE, GetAreaCommonData("OptionArea", "SE_VOLUME", 100));
	ObjSound_Play(SE);
}

function _LoadSE(char){
	let obj = ObjSound_Create();
	ObjSound_Load(obj, char);
	ObjSound_SetSoundDivision(obj, SOUND_SE);
	return obj;
}

function init_system{
	SetPlayerLife(2);
	SetPlayerSpell(1);
	SetPlayerPower(400);
	SetPlayerDownStateFrame(60);
	SetPlayerRebirthFrame(20);
	SetPlayerRebirthLossFrame(0);
}

function main_system{
	yield;
}

function event_system{
	alternative(GetEventType())
	case(EV_REQUEST_SPELL){
		//XyJ[hv
		let spell = GetPlayerSpell();//cXy
		if(spell >= 1){
			//ʏ{
			SetScriptResult(true);//Xy\
			SetPlayerSpell(spell-1);//Xy1炷
			TSpell();//Xy^XNN
		}
		else{
			SetScriptResult(false);//Xys
		}
	}
	case(EV_HIT){
		//e
		_PlaySE(SE_PDOWN);
		TExplosion();
	}
	case(EV_PLAYER_SHOOTDOWN){
		//Ăꂽpower100ȂȂB
		//RgAEgƌĂĂp[ȂȂ
		SetPlayerPower(max(GetPlayerPower()-100, 100));
	}
	case(EV_PLAYER_REBIRTH){
		//A

		ObjMove_SetX(objPlayer,80);
		ObjMove_SetY(objPlayer,GetCenterY);
		//cXy1Ȃ[
		if(GetPlayerSpell() < 1){
			SetPlayerSpell(1);
		}
		//p[100ȉ畜A100ɖ߂
		//ĎɃIvV߂ɓĂ鏈
		if(GetPlayerPower < 100){
			SetPlayerPower(100);
		}
		//A4b͖G
		SetPlayerInvincibilityFrame(240);
	}
	case(EV_GRAZE){
		//OCYʒm
		_PlaySE(SE_GRAZE);
	}
}

//z[~OeɎg
//RAINS3pĂĂ܂
function Horming(toAngle, angle, dAngle){
	toAngle %= 360;
	angle %= 360;

	let ret = toAngle-angle;
	if(ret >= 180){ret -= 360;}//180ȏȂ-180`180ɕ␳
	if(ret < -180){ret += 360;}//-180Ȃ-180`180ɕ␳

	if((|ret|) < dAngle){
		angle = toAngle;
	}else{
		if(sin(ret) > 0){
			angle += dAngle;
		}else{
			angle -= dAngle;
		}
	}
	if(angle >= 360){angle -= 360;}
	if(angle < 0){angle += 360;}

	return angle;
}

//wʒuʊO狗Ă邩𒲂ׂ֐(boorean^)
function IsOut(x, y, d){
	if(absolute(GetCenterX-x) < (GetCenterX+d) &&
		absolute(GetCenterY-y) < (GetCenterY+d)){
		return false;
	}else{return true;}
}

//wʒu@狗𒲂ׂ֐(boorean^)
function InCurcleToPlayer(x, y, d){
	if((GetPlayerX-x)^2 + (GetPlayerY-y)^2 < d^2){
		return true;
	}else{return false;}
}

//wʒu玩@܂ł̋Ԃ֐(real^)
function GetDistanceToPlayer(x, y){
	let d = ((GetPlayerX-x)^2 + (GetPlayerY-y)^2)^0.5;
	return d;
}

//wʒu玩@܂ł̋̂QԂ֐(real^)
function GetDistanceToPlayer2(x, y){
	let d = (GetPlayerX-x)^2 + (GetPlayerY-y)^2;
	return d;
}
