//============================================
//XNvgpCu REMY
//Effect W[
//GtFNgIuWFNgpCu
//============================================

//}l[WhIuWFNgB
//܂Ƃ߂Ĕj\ɂB
let m_ManagedObjects = [];

//GtFNgIuWFNg̏----------------------------------


//texture:gpeNX`
//vert_num:쐬_
//layer:`惌C
//GtFNgIuWFNg쐬AIuWFNgIDԂ
function REMY_Effect_CreateObject(let texture, let vert_num, let layer)
{
	let obj = Obj_Create(OBJ_EFFECT);
	ObjEffect_SetTexture(obj, texture);
	ObjEffect_SetRenderState(obj, ADD);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_CreateVertex(obj, vert_num);
	ObjEffect_SetLayer(obj, layer);
	Obj_SetAutoDelete(obj,false);
	Obj_SetSpeed(obj,0);

	return obj;

}//end function



//lp̃GtFNgIuWFNg̒_p[^ݒ

//obj:IuWFNgID
//rect_array:UVl̔z [u1,v1,u2,v2] 
//center_array:XYSASǂꂾ炷̔z[x_cent, y_cent]
//              (:x_cent=-10,y_cent=10rect̒S10hbgXY(0,0)ɂȂ)
//argb_array:ARGBl̔z[alpha, red, green, blue]
//REMY_CreateEffectObject()ō쐬GtFNgIuWFNg̒_ݒp
//PRIMITIVE_TRIANGLESTRIPȊÕIuWFNgɂ͎g܂
function REMY_Effect_SetVertexSquare(let obj, let rect_array, let center_array, let argb_array)
{
	let x_size = (rect_array[2]-rect_array[0])/2;
	let y_size = (rect_array[3]-rect_array[1])/2;
	let x_cent = center_array[0];
	let y_cent = center_array[1];

	ascent(i in 0..4){
		ObjEffect_SetVertexXY(obj, i, [ -(x_size + x_cent), (x_size - x_cent)  ][trunc(i/2)], [ -(y_size + y_cent), (y_size - y_cent) ][i%2]);
		ObjEffect_SetVertexUV(obj, i, [ rect_array[0], rect_array[2] ][trunc(i/2)],[ rect_array[1], rect_array[3] ][i%2]);
		ObjEffect_SetVertexColor(obj, i, argb_array[0], argb_array[1] , argb_array[2], argb_array[3]);
	}
	return;

}//end function


//lp̃GtFNgIuWFNgUVύXBAj[VȂǂɁB
//obj:IuWFNgID
//UV:UVl̔z[u1, v1, u2, v2]
function REMY_Effect_SetUVSquare(let obj, let UV)
{
	ascent(i in 0..4){
		ObjEffect_SetVertexUV(obj, i,  [ UV[0],  UV[2] ][trunc(i/2)],[  UV[1],  UV[3] ][i%2]);
	}
	return;

}//end function

//lp̃GtFNgIuWFNg̒_ARGBύX
//obj:IuWFNgID
//argb:ARGBl̔z[alpha, red, green, blue]
function REMY_Effect_SetColorSquare(let obj, let argb)
{
	ascent(i in 0..4){
		ObjEffect_SetVertexColor(obj, i, argb[0], argb[1], argb[2], argb[3]);
	}
	return;

}//end function


//GtFNgIuWFNg̒_ARGBύXB͎lpɌ܂
//obj:IuWFNgID
//vert_num:_
//alpha,red,green,blue:At@ARGBl

function REMY_Effect_SetColorPolygon(let obj, let vert_num, let argb)
{
	ascent(i in 0..vert_num){
		ObjEffect_SetVertexColor(obj, i, argb[0], argb[1], argb[2], argb[3]);
	}
	return;

}//end function


//GtFNgIuWFNg̃tF[hAEg
task REMY_Effect_FadeDelete(let obj, let time, let vert_num, let start_color_array)
{
	let alpha = start_color_array[0];
	let red = start_color_array[1];
	let green = start_color_array[2];
	let blue = start_color_array[3];

	descent(i in 0..time)
	{
		let a = alpha * i / time;
		ascent(j in 0..vert_num){
			ObjEffect_SetVertexColor(obj, j, a, red, green, blue);
		}
		yield;
	}
	Obj_Delete(obj);

}//end task

//}l[WhIuWFNgɒǉB
function REMY_Effect_AddManagedObject(let obj)
{
	let l = length(m_ManagedObjects);
	descent(i in 0..l)
	{
		let objID = m_ManagedObjects[i];
		if(objID == obj || Obj_BeDeleted(objID))
		{
			m_ManagedObjects = erase(m_ManagedObjects, i);
		}
	}
	m_ManagedObjects = m_ManagedObjects ~ [obj];
}//end function

//}l[WhIuWFNg菜B
function REMY_Effect_RemoveManagedObject(let obj)
{
	let l = length(m_ManagedObjects);
	descent(i in 0..l)
	{
		if(m_ManagedObjects[i] == obj)
		{
			m_ManagedObjects = erase(m_ManagedObjects, i);
		}
	}
}//end function


//}l[WhIuWFNgSB
function REMY_Effect_VanishAllManagedObject(let obj)
{
	let l = length(m_ManagedObjects);
	ascent(i in 0..l)
	{
		let objID = m_ManagedObjects[i];
		if(!Obj_BeDeleted(objID))
		{
			Obj_Delete(objID);
		}
	}
	m_ManagedObjects = [];

}//end function


