- fixed: IsVisibleToPlayer needs to be checked for the owner of owned dynamic lights.

This commit is contained in:
Christoph Oelckers 2013-11-30 13:15:22 +01:00
parent 992994239b
commit 9ac3b6aa1b
2 changed files with 36 additions and 29 deletions

View File

@ -183,6 +183,10 @@ bool gl_SetupLight(Plane & p, ADynamicLight * light, Vector & nearPt, Vector & u
{ {
return false; return false;
} }
if (light->owned && light->target != NULL && !light->target->IsVisibleToPlayer())
{
return false;
}
scale = 1.0f / ((2.f * radius) - dist); scale = 1.0f / ((2.f * radius) - dist);

View File

@ -79,42 +79,45 @@ bool gl_GetSpriteLight(AActor *self, fixed_t x, fixed_t y, fixed_t z, subsector_
while (node) while (node)
{ {
light=node->lightsource; light=node->lightsource;
if (!(light->flags2&MF2_DORMANT) && if (!light->owned || light->target == NULL || light->target->IsVisibleToPlayer())
(!(light->flags4&MF4_DONTLIGHTSELF) || light->target != self))
{ {
float dist = FVector3( FIXED2FLOAT(x - light->x), FIXED2FLOAT(y - light->y), FIXED2FLOAT(z - light->z) ).Length(); if (!(light->flags2&MF2_DORMANT) &&
radius = light->GetRadius() * gl_lights_size; (!(light->flags4&MF4_DONTLIGHTSELF) || light->target != self))
if (dist < radius)
{ {
frac = 1.0f - (dist / radius); float dist = FVector3(FIXED2FLOAT(x - light->x), FIXED2FLOAT(y - light->y), FIXED2FLOAT(z - light->z)).Length();
radius = light->GetRadius() * gl_lights_size;
if (frac > 0) if (dist < radius)
{ {
if (line != NULL) frac = 1.0f - (dist / radius);
{
if (P_PointOnLineSide(light->x, light->y, line) != side)
{
node = node->nextLight;
continue;
}
}
lr = light->GetRed() / 255.0f * gl_lights_intensity;
lg = light->GetGreen() / 255.0f * gl_lights_intensity;
lb = light->GetBlue() / 255.0f * gl_lights_intensity;
if (light->IsSubtractive())
{
float bright = FVector3(lr, lg, lb).Length();
FVector3 lightColor(lr, lg, lb);
lr = (bright - lr) * -1;
lg = (bright - lg) * -1;
lb = (bright - lb) * -1;
}
out[0] += lr * frac; if (frac > 0)
out[1] += lg * frac; {
out[2] += lb * frac; if (line != NULL)
changed = true; {
if (P_PointOnLineSide(light->x, light->y, line) != side)
{
node = node->nextLight;
continue;
}
}
lr = light->GetRed() / 255.0f * gl_lights_intensity;
lg = light->GetGreen() / 255.0f * gl_lights_intensity;
lb = light->GetBlue() / 255.0f * gl_lights_intensity;
if (light->IsSubtractive())
{
float bright = FVector3(lr, lg, lb).Length();
FVector3 lightColor(lr, lg, lb);
lr = (bright - lr) * -1;
lg = (bright - lg) * -1;
lb = (bright - lb) * -1;
}
out[0] += lr * frac;
out[1] += lg * frac;
out[2] += lb * frac;
changed = true;
}
} }
} }
} }