Middle of work with infinite zoom grid

This commit is contained in:
Yousef Khadadeh 2025-09-12 09:54:49 +03:00
parent 1601de4255
commit 8cb89c40d6
8 changed files with 31 additions and 16 deletions

View file

@ -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)

View file

@ -57,6 +57,7 @@ class DrawingProgram {
void clear_draw_cache();
void modify_grid(const std::string& gridToModifyName);
bool is_modifying_grid();
private:
std::optional<std::chrono::steady_clock::time_point> badFrametimeTimePoint;
std::optional<std::chrono::steady_clock::time_point> unorderedObjectsExistTimePoint;

View file

@ -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();
}

View file

@ -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({

View file

@ -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();

View file

@ -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 <fstream>
#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() {

View file

@ -99,7 +99,7 @@ sk_sp<SkShader> 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<SkShader> s = builder.makeShader();
return s;
}
@ -117,10 +117,12 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa
float alteredZoom = static_cast<float>(((size / WorldScalar(GRID_CACHE_SIZE_INT)) / drawData.cam.c.inverseScale));
if(alteredZoom > 0.4f) {
Vector2f fracCamPos;
WorldVec fracCamPosWorld;
fracCamPos.x() = static_cast<float>((drawData.cam.c.pos.x() % size) / drawData.cam.c.inverseScale);
fracCamPos.y() = static_cast<float>((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<float>();
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();
}
}

View file

@ -16,6 +16,7 @@ class WorldGrid {
} gridType = GridType::CIRCLE_POINTS;
WorldScalar size{50000000};
bool visible = true;
WorldVec offset{0, 0};
private:
static sk_sp<SkShader> get_shader(GridType gType, const SkColor4f& gridColor, float gridScale);
static sk_sp<SkRuntimeEffect> compile_effect_shader_init(const char* shaderName, const char* shaderCode);