diff --git a/src/DrawCamera.cpp b/src/DrawCamera.cpp index 33a8dbd..e2bec7d 100755 --- a/src/DrawCamera.cpp +++ b/src/DrawCamera.cpp @@ -7,9 +7,9 @@ #include DrawCamera::DrawCamera(): - c({-843000, -72500}, WorldScalar(1000), 0.0) + //c({-843000, -72500}, WorldScalar(1000), 0.0) //c({0, 0}, WorldScalar(1000), 0.0) - //c({"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, WorldScalar("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), 0.0) + c({"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, WorldScalar("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), 0.0) {} void DrawCamera::set_based_on_properties(World& w, const WorldVec& newPos, const WorldScalar& newZoom, double newRotate) { diff --git a/src/World.cpp b/src/World.cpp index f0a3eab..0a3faae 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -66,8 +66,9 @@ World::World(MainProgram& initMain, OpenWorldInfo& worldInfo): gridMan.add_grid("b"); gridMan.grids["b"].size = WorldScalar(100000); - gridMan.grids["b"].set_remove_divisions_outwards(false); + gridMan.grids["b"].set_remove_divisions_outwards(true); gridMan.grids["b"].gridType = WorldGrid::GridType::CIRCLE_POINTS; + gridMan.grids["b"].set_subdivisions(9); } void World::init_client_callbacks() { diff --git a/src/WorldGrid.cpp b/src/WorldGrid.cpp index f82a573..600db05 100644 --- a/src/WorldGrid.cpp +++ b/src/WorldGrid.cpp @@ -189,23 +189,6 @@ Vector2f WorldGrid::get_closest_grid_point(const WorldVec& gridOffset, const Wor return closestGridPointScreenPos; } -WorldVec WorldGrid::get_closest_grid_point_coordinate(const WorldVec& gridOffset, const WorldScalar& gridSize, const WorldScalar& gridSizeUnit, const DrawData& drawData) { - WorldVec toRet; - toRet.x() = FixedPoint::negative_round((drawData.cam.c.pos.x() - gridOffset.x()) / gridSize) * gridSizeUnit; - toRet.y() = FixedPoint::negative_round((gridOffset.y() - drawData.cam.c.pos.y()) / gridSize) * gridSizeUnit; - - WorldVec fracCamPosOnGrid; - fracCamPosOnGrid.x() = (drawData.cam.c.pos.x() - gridOffset.x()) % gridSize; - fracCamPosOnGrid.y() = (drawData.cam.c.pos.y() - gridOffset.y()) % gridSize; - - if(fracCamPosOnGrid.x() > gridSize / WorldScalar(2)) - toRet.x() += gridSizeUnit; - if(fracCamPosOnGrid.y() > gridSize / WorldScalar(2)) - toRet.y() -= gridSizeUnit; - - return toRet; -} - void WorldGrid::set_remove_divisions_outwards(bool v) { removeDivisionsOutwards = v; if(removeDivisionsOutwards) @@ -243,9 +226,7 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa SkPaint linePaint; - float floatDivWorldSize; - Vector2f closestGridPointScreenPos; - WorldVec closestGridPointCoord; + WorldScalar divSize; WorldScalar gridCoordDivSize; if(sizeDetermineSubdivisionsToRemove > WorldScalar(1)) { @@ -258,14 +239,14 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa WorldScalar logMultiplier = FixedPoint::exp_int_accurate(divLog, subdivisionsTrue); WorldScalar subDivSize = size * logMultiplier; - WorldScalar divSize = subDivSize * WorldScalar(subdivisionsTrue); + divSize = subDivSize * WorldScalar(subdivisionsTrue); WorldScalar subDivWorldSize = subDivSize / drawData.cam.c.inverseScale; WorldScalar divWorldSize = divSize / drawData.cam.c.inverseScale; - floatDivWorldSize = static_cast(divWorldSize); + float floatDivWorldSize = static_cast(divWorldSize); float floatSubDivWorldSize = static_cast(subDivWorldSize); - closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); + Vector2f closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); Vector2f subClosestGridPointScreenPos = get_closest_grid_point(offset, subDivSize, drawData); SkColor4f pointColor = convert_vec4(color_mul_alpha(color, std::clamp(floatDivWorldSize / 100.0f, 0.0f, 1.0f))); @@ -302,18 +283,17 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa } gridCoordDivSize = logMultiplier * WorldScalar(subdivisionsTrue); - closestGridPointCoord = get_closest_grid_point_coordinate(offset, divSize, gridCoordDivSize, drawData); } else { WorldScalar subDivSize = size; - WorldScalar divSize = subDivSize * WorldScalar(subdivisionsTrue); + divSize = subDivSize * WorldScalar(subdivisionsTrue); WorldScalar subDivWorldSize = subDivSize / drawData.cam.c.inverseScale; WorldScalar divWorldSize = divSize / drawData.cam.c.inverseScale; - floatDivWorldSize = static_cast(divWorldSize); + float floatDivWorldSize = static_cast(divWorldSize); float floatSubDivWorldSize = static_cast(subDivWorldSize); - closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); + Vector2f closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); Vector2f subClosestGridPointScreenPos = get_closest_grid_point(offset, subDivSize, drawData); SkColor4f pointColor = convert_vec4(color_mul_alpha(color, std::clamp(floatDivWorldSize / 100.0f, 0.0f, 1.0f))); @@ -332,7 +312,6 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa })); gridCoordDivSize = WorldScalar(subdivisionsTrue); - closestGridPointCoord = get_closest_grid_point_coordinate(offset, divSize, gridCoordDivSize, drawData); } canvas->save(); @@ -344,32 +323,51 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa } canvas->rotate(-drawData.cam.c.rotation * 180.0 / std::numbers::pi); canvas->drawPaint(linePaint); - draw_coordinates(canvas, drawData, closestGridPointScreenPos, floatDivWorldSize, closestGridPointCoord, gridCoordDivSize); canvas->restore(); + if(drawData.cam.c.rotation == 0.0 && !drawData.main->takingScreenshot) + draw_coordinates(canvas, drawData, divSize, gridCoordDivSize); } -void WorldGrid::draw_coordinates(SkCanvas* canvas, const DrawData& drawData, const Vector2f& closestGridPointScreenPos, float floatDivWorldSize, const WorldVec& closestGridPointCoord, const WorldScalar& gridCoordDivSize) { +void WorldGrid::draw_coordinates(SkCanvas* canvas, const DrawData& drawData, const WorldScalar& divWorldSize, const WorldScalar& gridCoordDivSize) { SkFont f = drawData.main->toolbar.io->get_font(18.0f); SkFontMetrics metrics; f.getMetrics(&metrics); float toolbarXLength = drawData.main->toolbar.final_gui_scale() * 80.0f; + const WorldVec& worldWindowEndPos = drawData.cam.c.pos + drawData.cam.c.dir_from_space(drawData.cam.viewingArea); + WorldVec worldWindowBeginPos; + WorldScalar xCoordMultiplier = FixedPoint::trunc((drawData.cam.c.pos.x() - offset.x()) / divWorldSize); + worldWindowBeginPos.x() = xCoordMultiplier * divWorldSize + offset.x(); + WorldScalar yCoordMultiplier = FixedPoint::trunc((drawData.cam.c.pos.y() - offset.y()) / divWorldSize); + worldWindowBeginPos.y() = yCoordMultiplier * divWorldSize + offset.y(); - WorldScalar xGridCoord = closestGridPointCoord.x(); - for(float x = closestGridPointScreenPos.x(); x < drawData.main->window.size.x(); x += floatDivWorldSize) { - std::string xGridCoordStr = xGridCoord.display_int_str(4); - float textXLength = f.measureText(xGridCoordStr.c_str(), xGridCoordStr.length(), SkTextEncoding::kUTF8, nullptr); - SkPaint p2(SkColor4f{1.0f, 0.0f, 0.0f, 1.0f}); - canvas->drawSimpleText(xGridCoordStr.c_str(), xGridCoordStr.length(), SkTextEncoding::kUTF8, x - textXLength * 0.5f, drawData.main->window.size.y() - metrics.fDescent, f, p2); + { + WorldScalar xGridCoord = xCoordMultiplier * gridCoordDivSize; - xGridCoord += gridCoordDivSize; + for(WorldScalar xWorldCoord = worldWindowBeginPos.x(); xWorldCoord < worldWindowEndPos.x(); xWorldCoord += divWorldSize) { + Vector2f gridPointScreenPos = drawData.cam.c.to_space(WorldVec{xWorldCoord, worldWindowBeginPos.y()}); + + std::string xGridCoordStr = xGridCoord.display_int_str(4); + float textXLength = f.measureText(xGridCoordStr.c_str(), xGridCoordStr.length(), SkTextEncoding::kUTF8, nullptr); + SkPaint p2(SkColor4f{1.0f, 0.0f, 0.0f, 1.0f}); + canvas->drawSimpleText(xGridCoordStr.c_str(), xGridCoordStr.length(), SkTextEncoding::kUTF8, gridPointScreenPos.x() - textXLength * 0.5f, drawData.cam.viewingArea.y() - metrics.fDescent, f, p2); + + xGridCoord += gridCoordDivSize; + } } - WorldScalar yGridCoord = closestGridPointCoord.y(); - for(float y = closestGridPointScreenPos.y(); y < drawData.main->window.size.y(); y += floatDivWorldSize) { - std::string yGridCoordStr = yGridCoord.display_int_str(5); - SkPaint p2(SkColor4f{1.0f, 0.0f, 0.0f, 1.0f}); - canvas->drawSimpleText(yGridCoordStr.c_str(), yGridCoordStr.length(), SkTextEncoding::kUTF8, toolbarXLength, y + metrics.fDescent, f, p2); - yGridCoord -= gridCoordDivSize; // Subtract instead of add due to flipped y axis + { + WorldScalar yGridCoord = FixedPoint::trunc((offset.y() - drawData.cam.c.pos.y()) / divWorldSize) * gridCoordDivSize + gridCoordDivSize; + + for(WorldScalar yWorldCoord = worldWindowBeginPos.y(); yWorldCoord < worldWindowEndPos.y(); yWorldCoord += divWorldSize) { + Vector2f gridPointScreenPos = drawData.cam.c.to_space(WorldVec{worldWindowBeginPos.x(), yWorldCoord}); + + std::string yGridCoordStr = yGridCoord.display_int_str(4); + + SkPaint p2(SkColor4f{1.0f, 0.0f, 0.0f, 1.0f}); + canvas->drawSimpleText(yGridCoordStr.c_str(), yGridCoordStr.length(), SkTextEncoding::kUTF8, toolbarXLength, gridPointScreenPos.y() + metrics.fDescent, f, p2); + + yGridCoord -= gridCoordDivSize; + } } } diff --git a/src/WorldGrid.hpp b/src/WorldGrid.hpp index 30966a0..7cf69ed 100644 --- a/src/WorldGrid.hpp +++ b/src/WorldGrid.hpp @@ -42,9 +42,8 @@ class WorldGrid { Vector2f divGridClosestPoint; float divGridPointSize; }; - void draw_coordinates(SkCanvas* canvas, const DrawData& drawData, const Vector2f& closestGridPointScreenPos, float floatDivWorldSize, const WorldVec& closestGridPointCoord, const WorldScalar& gridCoordDivSize); + void draw_coordinates(SkCanvas* canvas, const DrawData& drawData, const WorldScalar& divWorldSize, const WorldScalar& gridCoordDivSize); static Vector2f get_closest_grid_point(const WorldVec& gridOffset, const WorldScalar& gridSize, const DrawData& drawData); - static WorldVec get_closest_grid_point_coordinate(const WorldVec& gridOffset, const WorldScalar& gridSize, const WorldScalar& gridSizeUnit, const DrawData& drawData); static sk_sp get_shader(GridType gType, const ShaderData& shaderData); static sk_sp compile_effect_shader_init(const char* shaderName, const char* shaderCode); static Vector2f oldWindowSize;