2011-12-17 16:37:07 +00:00
|
|
|
/*FTE has some special light editing builtins, I don't ever expect them to be standard or anything, but they're handy for this*/
|
|
|
|
|
|
|
|
/*you probably want to change this if you're running hexen2*/
|
|
|
|
var string autocvar_cg_editor_lightmodel = "progs/s_light.spr";
|
|
|
|
|
2012-12-04 18:19:20 +00:00
|
|
|
var float autocvar_r_editlights_import_ambient = 0;
|
|
|
|
var float autocvar_r_editlights_import_diffuse = 1;
|
|
|
|
var float autocvar_r_editlights_import_specular = 1;
|
|
|
|
|
2011-12-17 16:37:07 +00:00
|
|
|
static float selectedlight;
|
|
|
|
static float editfield;
|
|
|
|
static string editvalue;
|
|
|
|
static entity tempent;
|
2012-12-04 18:19:20 +00:00
|
|
|
static float helphidden;
|
2011-12-17 16:37:07 +00:00
|
|
|
void() editor_lights_add =
|
|
|
|
{
|
|
|
|
float l;
|
|
|
|
if (!tempent)
|
|
|
|
tempent = spawn();
|
|
|
|
|
|
|
|
l = dynamiclight_get(-1, -1);
|
|
|
|
precache_model(autocvar_cg_editor_lightmodel); /*just to silence it*/
|
|
|
|
setmodel(tempent, autocvar_cg_editor_lightmodel);
|
|
|
|
while(l > 0)
|
|
|
|
{
|
2012-01-28 10:31:55 +00:00
|
|
|
l = l-1.0;
|
2011-12-17 16:37:07 +00:00
|
|
|
if (l == selectedlight)
|
|
|
|
{
|
2012-01-28 10:31:55 +00:00
|
|
|
if (gettime(0)*5f & 1)
|
2011-12-17 16:37:07 +00:00
|
|
|
continue;
|
2012-01-28 10:31:55 +00:00
|
|
|
tempent.effects |= 8192f;
|
2011-12-17 16:37:07 +00:00
|
|
|
}
|
|
|
|
else
|
2012-01-28 10:31:55 +00:00
|
|
|
tempent.effects &~= 8192f;
|
2011-12-17 16:37:07 +00:00
|
|
|
if (!(float)dynamiclight_get(l, LFIELD_RADIUS))
|
|
|
|
continue;
|
|
|
|
setorigin(tempent, dynamiclight_get(l, LFIELD_ORIGIN));
|
|
|
|
addentity(tempent);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-01-28 10:31:55 +00:00
|
|
|
#define NUMLFIELDS 14
|
2012-12-04 18:19:20 +00:00
|
|
|
#define NUMCMDS 7
|
|
|
|
static string fldname[NUMLFIELDS+1+NUMCMDS] = { "bad",
|
2012-01-28 10:31:55 +00:00
|
|
|
" num",
|
|
|
|
" org",
|
|
|
|
" rgb",
|
|
|
|
" rad",
|
|
|
|
" flg",
|
|
|
|
" sty",
|
|
|
|
" ang",
|
|
|
|
" fov",
|
|
|
|
" cmp",
|
|
|
|
" cor",
|
|
|
|
" csc",
|
|
|
|
" amb",
|
|
|
|
" dif",
|
2012-12-04 18:19:20 +00:00
|
|
|
" spc",
|
|
|
|
|
|
|
|
"Save",
|
|
|
|
"World Lights",
|
|
|
|
"Dynamic Lights",
|
|
|
|
"Toggle Help",
|
|
|
|
"Wipe All",
|
|
|
|
"Import",
|
|
|
|
"Reload"
|
2011-12-17 16:37:07 +00:00
|
|
|
};
|
2012-01-28 10:31:55 +00:00
|
|
|
static string(int fld, float foredit) readfield =
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
switch(fld)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
if (foredit)
|
|
|
|
return ftos(selectedlight);
|
2012-01-28 10:31:55 +00:00
|
|
|
return strcat(ftos(selectedlight), " / ", ftos(dynamiclight_get(-1f, -1f)));
|
2011-12-17 16:37:07 +00:00
|
|
|
case 2:
|
|
|
|
return vtos(dynamiclight_get(selectedlight, LFIELD_ORIGIN));
|
|
|
|
case 3:
|
|
|
|
return vtos(dynamiclight_get(selectedlight, LFIELD_COLOUR));
|
|
|
|
case 4:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_RADIUS));
|
|
|
|
case 5:
|
|
|
|
float fl = (float)dynamiclight_get(selectedlight, LFIELD_FLAGS);
|
|
|
|
string ret;
|
|
|
|
ret = strcat(ret, (fl & LFLAG_NORMALMODE)?"d":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_REALTIMEMODE)?"w":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_LIGHTMAP)?"l":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_FLASHBLEND)?"f":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_NOSHADOWS)?"c":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_SHADOWMAP)?"s":"");
|
|
|
|
ret = strcat(ret, (fl & LFLAG_CREPUSCULAR)?"r":"");
|
|
|
|
return ret;
|
|
|
|
case 6:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_STYLE));
|
|
|
|
case 7:
|
|
|
|
return vtos(dynamiclight_get(selectedlight, LFIELD_ANGLES));
|
|
|
|
case 8:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_FOV));
|
2011-12-27 08:35:59 +00:00
|
|
|
case 9:
|
|
|
|
return (string)dynamiclight_get(selectedlight, LFIELD_CUBEMAPNAME);
|
|
|
|
case 10:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_CORONA));
|
|
|
|
case 11:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_CORONASCALE));
|
2012-01-28 10:31:55 +00:00
|
|
|
case 12:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_AMBIENTSCALE));
|
|
|
|
case 13:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_DIFFUSESCALE));
|
|
|
|
case 14:
|
|
|
|
return ftos(dynamiclight_get(selectedlight, LFIELD_SPECULARSCALE));
|
2011-12-17 16:37:07 +00:00
|
|
|
default:
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
static void(float fld, string newval) writefield =
|
|
|
|
{
|
|
|
|
switch(fld)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
selectedlight = stof(newval);
|
|
|
|
return;
|
|
|
|
case 2:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ORIGIN, stov(newval));
|
|
|
|
return;
|
|
|
|
case 3:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_COLOUR, stov(newval));
|
|
|
|
return;
|
|
|
|
case 4:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, stof(newval));
|
|
|
|
return;
|
|
|
|
case 5:
|
|
|
|
float fl;
|
|
|
|
if (strstrofs(newval, "d")>=0) fl |= LFLAG_NORMALMODE;
|
|
|
|
if (strstrofs(newval, "w")>=0) fl |= LFLAG_REALTIMEMODE;
|
|
|
|
if (strstrofs(newval, "l")>=0) fl |= LFLAG_LIGHTMAP;
|
|
|
|
if (strstrofs(newval, "f")>=0) fl |= LFLAG_FLASHBLEND;
|
|
|
|
if (strstrofs(newval, "c")>=0) fl |= LFLAG_NOSHADOWS;
|
|
|
|
if (strstrofs(newval, "s")>=0) fl |= LFLAG_SHADOWMAP;
|
|
|
|
if (strstrofs(newval, "r")>=0) fl |= LFLAG_CREPUSCULAR;
|
2012-01-28 10:31:55 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_FLAGS, (float)fl);
|
2011-12-17 16:37:07 +00:00
|
|
|
return;
|
|
|
|
case 6:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_STYLE, stof(newval));
|
|
|
|
return;
|
|
|
|
case 7:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ANGLES, stov(newval));
|
|
|
|
return;
|
|
|
|
case 8:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_FOV, stof(newval));
|
2011-12-27 08:35:59 +00:00
|
|
|
return;
|
|
|
|
case 9:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_CUBEMAPNAME, newval);
|
|
|
|
return;
|
|
|
|
case 10:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_CORONA, stof(newval));
|
|
|
|
return;
|
|
|
|
case 11:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_CORONASCALE, stof(newval));
|
|
|
|
return;
|
2012-01-28 10:31:55 +00:00
|
|
|
case 12:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_AMBIENTSCALE, stof(newval));
|
|
|
|
return;
|
|
|
|
case 13:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_DIFFUSESCALE, stof(newval));
|
|
|
|
return;
|
|
|
|
case 14:
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_SPECULARSCALE, stof(newval));
|
|
|
|
return;
|
2011-12-17 16:37:07 +00:00
|
|
|
default:
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void(vector m) editor_lights_overlay =
|
|
|
|
{
|
2012-01-28 10:31:55 +00:00
|
|
|
int i;
|
2011-12-17 16:37:07 +00:00
|
|
|
string s;
|
|
|
|
vector col;
|
|
|
|
|
2012-01-28 10:31:55 +00:00
|
|
|
m_y = floor((m_y - 32f) / 8f);
|
2011-12-17 16:37:07 +00:00
|
|
|
|
2012-01-28 10:31:55 +00:00
|
|
|
for (i = 1f; i <= NUMLFIELDS; i++)
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
if (editfield == i)
|
|
|
|
s = editvalue;
|
|
|
|
else
|
|
|
|
s = readfield(i, 0);
|
|
|
|
s = strcat(ftos(i), " ", fldname[i], ": ", s);
|
|
|
|
|
|
|
|
if (editfield == i)
|
|
|
|
col = '1 0 0';
|
|
|
|
else if (m_y == i && m_x < 64)
|
|
|
|
col = '0 0 1';
|
|
|
|
else
|
|
|
|
col = '1 1 1';
|
|
|
|
|
2012-01-28 10:31:55 +00:00
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, s, '8 8 0', col, 1);
|
2011-12-17 16:37:07 +00:00
|
|
|
}
|
|
|
|
|
2012-12-04 18:19:20 +00:00
|
|
|
for (i = NUMLFIELDS+1f; i <= NUMLFIELDS+NUMCMDS; i++)
|
|
|
|
{
|
|
|
|
s = strcat(ftos(i), " ", fldname[i]);
|
|
|
|
|
|
|
|
if (editfield == i)
|
|
|
|
col = '1 0 0';
|
|
|
|
else if (m_y == i && m_x < 64)
|
|
|
|
col = '0 0 1';
|
|
|
|
else
|
|
|
|
col = '1 1 1';
|
|
|
|
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, s, '8 8 0', col, 1);
|
|
|
|
}
|
|
|
|
i+=1i;
|
|
|
|
|
|
|
|
if (helphidden)
|
|
|
|
return;
|
2011-12-17 16:37:07 +00:00
|
|
|
|
|
|
|
if (editfield == 5)
|
|
|
|
{
|
2012-12-04 18:19:20 +00:00
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "d: dynamic mode\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "w: realtime world lights mode\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "l: lightmap hack (not valid above index 32)\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "f: flashblend coronas\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "c: does not cast shadows\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "s: shadowmapped light\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "r: crepuscular rays\n", '8 8 0', '1 1 1', 1); i+=1i;
|
2011-12-17 16:37:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-12-04 18:19:20 +00:00
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "+/- change selected light\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "mouse also selects lights\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "m moves the light to the crosshair\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "i inserts new light\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "@ changes the light's radius\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "# changes the light's shadow flag\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "p points the light to aim at the crosshair\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "[ and ] move the light towards/away from indicated plane\n", '8 8 0', '1 1 1', 1); i+=1i;
|
|
|
|
drawrawstring('0 32 0' + '0 8 0' * (float)i, "don't forget to save\n", '8 8 0', '1 1 1', 1); i+=1i;
|
2011-12-17 16:37:07 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
static void(vector fwd, vector vorg) selectbestlight =
|
|
|
|
{
|
|
|
|
float l, b=selectedlight, d, bd;
|
|
|
|
vector ldir;
|
2012-01-28 10:31:55 +00:00
|
|
|
l = dynamiclight_get(-1f, -1f);
|
2011-12-17 16:37:07 +00:00
|
|
|
while(l > 0)
|
|
|
|
{
|
|
|
|
l--;
|
|
|
|
ldir = dynamiclight_get(l, LFIELD_ORIGIN);
|
|
|
|
ldir = normalize(ldir - vorg);
|
|
|
|
d = fwd*ldir;
|
|
|
|
if (d > bd)
|
|
|
|
{
|
|
|
|
bd = d;
|
|
|
|
b = l;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
selectedlight = b;
|
|
|
|
};
|
|
|
|
|
|
|
|
float(float keyc, float unic, vector m) editor_lights_key =
|
|
|
|
{
|
|
|
|
vector t = unproject(m + '0 0 8192');
|
|
|
|
vector o = unproject(m);
|
|
|
|
string ns;
|
2012-12-04 18:19:20 +00:00
|
|
|
if (keyc == 512 || (!editfield && unic == 13 && m_x < 64))
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
if (editfield)
|
|
|
|
{
|
|
|
|
writefield(editfield, editvalue);
|
|
|
|
strunzone(editvalue);
|
|
|
|
editfield = 0;
|
|
|
|
}
|
2012-01-28 10:31:55 +00:00
|
|
|
editfield = floor((m_y - 32f) / 8f);
|
2012-12-04 18:19:20 +00:00
|
|
|
if (editfield <= 0 || editfield > NUMLFIELDS+NUMCMDS || m_x >= 64)
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
editfield = 0;
|
|
|
|
|
|
|
|
selectbestlight(t - o, o);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (editfield > NUMLFIELDS)
|
|
|
|
{
|
|
|
|
switch(editfield - (NUMLFIELDS+1))
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
localcmd("r_editlights_save\n");
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
localcmd("toggle r_shadow_realtime_world\n");
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
localcmd("toggle r_shadow_realtime_dynamic\n");
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
helphidden = !helphidden;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
localcmd("r_editlights_reload none\n");
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
localcmd("r_editlights_reload bsp\n");
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
localcmd("r_editlights_reload\n");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
editfield = 0;
|
|
|
|
}
|
2011-12-17 16:37:07 +00:00
|
|
|
else
|
|
|
|
editvalue = strzone(readfield(editfield, 1));
|
|
|
|
}
|
|
|
|
else if (editfield)
|
|
|
|
{
|
|
|
|
ns = strcat(editvalue);
|
|
|
|
if (keyc == 10 || keyc == 13)
|
|
|
|
{
|
|
|
|
writefield(editfield, ns);
|
|
|
|
editfield = 0;
|
|
|
|
}
|
|
|
|
else if (keyc == 127)
|
|
|
|
{
|
|
|
|
if (ns != "")
|
|
|
|
ns = substring(ns, 0, -2);
|
|
|
|
}
|
|
|
|
else if (keyc == 8)
|
|
|
|
{
|
|
|
|
ns = "";
|
|
|
|
}
|
|
|
|
else
|
|
|
|
ns = strcat(ns, chr2str(unic));
|
|
|
|
|
|
|
|
ns = strzone(ns);
|
|
|
|
strunzone(editvalue);
|
|
|
|
editvalue = ns;
|
|
|
|
|
|
|
|
writefield(editfield, ns);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic >= '0' && unic <= '9')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
2012-12-04 18:19:20 +00:00
|
|
|
editfield = unic - '0';
|
2011-12-17 16:37:07 +00:00
|
|
|
editvalue = strzone(readfield(editfield, 1));
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == '=')
|
2011-12-17 16:37:07 +00:00
|
|
|
selectedlight++;
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == '-')
|
2011-12-17 16:37:07 +00:00
|
|
|
selectedlight--;
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == 'n' || unic == 'N')
|
2011-12-17 16:37:07 +00:00
|
|
|
localcmd("noclip\n");
|
2012-12-04 18:19:20 +00:00
|
|
|
// else if (unic == 's' || unic == 'S')
|
2011-12-17 16:37:07 +00:00
|
|
|
// {
|
|
|
|
// selectbestlight(t - o, o);
|
|
|
|
// }
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == 'm' || unic == 'M')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
traceline(o, t, TRUE, world);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ORIGIN, trace_endpos + trace_plane_normal*4);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == 'p' || unic == 'P')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
traceline(o, t, TRUE, world);
|
2012-01-28 10:31:55 +00:00
|
|
|
vector ang = vectoangles((trace_endpos + trace_plane_normal*4f) - (vector)dynamiclight_get(selectedlight, LFIELD_ORIGIN));
|
|
|
|
ang_x *= -1f;
|
2011-12-17 16:37:07 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_ANGLES, ang);
|
|
|
|
|
|
|
|
/*if we're pointing the light at something, it should probably have a fov*/
|
2012-12-04 18:19:20 +00:00
|
|
|
if (!(float)dynamiclight_get(selectedlight, LFIELD_FOV))
|
2011-12-17 16:37:07 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_FOV, 90);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == 'i' || unic == 'I')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
for (selectedlight = 32; ; selectedlight++)
|
|
|
|
{
|
|
|
|
if (!(float)dynamiclight_get(selectedlight, LFIELD_RADIUS))
|
|
|
|
{
|
|
|
|
/*reset the light's properties*/
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, 300);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_COLOUR, '1 1 1');
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_FOV, 0);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_STYLE, 0);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ANGLES, '0 0 0');
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_FLAGS, LFLAG_REALTIMEMODE);
|
2012-12-04 18:19:20 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_AMBIENTSCALE, autocvar_r_editlights_import_ambient);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_DIFFUSESCALE, autocvar_r_editlights_import_diffuse);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_SPECULARSCALE, autocvar_r_editlights_import_specular);
|
2011-12-17 16:37:07 +00:00
|
|
|
|
|
|
|
/*place it at the pointed location*/
|
|
|
|
traceline(o, t, TRUE, world);
|
2012-01-28 10:31:55 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_ORIGIN, trace_endpos + trace_plane_normal*4f);
|
2011-12-17 16:37:07 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == '[')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
o = getproperty(11);
|
|
|
|
traceline(o, t, TRUE, world);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ORIGIN, dynamiclight_get(selectedlight, LFIELD_ORIGIN) - trace_plane_normal);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == ']')
|
2011-12-17 16:37:07 +00:00
|
|
|
{
|
|
|
|
o = getproperty(11);
|
|
|
|
traceline(o, t, TRUE, world);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_ORIGIN, dynamiclight_get(selectedlight, LFIELD_ORIGIN) + trace_plane_normal);
|
|
|
|
}
|
2012-12-04 18:19:20 +00:00
|
|
|
else if (unic == '\'' || unic == '@')
|
|
|
|
{
|
|
|
|
o = getproperty(11);
|
|
|
|
traceline(o, t, TRUE, world);
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, 1.5*vlen(trace_endpos - dynamiclight_get(selectedlight, LFIELD_ORIGIN)));
|
|
|
|
}
|
|
|
|
else if (unic == '#')
|
|
|
|
{
|
|
|
|
float fl;
|
|
|
|
fl = dynamiclight_get(selectedlight, LFIELD_FLAGS);
|
|
|
|
if (fl & LFLAG_NOSHADOWS)
|
|
|
|
fl -= LFLAG_NOSHADOWS;
|
|
|
|
else
|
|
|
|
fl += LFLAG_NOSHADOWS;
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_FLAGS, (float)fl);
|
|
|
|
}
|
|
|
|
else if (unic == '{')
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, dynamiclight_get(selectedlight, LFIELD_RADIUS) - 15);
|
|
|
|
else if (unic == '}')
|
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, dynamiclight_get(selectedlight, LFIELD_RADIUS) + 15);
|
|
|
|
else if (unic == 127)
|
2011-12-17 16:37:07 +00:00
|
|
|
dynamiclight_set(selectedlight, LFIELD_RADIUS, 0);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
|
|
};
|