diff --git a/include/light/entities.hh b/include/light/entities.hh index 596bd26b..f7ac6539 100644 --- a/include/light/entities.hh +++ b/include/light/entities.hh @@ -76,7 +76,7 @@ public: lockable_vec_t dirtscale, dirtgain, dirt, deviance, samples, projfov, bouncescale; lockable_vec_t dirt_off_radius, dirt_on_radius; lockable_vec_t sun; //mxd - lockable_vec_t dome; + lockable_bool_t sunlight2, sunlight3; lockable_vec_t falloff; //mxd lockable_bool_t bleed; lockable_vec3_t origin, color, mangle, projangle; @@ -116,7 +116,8 @@ public: dirt_off_radius { "dirt_off_radius", 0.0f }, dirt_on_radius { "dirt_on_radius", 0.0f }, sun { "sun", 0 }, //mxd - dome { "dome", 0 }, + sunlight2 { "sunlight2", 0 }, + sunlight3 { "sunlight3", 0 }, falloff{ "falloff", 0.0f }, //mxd bleed { "bleed", false }, origin { "origin", 0, 0, 0 }, @@ -139,7 +140,7 @@ public: &dirtscale, &dirtgain, &dirt, &deviance, &samples, &projfov, &bouncescale, &dirt_off_radius, &dirt_on_radius, &sun, //mxd - &dome, + &sunlight2, &sunlight3, &falloff, //mxd &origin, &color, &mangle, &projangle, &project_texture, &suntexture }}; diff --git a/light/entities.cc b/light/entities.cc index 108369ab..2123e873 100644 --- a/light/entities.cc +++ b/light/entities.cc @@ -629,35 +629,17 @@ SetupSkyDomes(const globalconfig_t &cfg) SetupSkyDome(cfg, cfg.sunlight2.floatValue(), *cfg.sunlight2_color.vec3Value(), cfg.sunlight2_dirt.intValue(), cfg.global_anglescale.floatValue(), 0, "", cfg.sunlight3.floatValue(), *cfg.sunlight3_color.vec3Value(), cfg.sunlight2_dirt.intValue(), cfg.global_anglescale.floatValue(), 0, ""); - // new "_dome" entities + // new per-entity sunlight2/3 skydomes for (light_t &entity : all_lights) { - if (entity.dome.intValue() == 1 && entity.light.intValue() > 0) { - // Set direction to dome center - vec3_t dirToDomeCenter; - if (entity.targetent) { - vec3_t target_pos; - EntDict_VectorForKey(*entity.targetent, "origin", target_pos); - VectorSubtract(target_pos, *entity.origin.vec3Value(), dirToDomeCenter); - } else if (VectorLengthSq(*entity.mangle.vec3Value()) > 0) { - glm_to_vec3_t(vec_from_mangle(vec3_t_to_glm(*entity.mangle.vec3Value())), dirToDomeCenter); - } else { - logprint("WARNING: dome light at (%s) missing direction. assuming dome center is downwards.\n", entity.origin.stringValue().c_str()); - VectorSet(dirToDomeCenter, 0, 0, -1); - } - - const vec3_t up {0, 0, 1}; - const vec3_t down {0, 0, -1}; - - if (VectorCompare(dirToDomeCenter, down, EQUAL_EPSILON)) { + if ((entity.sunlight2.boolValue() || entity.sunlight3.boolValue()) && entity.light.intValue() > 0) { + if (entity.sunlight2.boolValue()) { // Add the upper dome, like sunlight2 (pointing down) SetupSkyDome(cfg, entity.light.floatValue(), *entity.color.vec3Value(), entity.dirt.intValue(), entity.anglescale.floatValue(), entity.style.intValue(), entity.suntexture.stringValue(), 0, vec3_origin, 0, 0, 0, ""); - } else if (VectorCompare(dirToDomeCenter, up, EQUAL_EPSILON)) { + } else { // Add the lower dome, like sunlight3 (pointing up) SetupSkyDome(cfg, 0, vec3_origin, 0, 0, 0, "", entity.light.floatValue(), *entity.color.vec3Value(), entity.dirt.intValue(), entity.anglescale.floatValue(), entity.style.intValue(), entity.suntexture.stringValue()); - } else { - logprint("WARNING: dome lights only support up or down currently, ignoring entity at (%s).\n", entity.origin.stringValue().c_str()); } // Disable the light itself... diff --git a/man/light.1 b/man/light.1 index 7d8cf4ae..7f01f03e 100644 --- a/man/light.1 +++ b/man/light.1 @@ -436,13 +436,23 @@ The following light properties correspond to these sunlight settings: _suntexture => this sunlight is only emitted from faces with this texture name .fi -.IP "\fB""_dome"" ""n""\fP" -Set to 1 to make this entity a dome light, as an alternative to using the sunlight2 and sunlight3 worldspawn keys. Acts as an area light at infinite distance that emits from sky surfaces. -The light itself is disabled, so it can be placed anywhere in the map. +.IP "\fB""_sunlight2"" ""n""\fP" +Set to 1 to make this entity control the upper dome lighting emitted from sky faces, as an alternative to the worldspawn key "_sunlight2". +The light entity itself is disabled, so it can be placed anywhere in the map. -Set the incoming direction of the center of the dome with "mangle". For comparison, sunlight2 is straight down (0 -90 0) and sunlight3 is straight up (0 90 0). If the light targets an info_null entity, the direction towards that entity sets the direction of the center of the dome. +The following light properties correspond to these sunlight settings: +.nf + light => _sunlight2 + _color => _sunlight2_color + _dirt => _sunlight2_dirt + _anglescale => _anglescale + style => flicker style for styled dome light + targetname => targetname for switchable sunlight + _suntexture => this sunlight is only emitted from faces with this texture name +.fi -"targetname", "style", "_color", "_anglescale"/"_anglesense", "_suntexture", and dirt parameters are all supported. +.IP "\fB""_sunlight3"" ""n""\fP" +Same as "_sunlight2", but for the lower hemisphere. .SH "OTHER INFORMATION" The "\\b" escape sequence toggles red text on/off, you can use this in any strings in the map file. e.g. "message" "Here is \\bsome red text\\b..."