I would solve that with a shader and a sprite...
passing the distance to the shader and it sets transparence to 0 or 1...
here's the shader...:
Code:
float4x4 matWorldViewProj;
float3 lineColor = {0.0,1.0,0.0};
float2 vecSkill41;
float4 vecColor;
void circleVS( in float4 pos :POSITION,
in float2 tex :TEXCOORD0,
out float4 oPos:POSITION,
out float2 oTex:TEXCOORD0)
{
oPos = mul(pos,matWorldViewProj);
oTex = tex;
}
float4 circlePS(in float2 texcrd:TEXCOORD0):COLOR
{
float pDist = distance(float2(0.5,0.5),texcrd);
float4 Color;
Color.rgb = lineColor;
if(pDist>vecSkill41.x-vecSkill41.y&&pDist<vecSkill41.x)
Color.w = vecColor.w;
else
Color.w = 0;
return Color;
}
technique circle
{
pass p0
{
vertexshader = compile vs_2_0 circleVS();
pixelshader = compile ps_2_0 circlePS();
}
}
...and here a little script you can try it with
Code:
MATERIAL* circleMtl =
{
effect="circle.fx";
}
void main()
{
float circleAnm = 0;
level_load(NULL);
you=ent_create("circle.tga",nullvector,NULL);
your.tilt = 90;
your.skill42 = floatv(0.02);
your.material = circleMtl;
set(your,TRANSLUCENT);
watched=you;
while(1)
{
circleAnm += 0.7*time_step;
if(circleAnm>50)
circleAnm=0;
your.skill41 = floatv(circleAnm/100);
your.alpha = 100-circleAnm*2;
wait(1);
}
}
have fun with it...(ofc you can also use more than one line with it

)