light: add "_surface_spotlight" key for making surface lights into spotlights based on the surface normal

This commit is contained in:
Eric Wasylishen 2015-10-25 20:09:50 -06:00
parent 1e9a0ac2b3
commit 7f1beca6b4
2 changed files with 14 additions and 2 deletions

View File

@ -1029,7 +1029,7 @@ WriteEntitiesToString(bsp2_t *bsp)
* ======================================================================= * =======================================================================
*/ */
static void CreateSurfaceLight(const vec3_t origin, const entity_t *surflight_template) static void CreateSurfaceLight(const vec3_t origin, const vec3_t normal, const entity_t *surflight_template)
{ {
entity_t *entity = DuplicateEntity(surflight_template); entity_t *entity = DuplicateEntity(surflight_template);
@ -1038,6 +1038,12 @@ static void CreateSurfaceLight(const vec3_t origin, const entity_t *surflight_te
/* don't write to bsp */ /* don't write to bsp */
entity->generated = true; entity->generated = true;
/* set spotlight vector based on face normal */
if (atoi(ValueForKey(surflight_template, "_surface_spotlight"))) {
entity->spotlight = true;
VectorCopy(normal, entity->spotvec);
}
num_lights++; num_lights++;
} }
@ -1070,7 +1076,7 @@ static void CreateSurfaceLightOnFaceSubdivision(const bsp2_dface_t *face, const
VectorMA(midpoint, offset, normal, midpoint); VectorMA(midpoint, offset, normal, midpoint);
CreateSurfaceLight(midpoint, surflight_template); CreateSurfaceLight(midpoint, normal, surflight_template);
} }
static void BoundPoly (int numverts, float *verts, vec3_t mins, vec3_t maxs) static void BoundPoly (int numverts, float *verts, vec3_t mins, vec3_t maxs)

View File

@ -264,6 +264,12 @@ Z-axis from 0 to 359 degrees and pitch specifies the angle from 90 (straight
up) to -90 (straight down). Roll has no effect, so use any value (e.g. 0). up) to -90 (straight down). Roll has no effect, so use any value (e.g. 0).
Often easier than the "target" method. Often easier than the "target" method.
.IP "\fB""_surface_spotlight"" ""n""\fP"
For a surface light template (i.e. a light with "_surface" set), setting this to
"1" makes each instance into a spotlight, with the direction of light
pointing along the surface normal. In other words, it automatically sets
"mangle" on each of the generated lights.
.IP "\fB""angle"" ""n""\fP" .IP "\fB""angle"" ""n""\fP"
Specifies the angle in degrees for a spotlight cone. Default 40. Specifies the angle in degrees for a spotlight cone. Default 40.