Grids with subdivide outwards turned off fade out improved

This commit is contained in:
Yousef Khadadeh 2025-09-16 10:58:32 +03:00
parent 0ec5334b77
commit ffc9d42c5b
2 changed files with 32 additions and 16 deletions

View file

@ -66,7 +66,7 @@ World::World(MainProgram& initMain, OpenWorldInfo& worldInfo):
gridMan.add_grid("b");
gridMan.grids["b"].size = WorldScalar(1000);
gridMan.grids["b"].set_remove_divisions_outwards(true);
gridMan.grids["b"].set_remove_divisions_outwards(false);
gridMan.grids["b"].gridType = WorldGrid::GridType::CIRCLE_POINTS;
}

View file

@ -224,10 +224,13 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa
SkPaint linePaint;
if(removeDivisionsOutwards && sizeDetermineSubdivisionsToRemove > WorldScalar(1)) {
if(sizeDetermineSubdivisionsToRemove > WorldScalar(1)) {
double divLogDouble, divLogFraction;
divLogFraction = std::modf(static_cast<double>(FixedPoint::log(sizeDetermineSubdivisionsToRemove, WorldScalar(subdivisionsTrue))), &divLogDouble);
divLogFraction = std::modf(static_cast<double>(FixedPoint::log(sizeDetermineSubdivisionsToRemove, WorldScalar(subdivisionsTrue == 1 ? 2 : subdivisionsTrue))), &divLogDouble);
uint64_t divLog = divLogDouble;
if(divLog >= 2 && !removeDivisionsOutwards)
return;
WorldScalar logMultiplier = FixedPoint::exp_int_accurate<WorldScalar>(divLog, subdivisionsTrue);
WorldScalar subDivSize = size * logMultiplier;
@ -247,17 +250,33 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa
float finalDivMultiplier = (1.0 - divLogFraction) * ((divLog == 0) ? 0.5 : 1.0);
linePaint.setShader(get_shader(gridType, {
.gridColor = pointColor,
.mainGridScale = floatDivWorldSize,
.mainGridClosestPoint = closestGridPointScreenPos,
.mainGridPointSize = gridPointSize,
if(removeDivisionsOutwards || divLog == 0) {
linePaint.setShader(get_shader(gridType, {
.gridColor = pointColor,
.mainGridScale = floatDivWorldSize,
.mainGridClosestPoint = closestGridPointScreenPos,
.mainGridPointSize = gridPointSize,
.divGridAlphaFrac = finalDivMultiplier,
.divGridScale = floatSubDivWorldSize,
.divGridClosestPoint = subClosestGridPointScreenPos,
.divGridPointSize = gridPointSize * finalDivMultiplier
}));
.divGridAlphaFrac = finalDivMultiplier,
.divGridScale = floatSubDivWorldSize,
.divGridClosestPoint = subClosestGridPointScreenPos,
.divGridPointSize = gridPointSize * finalDivMultiplier
}));
}
else {
pointColor.fA *= finalDivMultiplier;
linePaint.setShader(get_shader(gridType, {
.gridColor = pointColor,
.mainGridScale = floatSubDivWorldSize,
.mainGridClosestPoint = subClosestGridPointScreenPos,
.mainGridPointSize = gridPointSize * finalDivMultiplier,
.divGridAlphaFrac = 0.0f,
.divGridScale = floatSubDivWorldSize,
.divGridClosestPoint = subClosestGridPointScreenPos,
.divGridPointSize = gridPointSize * finalDivMultiplier
}));
}
}
else {
WorldScalar subDivSize = size;
@ -265,9 +284,6 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa
WorldScalar subDivWorldSize = subDivSize / drawData.cam.c.inverseScale;
WorldScalar divWorldSize = divSize / drawData.cam.c.inverseScale;
if(divWorldSize < WorldScalar(7))
return;
float floatDivWorldSize = static_cast<float>(divWorldSize);
float floatSubDivWorldSize = static_cast<float>(subDivWorldSize);