From 8cb89c40d678ce6aeb04e7d06c656e915f0a63dd Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Fri, 12 Sep 2025 09:54:49 +0300 Subject: [PATCH] Middle of work with infinite zoom grid --- src/DrawingProgram/DrawingProgram.cpp | 4 ++++ src/DrawingProgram/DrawingProgram.hpp | 1 + src/DrawingProgram/GridModifyTool.cpp | 1 - src/Toolbar.cpp | 14 ++++++++------ src/Toolbar.hpp | 1 + src/World.cpp | 10 ++++++++++ src/WorldGrid.cpp | 15 ++++++--------- src/WorldGrid.hpp | 1 + 8 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index e51f4cd..d4e095e 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -243,6 +243,10 @@ void DrawingProgram::modify_grid(const std::string& gridToModifyName) { switch_to_tool(DrawingProgramToolType::EDIT); } +bool DrawingProgram::is_modifying_grid() { + return drawTool->get_type() == DrawingProgramToolType::GRIDMODIFY; +} + void DrawingProgram::update() { if(world.main.window.lastFrameTime > std::chrono::milliseconds(33)) { // Around 30FPS if(!badFrametimeTimePoint) diff --git a/src/DrawingProgram/DrawingProgram.hpp b/src/DrawingProgram/DrawingProgram.hpp index f914ead..7b063d6 100644 --- a/src/DrawingProgram/DrawingProgram.hpp +++ b/src/DrawingProgram/DrawingProgram.hpp @@ -57,6 +57,7 @@ class DrawingProgram { void clear_draw_cache(); void modify_grid(const std::string& gridToModifyName); + bool is_modifying_grid(); private: std::optional badFrametimeTimePoint; std::optional unorderedObjectsExistTimePoint; diff --git a/src/DrawingProgram/GridModifyTool.cpp b/src/DrawingProgram/GridModifyTool.cpp index 094c210..172db37 100644 --- a/src/DrawingProgram/GridModifyTool.cpp +++ b/src/DrawingProgram/GridModifyTool.cpp @@ -20,7 +20,6 @@ void GridModifyTool::gui_toolbox() { Toolbar& t = drawP.world.main.toolbar; t.gui.push_id("Grid modify tool"); t.gui.text_label_centered("Edit Grid"); - t.gui.text_label_centered(gridName); t.gui.pop_id(); } diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index b76ca97..9801855 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -401,7 +401,7 @@ void Toolbar::top_toolbar() { playerMenuOpen = !playerMenuOpen; if(gui.svg_icon_button("Grids Button", "data/icons/grid.svg", gridMenu.popupOpen)) { if(gridMenu.popupOpen) - gridMenu.popupOpen = false; + stop_displaying_grid_menu(); else { gridMenu.popupOpen = true; gridMenuPopUpJustOpen = true; @@ -628,15 +628,17 @@ void Toolbar::grid_menu(bool justOpened) { } } main.world->drawProg.modify_grid(gridMenu.newName); - if(io->mouse.leftClick && !Clay_Hovered() && !justOpened && !dropdownHover) { - main.world->drawProg.modify_grid(""); - gridMenu.newName.clear(); - gridMenu.popupOpen = false; - } + if(io->mouse.leftClick && !Clay_Hovered() && !justOpened && !dropdownHover) + stop_displaying_grid_menu(); } gui.pop_id(); } +void Toolbar::stop_displaying_grid_menu() { + gridMenu.newName.clear(); + gridMenu.popupOpen = false; +} + void Toolbar::bookmark_menu(bool justOpened) { gui.push_id("bookmark menu"); CLAY({ diff --git a/src/Toolbar.hpp b/src/Toolbar.hpp index 1f5f183..ed6ed16 100644 --- a/src/Toolbar.hpp +++ b/src/Toolbar.hpp @@ -88,6 +88,7 @@ class Toolbar { void global_log(); void top_toolbar(); void grid_menu(bool justOpened); + void stop_displaying_grid_menu(); void bookmark_menu(bool justOpened); void drawing_program_gui(); void options_menu(); diff --git a/src/World.cpp b/src/World.cpp index e44df5d..9946999 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -5,6 +5,7 @@ #include "Helpers/Networking/ByteStream.hpp" #include "Server/CommandList.hpp" #include "MainProgram.hpp" +#include "WorldGrid.hpp" #include "cereal/archives/portable_binary.hpp" #include #include "FileHelpers.hpp" @@ -62,6 +63,15 @@ World::World(MainProgram& initMain, OpenWorldInfo& worldInfo): bMan.init_client_callbacks(); init_client_callbacks(); con.client_send_items_to_server(RELIABLE_COMMAND_CHANNEL, SERVER_INITIAL_DATA, displayName, false); + + //gridMan.add_grid("a"); + //gridMan.grids["a"].offset.x() += WorldScalar(20000000); + //gridMan.grids["a"].offset.y() += WorldScalar(40000000); + //gridMan.grids["a"].size = WorldScalar(100000000); + //gridMan.grids["a"].gridType = WorldGrid::GridType::CIRCLE_POINTS; + gridMan.add_grid("b"); + gridMan.grids["b"].size = WorldScalar(500000000); + gridMan.grids["b"].gridType = WorldGrid::GridType::SQUARE_LINES; } void World::init_client_callbacks() { diff --git a/src/WorldGrid.cpp b/src/WorldGrid.cpp index 979d17f..64bdf80 100644 --- a/src/WorldGrid.cpp +++ b/src/WorldGrid.cpp @@ -99,7 +99,7 @@ sk_sp WorldGrid::get_shader(GridType gType, const SkColor4f& gridColor } SkRuntimeShaderBuilder builder(runtimeEffect); builder.uniform("gridColor") = gridColor; - builder.uniform("gridScale") = gridScale; + builder.uniform("gridScale") = 1.0f; sk_sp s = builder.makeShader(); return s; } @@ -117,10 +117,12 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa float alteredZoom = static_cast(((size / WorldScalar(GRID_CACHE_SIZE_INT)) / drawData.cam.c.inverseScale)); if(alteredZoom > 0.4f) { - Vector2f fracCamPos; + WorldVec fracCamPosWorld; - fracCamPos.x() = static_cast((drawData.cam.c.pos.x() % size) / drawData.cam.c.inverseScale); - fracCamPos.y() = static_cast((drawData.cam.c.pos.y() % size) / drawData.cam.c.inverseScale); + fracCamPosWorld.x() = ((drawData.cam.c.pos.x() + offset.x()) % size) / drawData.cam.c.inverseScale; + fracCamPosWorld.y() = ((drawData.cam.c.pos.y() + offset.y()) % size) / drawData.cam.c.inverseScale; + + Vector2f fracCamPos = fracCamPosWorld.cast(); SkPaint linePaint; SkColor4f pointColor = gMan.world.canvasTheme.toolFrontColor; @@ -128,13 +130,8 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa linePaint.setShader(get_shader(gridType, pointColor, alteredZoom)); canvas->save(); - - canvas->rotate(-drawData.cam.c.rotation * 180.0 / std::numbers::pi); canvas->translate(-fracCamPos.x(), -fracCamPos.y()); - canvas->scale(alteredZoom, alteredZoom); - canvas->drawPaint(linePaint); - canvas->restore(); } } diff --git a/src/WorldGrid.hpp b/src/WorldGrid.hpp index bfceb75..856c4e9 100644 --- a/src/WorldGrid.hpp +++ b/src/WorldGrid.hpp @@ -16,6 +16,7 @@ class WorldGrid { } gridType = GridType::CIRCLE_POINTS; WorldScalar size{50000000}; bool visible = true; + WorldVec offset{0, 0}; private: static sk_sp get_shader(GridType gType, const SkColor4f& gridColor, float gridScale); static sk_sp compile_effect_shader_init(const char* shaderName, const char* shaderCode);