#include "GridManager.hpp" #include "Helpers/Networking/NetLibrary.hpp" #include "Server/CommandList.hpp" #include "SharedTypes.hpp" #include "World.hpp" #include "MainProgram.hpp" #include GridManager::GridManager(World& w): world(w) {} void GridManager::init() { if(world.netObjMan.is_server()) grids = world.netObjMan.make_obj>(); } void GridManager::add_default_grid(const std::string& newName) { if(grids) { WorldGrid g; g.name = newName; g.color = color_mul_alpha(convert_vec4(world.canvasTheme.toolFrontColor), 0.4f); g.size = world.drawData.cam.c.inverseScale * WorldScalar(WorldGrid::GRID_UNIT_PIXEL_SIZE); g.offset = world.drawData.cam.c.pos + world.drawData.cam.c.dir_from_space(world.main.window.size.cast() * 0.5f); NetworkingObjects::NetObjPtr gridPtr = grids->emplace_back_direct(grids, g); uint32_t pos = grids->size() - 1; world.undo.push({[&grids = grids, gridPtr](){ grids->erase(grids, gridPtr); return true; }, [&grids = grids, gridPtr, pos]() { grids->insert_and_send_create(grids, pos, gridPtr); return true; }}); } } void GridManager::remove_grid(uint32_t indexToRemove) { if(grids) { NetworkingObjects::NetObjPtr gridPtr = grids->erase(grids, indexToRemove); world.undo.push({[&grids = grids, gridPtr, indexToRemove]() { grids->insert_and_send_create(grids, indexToRemove, gridPtr); return true; }, [&grids = grids, gridPtr](){ grids->erase(grids, gridPtr); return true; }}); } } void GridManager::draw_back(SkCanvas* canvas, const DrawData& drawData) { if(grids) { for(uint32_t i = 0; i < grids->size(); i++) { if(!grids->at(i)->displayInFront) grids->at(i)->draw(*this, canvas, drawData); } } } void GridManager::draw_front(SkCanvas* canvas, const DrawData& drawData) { if(grids) { for(uint32_t i = 0; i < grids->size(); i++) { if(grids->at(i)->displayInFront) grids->at(i)->draw(*this, canvas, drawData); } } } void GridManager::draw_coordinates(SkCanvas* canvas, const DrawData& drawData) { if(grids) { Vector2f axisOffset{0.0f, 0.0f}; for(uint32_t i = 0; i < grids->size(); i++) { auto& g = grids->at(i); if(g->coordinatesWillBeDrawn && g->coordinatesAxisOnBounds) { g->draw_coordinates(canvas, drawData, axisOffset); g->coordinatesWillBeDrawn = false; } } for(uint32_t i = 0; i < grids->size(); i++) { auto& g = grids->at(i); if(g->coordinatesWillBeDrawn && !g->coordinatesAxisOnBounds) g->draw_coordinates(canvas, drawData, axisOffset); g->coordinatesWillBeDrawn = false; } } } void GridManager::scale_up(const WorldScalar& scaleUpAmount) { if(grids) { for(uint32_t i = 0; i < grids->size(); i++) { grids->at(i)->scale_up(scaleUpAmount); } } }