Middle of work with infinite zoom grid
This commit is contained in:
parent
1601de4255
commit
8cb89c40d6
8 changed files with 31 additions and 16 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue