#include_script".\LocalData.txt"
#include_script".\MainLoop.txt"
#include_script".\ThreadMain.txt"


function InitializeSystem
{
	ascent(a in 0..length(tex)){LoadGraphic(tex[a]);}
	LoadPlayerShotData(GetCurrentScriptDirectory~"/UseShotData.txt");
	SetRebirthFrame(8);
	SetRebirthFrameReduction(0);
	SetItemCollectLine(cenY+40);
	SetPlayerLifeImage(tex[TEX_PLAYER],48,0,96,48);
	SetSpeed(3.5,0);
	SetGrazeCircle(69);
	SetInitialBombCount(2);
	
	ThreadMain;
}




function FinalizeSystem
{
	ascent(a in 0..length(tex)){DeleteGraphic(tex[a]);}
}

function PlayerSpellSystem
{
	let arg=[lockon_pos[0],lockon_pos[1],GetPlayerBomb,lightmode];
	if(!player_flg[FLG_SLOW])
	{
		arg[0]=lockon_pos[2];
		arg[1]=lockon_pos[3];
	}
	AddBomb(-GetPlayerBomb);
	SpellCutIn;
	UseSpellCard("CherryBomb",arg);
}




task SpellCutIn
{
	let scalebase=0.8;
	let scale=scalebase;
	PlaySE("sePlayerSpellCard.wav");
	let obj=SetObject;
	ObjEffect_SetRenderState(obj,ALPHA);
	ObjEffect_SetLayer(obj,6);
	let alpha=0;
	let count=0;
	let sx=cenX;
	let sy=cenY-100;
	let yp=10;
	while(!Obj_BeDeleted(obj))
	{
		Obj_SetPosition(obj,sx,sy);
		ObjEffect_SetScale(obj,scale,scale);
		ascent(a in 0..4){ObjEffect_SetVertexColor(obj,a,alpha,255,255,255);}
		
		if(count==0&&alpha<240){alpha+=15;}
		if(alpha>=240||count>=1)
		{
			let scp=0.001*count;
			if(!lightmode){Aura(sx,sy,scp);}
			if(count>50){alpha-=20;}
			if(alpha<0){Obj_Delete(obj);}
			count++;
		}
		sy+=yp;
		yp/=1.1;
		yield;
	}
	
	task Aura(let x,let y,let scp)
	{
		let obj=SetObject;
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_SetLayer(obj,5);
		let alpha=64;
		let scale=scalebase;
		let count=0;
		while(alpha>4)
		{
			Obj_SetPosition(obj,x,y);
			ObjEffect_SetScale(obj,scale,scale);
			ascent(a in 0..4)
			{
				ObjEffect_SetVertexColor(obj,a,alpha,128,128,128);
			}
			alpha-=4;
			scale+=scp;
			count++;
			yield;
		}
		Obj_Delete(obj);
	}
	
	function SetObject
	{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,tex[TEX_CUTIN]);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_CreateVertex(obj,4);
		SetRect(obj,0,0,512,512);
		return obj;
	}
	
	function SetRect(let obj,let reft,let up,let right,let down)
	{
		let texture_rect=[reft+1,up+1,right-1,down-1];
		let leng_h=texture_rect[2]-texture_rect[0];
		let leng_v=texture_rect[3]-texture_rect[1];
		
		ObjEffect_SetVertexXY(obj,0,-leng_h/2,-leng_v/2);
		ObjEffect_SetVertexXY(obj,1,-leng_h/2, leng_v/2);
		ObjEffect_SetVertexXY(obj,2, leng_h/2,-leng_v/2);
		ObjEffect_SetVertexXY(obj,3, leng_h/2, leng_v/2);
		
		ObjEffect_SetVertexUV(obj,0,texture_rect[0],texture_rect[1]);
		ObjEffect_SetVertexUV(obj,1,texture_rect[0],texture_rect[3]);
		ObjEffect_SetVertexUV(obj,2,texture_rect[2],texture_rect[1]);
		ObjEffect_SetVertexUV(obj,3,texture_rect[2],texture_rect[3]);
	}
}