let imglifebar = GetCurrentScriptDirectory~"lib\lifebar.png";//\ႤƂ͗vύX
LoadGraphic(imglifebar);
let extendframe = 15;
function SetMarker(percent)
{
	let angle=(360*(percent*0.01))-90;
	_taskmarker(angle);
}
function CreateLifebar(hp, onspell, full, rate1, rate2)
{
	let i = 1;
	if(onspell)
	{
		if(full)
		{
			loop(100)
			{
				_appearlifebar(hp, i);
				i-=0.01;
			}
			_lifebar(hp, true, false, rate1, rate2);
		}
		else{_lifebar(hp, false, true, rate1, rate2);}
	}
	else
	{
		if(full)
		{
			loop(100)
			{
				_appearlifebar(hp, i);
				i-=0.01;
			}
			_lifebar(hp, true, false, rate1, rate2);
		}
		else
		{
			loop(100)
			{
				_appearlifebar(hp, i);
				i-=0.01;
			}
			_lifebar(hp, false, false, rate1, rate2);
			_lifebar(0, false, true, rate1, rate2);
		}
	}
}
if(extendframe<=0){extendframe=1}
task _lifebar(maxlp, normal, spell, rate1, rate2)
{
	let angle = -90;
	let i = 1;
	if(normal == true && spell == false)
	{
		_taskemptylifebar;
		loop(extendframe){yield;}
		SetDamageRate(rate1, rate2);
		loop(100)
		{
			_tasklifebar(maxlp, angle, i);
			i-=0.01;
			angle+=3.6;
		}
	}
	if(normal == false)
	{
		if(spell == true)
		{
			_taskemptylifebar;
			angle = -90-(3.6*0.1*100);
			if(maxlp==0){loop(extendframe){yield}}
			SetDamageRate(rate1, rate2);
			loop(100)
			{
				_tasklifebar(maxlp, angle, i);
				i-=0.01;
				angle+=(3.6*0.1);
			}
		}
		else
		{
			_taskemptylifebar;
			loop(extendframe){yield;}
			SetDamageRate(rate1, rate2);
			loop(100)
			{
				_tasklifebar(maxlp, angle, i);
				i-=0.01;
				angle+=(3.6*0.9);
			}
		}
	}
}
task _taskemptylifebar
{
	let obj = Obj_Create(OBJ_EFFECT);
	let x = GetX;
	let y = GetY;
	Obj_SetPosition(obj, x, y);
	ObjEffect_SetTexture(obj, imglifebar);
	ObjEffect_SetRenderState(obj, ALPHA);
	ObjEffect_SetAngle(obj, 0, 0, 0);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_SetLayer(obj, 4);
	ObjEffect_SetScale(obj, 0.8, 0.8);
	ObjEffect_CreateVertex(obj, 4);
	ObjEffect_SetVertexXY(obj, 0, -80, -80);
	ObjEffect_SetVertexXY(obj, 1,  80, -80);
	ObjEffect_SetVertexXY(obj, 2, -80,  80);
	ObjEffect_SetVertexXY(obj, 3,  80,  80);
	
	ObjEffect_SetVertexUV(obj, 0,   0,   8);
	ObjEffect_SetVertexUV(obj, 1, 160,   8);
	ObjEffect_SetVertexUV(obj, 2,   0, 168);
	ObjEffect_SetVertexUV(obj, 3, 160, 168);
	while(!Obj_BeDeleted(obj))
	{
		Obj_SetPosition(obj, GetX, GetY);
		if(GetObjDistance(GetX, GetY, GetPlayerX, GetPlayerY)<90)
		{
			ObjEffect_SetVertexColor(obj, 0, 100, 0, 0, 0);
			ObjEffect_SetVertexColor(obj, 1, 100, 0, 0, 0);
			ObjEffect_SetVertexColor(obj, 2, 100, 0, 0, 0);
			ObjEffect_SetVertexColor(obj, 3, 100, 0, 0, 0);
		}
		else
		{
			ObjEffect_SetVertexColor(obj, 0, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 1, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 2, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 3, 255, 255, 255, 255);
			
		}
		
		yield;
	}
}
task _taskmarker(angle)
{
	let obj = Obj_Create(OBJ_EFFECT);
	let x = GetX;
	let y = GetY;
	Obj_SetPosition(obj, x, y);
	ObjEffect_SetTexture(obj, imglifebar);
	ObjEffect_SetRenderState(obj, ALPHA);
	ObjEffect_SetAngle(obj, 0, 0, angle);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
	ObjEffect_SetLayer(obj, 6);
	ObjEffect_SetScale(obj, 0.8, 0.8);
	ObjEffect_CreateVertex(obj, 3);
	ObjEffect_SetVertexXY(obj, 0,  0,  4);
	ObjEffect_SetVertexXY(obj, 1, 82,  1);
	ObjEffect_SetVertexXY(obj, 2, 82,  7);
	
	ObjEffect_SetVertexUV(obj, 0, 80,  4);
	ObjEffect_SetVertexUV(obj, 1, 160,  1);
	ObjEffect_SetVertexUV(obj, 2, 160,  7);
	
	while(!Obj_BeDeleted(obj))
	{
		Obj_SetPosition(obj, GetX, GetY);
		if(GetObjDistance(GetX, GetY, GetPlayerX, GetPlayerY)<90)
		{
			ObjEffect_SetVertexColor(obj, 0, 100, 0, 0, 0);
			ObjEffect_SetVertexColor(obj, 1, 100, 0, 0, 0);
			ObjEffect_SetVertexColor(obj, 2, 100, 0, 0, 0);
		}
		else
		{
			ObjEffect_SetVertexColor(obj, 0, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 1, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 2, 255, 255, 255, 255);
		}
		yield;
	}
}
task _appearlifebar(maxlp, i)
{
	let obj = Obj_Create(OBJ_EFFECT);
	let x = GetX;
	let y = GetY;
	let angle2 = -90;
	Obj_SetPosition(obj, x, y);
	ObjEffect_SetTexture(obj, imglifebar);
	ObjEffect_SetRenderState(obj, ALPHA);
	ObjEffect_SetAngle(obj, 0, 0, 0);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
	ObjEffect_SetLayer(obj, 5);
	ObjEffect_SetScale(obj, 0.8, 0.8);
	ObjEffect_CreateVertex(obj, 3);
	ObjEffect_SetVertexXY(obj, 0,  1,  4);
	ObjEffect_SetVertexXY(obj, 1, 80,  1);
	ObjEffect_SetVertexXY(obj, 2, 80,  7);
	
	ObjEffect_SetVertexUV(obj, 0,  1,  4);
	ObjEffect_SetVertexUV(obj, 1, 80,  1);
	ObjEffect_SetVertexUV(obj, 2, 80,  7);
	let lp = maxlp * i;
	SetDamageRate(0, 0);
	loop(extendframe)
	{
		Obj_SetPosition(obj, GetX, GetY);
		ObjEffect_SetAngle(obj, 0, 0, angle2);
		angle2-=(360*i)/extendframe;
		if(GetLife<lp)
		{
			Obj_Delete(obj);
		}
		if(GetObjDistance(GetX, GetY, GetPlayerX, GetPlayerY)<90)
		{
			ObjEffect_SetVertexColor(obj, 0, 100, 128, 128, 128);
			ObjEffect_SetVertexColor(obj, 1, 100, 128, 128, 128);
			ObjEffect_SetVertexColor(obj, 2, 100, 128, 128, 128);
		}
		else
		{
			ObjEffect_SetVertexColor(obj, 0, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 1, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 2, 255, 255, 255, 255);
			
		}
		yield;
	}
	Obj_Delete(obj);
}
task _tasklifebar(maxlp, angle, i)
{
	let obj = Obj_Create(OBJ_EFFECT);
	let x = GetX;
	let y = GetY;
	let angle2 = -90;
	Obj_SetPosition(obj, x, y);
	ObjEffect_SetTexture(obj, imglifebar);
	ObjEffect_SetRenderState(obj, ALPHA);
	ObjEffect_SetAngle(obj, 0, 0, angle);
	ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
	ObjEffect_SetLayer(obj, 5);
	ObjEffect_SetScale(obj, 0.8, 0.8);
	ObjEffect_CreateVertex(obj, 3);
	ObjEffect_SetVertexXY(obj, 0,  1,  4);
	ObjEffect_SetVertexXY(obj, 1, 80,  2);
	ObjEffect_SetVertexXY(obj, 2, 80,  7);
	
	ObjEffect_SetVertexUV(obj, 0,  1,  4);
	ObjEffect_SetVertexUV(obj, 1, 80,  2);
	ObjEffect_SetVertexUV(obj, 2, 80,  7);
	let lp = maxlp * i;
	while(!Obj_BeDeleted(obj))
	{
			
		Obj_SetPosition(obj, GetX, GetY);
		if(GetLife<lp)
		{
			Obj_Delete(obj);
		}
		if(GetObjDistance(GetX, GetY, GetPlayerX, GetPlayerY)<90)
		{
			ObjEffect_SetVertexColor(obj, 0, 100, 128, 128, 128);
			ObjEffect_SetVertexColor(obj, 1, 100, 128, 128, 128);
			ObjEffect_SetVertexColor(obj, 2, 100, 128, 128, 128);
		}
		else
		{
			ObjEffect_SetVertexColor(obj, 0, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 1, 255, 255, 255, 255);
			ObjEffect_SetVertexColor(obj, 2, 255, 255, 255, 255);
			
		}
		yield;
	}
}
function GetObjDistance(
	let xA,		// _AxW
	let yA,		// _AyW
	let xB,		// _BxW
	let yB		// _ByW
){
	return ( ( xB - xA ) ^ 2 + ( yB - yA ) ^ 2 ) ^ 0.5;
}