LScript (Layout) generate stars for space background image maps.
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Stars
Image_Stars.ls
*/
@version 2.5
@warnings
@script image
@name *Stars
// Title
sTitle = "*Stars";
// Version
sVersion = "v1.0";
// Variable
Global_nOpacity = 1.0;
Stars_vColor = <255,255,255>;
Stars_iAmount = 200;
Stars_nOpacity = 0.2;
Stars_nMinSize = 1.0;
Stars_nMaxSize = 5.0;
create
{
setdesc(sTitle);
}
process: ifo
{
if(runningUnder() != SCREAMERNET) moninit(Stars_iAmount);
vColor = Stars_vColor * (1/255);
for(a = 1;a <= Stars_iAmount;++a)
{
v = ;
circleenhancedIFO(ifo,
v, // Vector
max(Stars_nMinSize,randu() * Stars_nMaxSize), // Size
0.0,// fade
vColor.x,vColor.y,vColor.z, // Color
Stars_nOpacity * Global_nOpacity); // Opacity
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
// IFO
circleenhancedIFO: ifo,v,s,f,r,g,b,o // vector,size,fade,red,green,blue,opacity
{
// Size <= 1
if(s <= 1)
{
o *= s;
if (v.x >= 1 && v.x <= ifo.width && v.y >= 1 && v.y <= ifo.height)
{
if(o >= 1.0)
{
ifo.red[v.x,v.y] = r;
ifo.green[v.x,v.y] = g;
ifo.blue[v.x,v.y] = b;
}
else if(o > 0.0)
{
ifo.red[v.x,v.y] = (ifo.red[v.x,v.y] * (1-o)) + (r * o);
ifo.green[v.x,v.y] = (ifo.green[v.x,v.y] * (1-o)) + (g * o);
ifo.blue[v.x,v.y] = (ifo.blue[v.x,v.y] * (1-o)) + (b * o);
}
}
return;
}
// Half Size
s *= 0.5;
// Grid
x0 = floor(v.x - s - 1);
y0 = floor(v.y - s - 1);
x1 = floor(v.x + s + 1);
y1 = floor(v.y + s + 1);
// Fade
_f = s * f;
// Draw
for(y = y0;y <= y1;++y)
{
for(x = x0;x <= x1;++x)
{
// Wrap
x2 = x;
if(x2 < 1){x2 = ifo.width - abs(mod(x2,ifo.width));}
if(x2 > ifo.width){x2 = mod(x2,ifo.width) + 1;}
y2 = y;
if(y2 < 1){y2 = ifo.height - abs(mod(y2,ifo.height));}
if(y2 > ifo.height){y2 = mod(y2,ifo.height) + 1;}
// Opacity
_o = 0.0;
d = distance2D(v,);
f_01 = maprange01(_f,s,d);
if(f_01 <= 0.0){_o = o;} // Inside
else if(f_01 <= 1.0)
{
_o = o * (1 - f_01);
}
if(_o >= 1.0)
{
ifo.red[x2,y2] = r;
ifo.green[x2,y2] = g;
ifo.blue[x2,y2] = b;
}
else if (_o > 0.0)
{
ifo.red[x2,y2] = (ifo.red[x2,y2] * (1-_o)) + (r * _o);
ifo.green[x2,y2] = (ifo.green[x2,y2] * (1-_o)) + (g * _o);
ifo.blue[x2,y2] = (ifo.blue[x2,y2] * (1-_o)) + (b * _o);
}
}
}
}
// MAP RANGE
maprange01: n1,n2,i
{
if(n2-n1 == 0.0){return(0.0);}
else
{return((1/(n2-n1)) * (i-n1));}
}
// VECTOR 2D
clip2D: v,x0,y0,x1,y1 // b
{
if((v.x >= x0) && (v.x <= x1) && (v.y >= y0) && (v.y <= y1)){return(false);}
else
return(true);
}
distance2D: v1, v2 // n
{
// Vector
return(sqrt(((v2.x - v1.x) * (v2.x - v1.x)) +
((v2.y - v1.y) * (v2.y - v1.y))));
}
linedistance2D: v1,v2,v3 // n
{
// Vector v1 from line v2 to v3
nSqrLineMagnitude = sqrlinemagnitude2D(v2,v3);
if(nSqrLineMagnitude < 0.00000000000001)
{
return(-1.0);
}
u = ((v1.x - v2.x) * (v3.x - v2.x) + (v1.y - v2.y) * (v3.y - v2.y)) / nSqrLineMagnitude;
if(u < 0.0000001 or u > 1)
{
x = distance2D(v1,v2);
y = distance2D(v1,v3);
return(min(x,y));
}
else
{
x = v2.x + u * (v3.x - v2.x);
y = v2.y + u * (v3.y - v2.y);
return(distance2D(v1,));
}
}
sqrlinemagnitude2D: v1,v2 // n
{
return((v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y));
}
//
load: what,io
{
if(what == SCENEMODE)
{
if(io.read().asStr() == sTitle + " " + sVersion)
{
// Global
Global_nOpacity = io.read().asNum();
// Stars
Stars_vColor = io.read().asVec();
Stars_iAmount = io.read().asInt();
Stars_nOpacity = io.read().asNum();
Stars_nMinSize = io.read().asNum();
Stars_nMaxSize = io.read().asNum();
}
}
}
save: what,io
{
if(what == SCENEMODE)
{
// Header
io.writeln(sTitle + " " + sVersion);
// Global
io.writeln(Global_nOpacity);
// Stars
io.writeln(Stars_vColor);
io.writeln(Stars_iAmount);
io.writeln(Stars_nOpacity);
io.writeln(Stars_nMinSize);
io.writeln(Stars_nMaxSize);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
// Global
ctrl_g0 = ctlnumber("Global Opacity",Global_nOpacity);
ctlsep();
ctrl_stars0 = ctlcolor("Color",Stars_vColor);
ctrl_stars1 = ctlinteger("Amount",Stars_iAmount);
ctrl_stars2 = ctlnumber("Opacity",Stars_nOpacity);
ctrl_stars3 = ctlnumber("Min Size",Stars_nMinSize);
ctrl_stars4 = ctlnumber("Max Size",Stars_nMaxSize);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
return if !reqpost();
Global_nOpacity = getvalue(ctrl_g0);
Stars_vColor = getvalue(ctrl_stars0);
Stars_iAmount = getvalue(ctrl_stars1);
Stars_nOpacity = getvalue(ctrl_stars2);
Stars_nMinSize = getvalue(ctrl_stars3);
Stars_nMaxSize = getvalue(ctrl_stars4);
reqend();
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
No comments:
Post a Comment