From ffc9d42c5be78e90c81c7ef29aff3bb3c2e7158d Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Tue, 16 Sep 2025 10:58:32 +0300 Subject: [PATCH] Grids with subdivide outwards turned off fade out improved --- src/World.cpp | 2 +- src/WorldGrid.cpp | 46 +++++++++++++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/World.cpp b/src/World.cpp index e564311..869a0e5 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -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; } diff --git a/src/WorldGrid.cpp b/src/WorldGrid.cpp index 8f1ca0d..db22f2d 100644 --- a/src/WorldGrid.cpp +++ b/src/WorldGrid.cpp @@ -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(FixedPoint::log(sizeDetermineSubdivisionsToRemove, WorldScalar(subdivisionsTrue))), &divLogDouble); + divLogFraction = std::modf(static_cast(FixedPoint::log(sizeDetermineSubdivisionsToRemove, WorldScalar(subdivisionsTrue == 1 ? 2 : subdivisionsTrue))), &divLogDouble); uint64_t divLog = divLogDouble; + if(divLog >= 2 && !removeDivisionsOutwards) + return; + WorldScalar logMultiplier = FixedPoint::exp_int_accurate(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(divWorldSize); float floatSubDivWorldSize = static_cast(subDivWorldSize);