lighting: disable the new additive point light behavior when new lighting is off
This commit is contained in:
parent
bb5387fbdb
commit
54ac208dd5
@ -4,7 +4,7 @@ function patch(original)
|
||||
image:copyInto({0, 0}, original:process("?crop=0;0;236;96"))
|
||||
local checkbox = image:process("?crop=19;26;117;35")
|
||||
image:copyInto({119, 26}, checkbox) -- Anti-Aliasing
|
||||
image:copyInto({19, 15}, checkbox) -- Object Lighting
|
||||
image:copyInto({19, 15}, checkbox) -- New Lighting
|
||||
image:copyInto({119, 15}, checkbox) -- Hardware Cursor
|
||||
|
||||
image:copyInto({119, 68}, image:process("?crop=19;68;117;87")) -- Camera Pan Speed
|
||||
|
@ -35,9 +35,9 @@ function patch(config)
|
||||
-- Create anti-aliasing toggle
|
||||
shift(clone(layout, "multiTextureLabel", "antiAliasingLabel"), 98).value = "SUPER-SAMPLED AA"
|
||||
shift(clone(layout, "multiTextureCheckbox", "antiAliasingCheckbox"), 99)
|
||||
-- Create object lighting toggle
|
||||
shift(clone(layout, "multiTextureLabel", "objectLightingLabel"), 0, -11).value = "NEW OBJECT LIGHTS"
|
||||
shift(clone(layout, "multiTextureCheckbox", "objectLightingCheckbox"), 0, -11)
|
||||
-- Create new lighting toggle
|
||||
shift(clone(layout, "multiTextureLabel", "newLightingLabel"), 0, -11).value = "NEW LIGHTING"
|
||||
shift(clone(layout, "multiTextureCheckbox", "newLightingCheckbox"), 0, -11)
|
||||
-- Create hardware cursor toggle
|
||||
shift(clone(layout, "multiTextureLabel", "hardwareCursorLabel"), 98, -11).value = "HARDWARE CURSOR"
|
||||
shift(clone(layout, "multiTextureCheckbox", "hardwareCursorCheckbox"), 99, -11)
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"lighting" : {
|
||||
"brightnessLimit" : 1.5
|
||||
"brightnessLimit" : 1.4
|
||||
}
|
||||
}
|
@ -1,6 +1,22 @@
|
||||
--local function drop(color)
|
||||
-- if type(color) == "table" then
|
||||
-- for i = 1, #color do
|
||||
-- color[i] = color[i] * 0.8
|
||||
-- end
|
||||
-- end
|
||||
--end
|
||||
|
||||
function patch(object, path)
|
||||
if object.pointLight ~= true and (object.lightColor or object.lightColors) then
|
||||
object.lightType = "PointAsSpread"
|
||||
return object;
|
||||
return object
|
||||
--elseif type(object.lightColor) == "table" then
|
||||
-- drop(object.lightColor)
|
||||
-- return object
|
||||
--elseif type(object.lightColors) == "table" then
|
||||
-- for i, v in pairs(object.lightColors) do
|
||||
-- drop(v)
|
||||
-- end
|
||||
-- return object
|
||||
end
|
||||
end
|
@ -64,12 +64,12 @@ void CellularLightArray<ScalarLightTraits>::calculatePointLighting(size_t xmin,
|
||||
attenuation += min(blockAttenuation, circularizedPerBlockObstacleAttenuation) * m_pointObstacleBoost;
|
||||
|
||||
if (attenuation < 1.0f) {
|
||||
if (m_pointAdditive) {
|
||||
auto newLight = ScalarLightTraits::subtract(light.value, attenuation);
|
||||
if (ScalarLightTraits::maxIntensity(newLight) > 0.0001f) {
|
||||
if (light.asSpread)
|
||||
setLight(x, y, lvalue + newLight * 0.15f);
|
||||
else
|
||||
setLight(x, y, lvalue + newLight);
|
||||
if (ScalarLightTraits::maxIntensity(newLight) > 0.0001f)
|
||||
setLight(x, y, lvalue + (light.asSpread ? newLight * 0.15f : newLight));
|
||||
} else {
|
||||
setLight(x, y, ScalarLightTraits::max(ScalarLightTraits::subtract(light.value, attenuation), lvalue));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -137,12 +137,12 @@ void CellularLightArray<ColoredLightTraits>::calculatePointLighting(size_t xmin,
|
||||
attenuation += min(blockAttenuation, circularizedPerBlockObstacleAttenuation) * m_pointObstacleBoost;
|
||||
|
||||
if (attenuation < 1.0f) {
|
||||
if (m_pointAdditive) {
|
||||
auto newLight = ColoredLightTraits::subtract(light.value, attenuation);
|
||||
if (ColoredLightTraits::maxIntensity(newLight) > 0.0001f) {
|
||||
if (light.asSpread)
|
||||
setLight(x, y, lvalue + newLight * 0.15f);
|
||||
else
|
||||
setLight(x, y, lvalue + newLight);
|
||||
if (ColoredLightTraits::maxIntensity(newLight) > 0.0001f)
|
||||
setLight(x, y, lvalue + (light.asSpread ? newLight * 0.15f : newLight));
|
||||
} else {
|
||||
setLight(x, y, ColoredLightTraits::max(ColoredLightTraits::subtract(light.value, attenuation), lvalue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ public:
|
||||
};
|
||||
|
||||
void setParameters(unsigned spreadPasses, float spreadMaxAir, float spreadMaxObstacle,
|
||||
float pointMaxAir, float pointMaxObstacle, float pointObstacleBoost);
|
||||
float pointMaxAir, float pointMaxObstacle, float pointObstacleBoost, bool pointAdditive);
|
||||
|
||||
// The border around the target lighting array where initial lighting / light
|
||||
// source data is required. Based on parameters.
|
||||
@ -129,6 +129,7 @@ private:
|
||||
float m_pointMaxAir;
|
||||
float m_pointMaxObstacle;
|
||||
float m_pointObstacleBoost;
|
||||
bool m_pointAdditive;
|
||||
};
|
||||
|
||||
typedef CellularLightArray<ColoredLightTraits> ColoredCellularLightArray;
|
||||
@ -204,13 +205,14 @@ inline Vec3F ColoredLightTraits::max(Vec3F const& v1, Vec3F const& v2) {
|
||||
|
||||
template <typename LightTraits>
|
||||
void CellularLightArray<LightTraits>::setParameters(unsigned spreadPasses, float spreadMaxAir, float spreadMaxObstacle,
|
||||
float pointMaxAir, float pointMaxObstacle, float pointObstacleBoost) {
|
||||
float pointMaxAir, float pointMaxObstacle, float pointObstacleBoost, bool pointAdditive) {
|
||||
m_spreadPasses = spreadPasses;
|
||||
m_spreadMaxAir = spreadMaxAir;
|
||||
m_spreadMaxObstacle = spreadMaxObstacle;
|
||||
m_pointMaxAir = pointMaxAir;
|
||||
m_pointMaxObstacle = pointMaxObstacle;
|
||||
m_pointObstacleBoost = pointObstacleBoost;
|
||||
m_pointAdditive = pointAdditive;
|
||||
}
|
||||
|
||||
template <typename LightTraits>
|
||||
|
@ -73,7 +73,8 @@ void CellularLightingCalculator::setParameters(Json const& config) {
|
||||
config.getFloat("spreadMaxObstacle"),
|
||||
config.getFloat("pointMaxAir"),
|
||||
config.getFloat("pointMaxObstacle"),
|
||||
config.getFloat("pointObstacleBoost")
|
||||
config.getFloat("pointObstacleBoost"),
|
||||
config.getBool("pointAdditive", false)
|
||||
);
|
||||
else
|
||||
m_lightArray.left().setParameters(
|
||||
@ -82,7 +83,8 @@ void CellularLightingCalculator::setParameters(Json const& config) {
|
||||
config.getFloat("spreadMaxObstacle"),
|
||||
config.getFloat("pointMaxAir"),
|
||||
config.getFloat("pointMaxObstacle"),
|
||||
config.getFloat("pointObstacleBoost")
|
||||
config.getFloat("pointObstacleBoost"),
|
||||
config.getBool("pointAdditive", false)
|
||||
);
|
||||
}
|
||||
|
||||
@ -190,7 +192,8 @@ void CellularLightIntensityCalculator::setParameters(Json const& config) {
|
||||
config.getFloat("spreadMaxObstacle"),
|
||||
config.getFloat("pointMaxAir"),
|
||||
config.getFloat("pointMaxObstacle"),
|
||||
config.getFloat("pointObstacleBoost")
|
||||
config.getFloat("pointObstacleBoost"),
|
||||
config.getBool("pointAdditive", false)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -97,10 +97,10 @@ GraphicsMenu::GraphicsMenu() {
|
||||
Root::singleton().configuration()->set("monochromeLighting", checked);
|
||||
syncGui();
|
||||
});
|
||||
reader.registerCallback("objectLightingCheckbox", [=](Widget*) {
|
||||
bool checked = fetchChild<ButtonWidget>("objectLightingCheckbox")->isChecked();
|
||||
m_localChanges.set("newObjectLighting", checked);
|
||||
Root::singleton().configuration()->set("newObjectLighting", checked);
|
||||
reader.registerCallback("newLightingCheckbox", [=](Widget*) {
|
||||
bool checked = fetchChild<ButtonWidget>("newLightingCheckbox")->isChecked();
|
||||
m_localChanges.set("newLighting", checked);
|
||||
Root::singleton().configuration()->set("newLighting", checked);
|
||||
syncGui();
|
||||
});
|
||||
|
||||
@ -162,7 +162,7 @@ StringList const GraphicsMenu::ConfigKeys = {
|
||||
"antiAliasing",
|
||||
"hardwareCursor",
|
||||
"monochromeLighting",
|
||||
"newObjectLighting"
|
||||
"newLighting"
|
||||
};
|
||||
|
||||
void GraphicsMenu::initConfig() {
|
||||
@ -229,7 +229,7 @@ void GraphicsMenu::syncGui() {
|
||||
fetchChild<ButtonWidget>("multiTextureCheckbox")->setChecked(m_localChanges.get("useMultiTexturing").optBool().value(true));
|
||||
fetchChild<ButtonWidget>("antiAliasingCheckbox")->setChecked(m_localChanges.get("antiAliasing").toBool());
|
||||
fetchChild<ButtonWidget>("monochromeCheckbox")->setChecked(m_localChanges.get("monochromeLighting").toBool());
|
||||
fetchChild<ButtonWidget>("objectLightingCheckbox")->setChecked(m_localChanges.get("newObjectLighting").optBool().value(true));
|
||||
fetchChild<ButtonWidget>("newLightingCheckbox")->setChecked(m_localChanges.get("newLighting").optBool().value(true));
|
||||
fetchChild<ButtonWidget>("hardwareCursorCheckbox")->setChecked(m_localChanges.get("hardwareCursor").toBool());
|
||||
}
|
||||
|
||||
|
@ -1667,31 +1667,34 @@ void WorldClient::lightingCalc() {
|
||||
RectI lightRange = m_pendingLightRange;
|
||||
List<LightSource> lights = std::move(m_pendingLights);
|
||||
List<std::pair<Vec2F, Vec3F>> particleLights = std::move(m_pendingParticleLights);
|
||||
auto configuration = Root::singleton().configuration();
|
||||
auto& root = Root::singleton();
|
||||
auto configuration = root.configuration();
|
||||
bool newLighting = configuration->get("newLighting").optBool().value(true);
|
||||
bool monochrome = configuration->get("monochromeLighting").toBool();
|
||||
m_lightingCalculator.setParameters(root.assets()->json("/lighting.config:lighting").set("pointAdditive", newLighting));
|
||||
m_lightingCalculator.setMonochrome(monochrome);
|
||||
m_lightingCalculator.begin(lightRange);
|
||||
lightingTileGather();
|
||||
|
||||
prepLocker.unlock();
|
||||
|
||||
bool useHybridPointLights = configuration->get("newObjectLighting").optBool().value(true);
|
||||
for (auto const& light : lights) {
|
||||
Vec2F position = m_geometry.nearestTo(Vec2F(m_lightingCalculator.calculationRegion().min()), light.position);
|
||||
if (light.type == LightType::Spread)
|
||||
m_lightingCalculator.addSpreadLight(position, light.color);
|
||||
else {
|
||||
if (light.type == LightType::PointAsSpread) {
|
||||
if (!useHybridPointLights)
|
||||
if (!newLighting)
|
||||
m_lightingCalculator.addSpreadLight(position, light.color);
|
||||
else { // hybrid (used for auto-converted object lights) - 85% spread, 15% point (2nd is applied elsewhere)
|
||||
else { // hybrid (used for auto-converted object lights) - 85% spread, 15% point (* .15 is applied in the calculation code)
|
||||
m_lightingCalculator.addSpreadLight(position, light.color * 0.85f);
|
||||
m_lightingCalculator.addPointLight(position, light.color, light.pointBeam, light.beamAngle, light.beamAmbience, true);
|
||||
}
|
||||
} else // fully additive point light
|
||||
} else {
|
||||
m_lightingCalculator.addPointLight(position, light.color, light.pointBeam, light.beamAngle, light.beamAmbience);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (auto const& lightPair : particleLights) {
|
||||
Vec2F position = m_geometry.nearestTo(Vec2F(m_lightingCalculator.calculationRegion().min()), lightPair.first);
|
||||
|
Loading…
Reference in New Issue
Block a user