Add grid option to display in front of canvas

This commit is contained in:
Yousef Khadadeh 2025-10-01 21:31:16 +03:00
parent 4dc8f4f049
commit 6d70047762
5 changed files with 22 additions and 7 deletions

View file

@ -35,6 +35,7 @@ void GridModifyTool::gui_toolbox() {
WorldGrid& g = gridFoundIt->second;
t.gui.input_text_field("grid name", "Name", &g.name);
t.gui.checkbox_field("Visible", "Visible", &g.visible);
t.gui.checkbox_field("Display in Front", "Display in front of canvas", &g.displayInFront);
size_t typeSelected = static_cast<size_t>(g.gridType);
std::vector<std::string> listOfGridTypes = {
"Circle Points",

View file

@ -75,10 +75,20 @@ ClientPortionID GridManager::get_max_id(ServerPortionID serverID) const {
return maxClientID;
}
void GridManager::draw(SkCanvas* canvas, const DrawData& drawData) {
void GridManager::draw_back(SkCanvas* canvas, const DrawData& drawData) {
auto& sortedGridIDS = sorted_grid_ids();
for(ServerClientID id : sortedGridIDS)
grids[id].draw(*this, canvas, drawData);
for(ServerClientID id : sortedGridIDS) {
if(!grids[id].displayInFront)
grids[id].draw(*this, canvas, drawData);
}
}
void GridManager::draw_front(SkCanvas* canvas, const DrawData& drawData) {
auto& sortedGridIDS = sorted_grid_ids();
for(ServerClientID id : sortedGridIDS) {
if(grids[id].displayInFront)
grids[id].draw(*this, canvas, drawData);
}
}
void GridManager::draw_coordinates(SkCanvas* canvas, const DrawData& drawData) {

View file

@ -21,7 +21,8 @@ class GridManager {
void send_grid_info(ServerClientID gridID);
void remove_grid(ServerClientID idToRemove);
void draw(SkCanvas* canvas, const DrawData& drawData);
void draw_back(SkCanvas* canvas, const DrawData& drawData);
void draw_front(SkCanvas* canvas, const DrawData& drawData);
void draw_coordinates(SkCanvas* canvas, const DrawData& drawData);
void scale_up(const WorldScalar& scaleUpAmount);

View file

@ -439,9 +439,11 @@ void World::scale_up(const WorldScalar& scaleUpAmount) {
void World::draw(SkCanvas* canvas) {
drawData.refresh_draw_optimizing_values();
if(drawData.drawGrids)
gridMan.draw(canvas, drawData);
gridMan.draw_back(canvas, drawData);
drawProg.draw(canvas, drawData);
if(drawData.drawGrids)
if(drawData.drawGrids) {
gridMan.draw_front(canvas, drawData);
gridMan.draw_coordinates(canvas, drawData);
}
draw_other_player_cursors(canvas, drawData);
}

View file

@ -9,7 +9,7 @@ class GridManager;
class WorldGrid {
public:
template <class Archive> void serialize(Archive& a) {
a(name, gridType, size, visible, offset, bounds, color, removeDivisionsOutwards, subdivisions, showCoordinates);
a(name, gridType, size, visible, offset, bounds, color, removeDivisionsOutwards, subdivisions, showCoordinates, displayInFront);
}
void draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawData);
@ -43,6 +43,7 @@ class WorldGrid {
WorldScalar coordinatesGridCoordDivSize;
bool coordinatesWillBeDrawn = false;
bool coordinatesAxisOnBounds = false;
bool displayInFront = false;
private:
struct ShaderData {