New grids offset to window center
This commit is contained in:
parent
12ef3b0416
commit
e16b0f1081
6 changed files with 32 additions and 9 deletions
|
|
@ -7,8 +7,8 @@
|
|||
#include <iostream>
|
||||
|
||||
DrawCamera::DrawCamera():
|
||||
//c({0, 0}, WorldScalar(12), 0.0)
|
||||
c({"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, WorldScalar(100), 0.0)
|
||||
//c({0, 0}, WorldScalar(1000), 0.0)
|
||||
c({"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, WorldScalar(100e100), 0.0)
|
||||
{}
|
||||
|
||||
void DrawCamera::set_based_on_properties(World& w, const WorldVec& newPos, const WorldScalar& newZoom, double newRotate) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,15 @@ GridModifyTool::GridModifyTool(DrawingProgram& initDrawP):
|
|||
|
||||
void GridModifyTool::set_grid_name(const std::string& gridToModifyName) {
|
||||
gridName = gridToModifyName;
|
||||
auto gridFoundIt = drawP.world.gridMan.grids.find(gridName);
|
||||
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
|
||||
WorldGrid& g = gridFoundIt->second;
|
||||
CoordSpaceHelper newCam;
|
||||
newCam.inverseScale = g.size / WorldScalar(WorldGrid::GRID_UNIT_PIXEL_SIZE);
|
||||
newCam.pos = g.offset - drawP.world.main.window.size.cast<WorldScalar>() * newCam.inverseScale * WorldScalar(0.5);
|
||||
newCam.rotation = 0.0;
|
||||
drawP.world.drawData.cam.smooth_move_to(drawP.world, newCam, drawP.world.main.window.size.cast<float>());
|
||||
}
|
||||
}
|
||||
|
||||
DrawingProgramToolType GridModifyTool::get_type() {
|
||||
|
|
@ -24,6 +33,7 @@ void GridModifyTool::gui_toolbox() {
|
|||
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
|
||||
WorldGrid& g = gridFoundIt->second;
|
||||
t.gui.text_label("Name: " + gridName);
|
||||
t.gui.checkbox_field("Visible", "Visible", &g.visible);
|
||||
size_t typeSelected = static_cast<size_t>(g.gridType);
|
||||
std::vector<std::string> listOfGridTypes = {
|
||||
"Circle Points",
|
||||
|
|
@ -61,6 +71,12 @@ bool GridModifyTool::prevent_undo_or_redo() {
|
|||
}
|
||||
|
||||
void GridModifyTool::draw(SkCanvas* canvas, const DrawData& drawData) {
|
||||
auto gridFoundIt = drawP.world.gridMan.grids.find(gridName);
|
||||
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
|
||||
WorldGrid& g = gridFoundIt->second;
|
||||
Vector2f gOffset = drawData.cam.c.to_space(g.offset);
|
||||
canvas->drawCircle(gOffset.x(), gOffset.y(), 5.0f, SkPaint{SkColor4f{1.0f, 0.0f, 0.0f, 1.0f}});
|
||||
}
|
||||
}
|
||||
|
||||
void GridModifyTool::switch_tool(DrawingProgramToolType newTool) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "GridManager.hpp"
|
||||
#include "World.hpp"
|
||||
#include "MainProgram.hpp"
|
||||
|
||||
GridManager::GridManager(World& w):
|
||||
world(w) {}
|
||||
|
|
@ -10,6 +11,9 @@ void GridManager::init_client_callbacks() {
|
|||
void GridManager::add_grid(const std::string& name) {
|
||||
WorldGrid g;
|
||||
g.color = color_mul_alpha(convert_vec4<Vector4f>(world.canvasTheme.toolFrontColor), 0.6f);
|
||||
g.set_subdivisions(7);
|
||||
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<float>() * 0.5f);
|
||||
grids[name] = g;
|
||||
changed = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,10 +64,10 @@ World::World(MainProgram& initMain, OpenWorldInfo& worldInfo):
|
|||
init_client_callbacks();
|
||||
con.client_send_items_to_server(RELIABLE_COMMAND_CHANNEL, SERVER_INITIAL_DATA, displayName, false);
|
||||
|
||||
gridMan.add_grid("b");
|
||||
gridMan.grids["b"].size = WorldScalar(1000);
|
||||
gridMan.grids["b"].set_remove_divisions_outwards(false);
|
||||
gridMan.grids["b"].gridType = WorldGrid::GridType::CIRCLE_POINTS;
|
||||
//gridMan.add_grid("b");
|
||||
//gridMan.grids["b"].size = WorldScalar(1000);
|
||||
//gridMan.grids["b"].set_remove_divisions_outwards(false);
|
||||
//gridMan.grids["b"].gridType = WorldGrid::GridType::CIRCLE_POINTS;
|
||||
}
|
||||
|
||||
void World::init_client_callbacks() {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ sk_sp<SkRuntimeEffect> WorldGrid::squarePointEffect;
|
|||
sk_sp<SkRuntimeEffect> WorldGrid::squareLinesEffect;
|
||||
sk_sp<SkRuntimeEffect> WorldGrid::ruledEffect;
|
||||
Vector2f WorldGrid::oldWindowSize = Vector2f{0.0f, 0.0f};
|
||||
unsigned WorldGrid::GRID_UNIT_PIXEL_SIZE = 125;
|
||||
|
||||
// NOTE: Skia shaders return premultiplied alpha colors
|
||||
|
||||
|
|
@ -173,8 +174,8 @@ sk_sp<SkShader> WorldGrid::get_shader(GridType gType, const ShaderData& shaderDa
|
|||
|
||||
Vector2f WorldGrid::get_closest_grid_point(const WorldVec& gridOffset, const WorldScalar& gridSize, const DrawData& drawData) {
|
||||
WorldVec fracCamPosOnGrid;
|
||||
fracCamPosOnGrid.x() = (drawData.cam.c.pos.x() + gridOffset.x()) % gridSize;
|
||||
fracCamPosOnGrid.y() = (drawData.cam.c.pos.y() + gridOffset.y()) % gridSize;
|
||||
fracCamPosOnGrid.x() = (drawData.cam.c.pos.x() - gridOffset.x()) % gridSize;
|
||||
fracCamPosOnGrid.y() = (drawData.cam.c.pos.y() - gridOffset.y()) % gridSize;
|
||||
|
||||
WorldVec closestGridPoint;
|
||||
closestGridPoint.x() = (fracCamPosOnGrid.x() < gridSize / WorldScalar(2)) ? WorldScalar(0) : gridSize;
|
||||
|
|
@ -220,7 +221,7 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa
|
|||
|
||||
unsigned subdivisionsTrue = get_subdivisions() + 1;
|
||||
|
||||
WorldScalar sizeDetermineSubdivisionsToRemove = (drawData.cam.c.inverseScale / size) * WorldScalar(125);
|
||||
WorldScalar sizeDetermineSubdivisionsToRemove = (drawData.cam.c.inverseScale / size) * WorldScalar(GRID_UNIT_PIXEL_SIZE);
|
||||
|
||||
SkPaint linePaint;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ class WorldGrid {
|
|||
uint32_t get_subdivisions();
|
||||
|
||||
Vector4f color{1.0f, 1.0f, 1.0f, 1.0f};
|
||||
|
||||
static unsigned GRID_UNIT_PIXEL_SIZE;
|
||||
private:
|
||||
bool removeDivisionsOutwards = false;
|
||||
uint32_t subdivisions = 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue