GridManager now works on net objects

This commit is contained in:
Yousef Khadadeh 2025-12-10 13:06:45 +03:00
parent 67507a9a39
commit ceafbf8bb6
20 changed files with 214 additions and 222 deletions

View file

@ -20,6 +20,7 @@
#include "../World.hpp"
#include "../MainProgram.hpp"
#include "Helpers/FileDownloader.hpp"
#include "Helpers/NetworkingObjects/NetObjWeakPtr.hpp"
#include "Helpers/StringHelpers.hpp"
#include "LassoSelectTool.hpp"
#include <Helpers/Logger.hpp>
@ -283,9 +284,9 @@ void DrawingProgram::tool_options_gui() {
}
}
void DrawingProgram::modify_grid(ServerClientID gridToModifyID) {
void DrawingProgram::modify_grid(const NetworkingObjects::NetObjPtr<WorldGrid>& gridToModify) {
std::unique_ptr<GridModifyTool> newTool(std::make_unique<GridModifyTool>(*this));
newTool->set_grid_id(gridToModifyID);
newTool->set_grid(gridToModify);
switch_to_tool_ptr(std::move(newTool));
}

View file

@ -2,6 +2,7 @@
#include "../DrawData.hpp"
#include "DrawingProgramCache.hpp"
#include "GridModifyTool.hpp"
#include <Helpers/NetworkingObjects/NetObjPtr.hpp>
#include "PanCanvasTool.hpp"
#include "ZoomCanvasTool.hpp"
#include "cereal/archives/portable_binary.hpp"
@ -63,7 +64,7 @@ class DrawingProgram {
void clear_draw_cache();
void modify_grid(ServerClientID gridToModifyID);
void modify_grid(const NetworkingObjects::NetObjPtr<WorldGrid>& gridToModify);
private:
std::optional<std::chrono::steady_clock::time_point> badFrametimeTimePoint;

View file

@ -2,18 +2,21 @@
#include "DrawingProgram.hpp"
#include "../MainProgram.hpp"
#include "../DrawData.hpp"
#include <Helpers/NetworkingObjects/NetObjWeakPtr.hpp>
#include <Helpers/NetworkingObjects/NetObjGenericSerializedClass.hpp>
#include <cstddef>
using namespace NetworkingObjects;
GridModifyTool::GridModifyTool(DrawingProgram& initDrawP):
DrawingProgramToolBase(initDrawP)
{
}
void GridModifyTool::set_grid_id(ServerClientID newGridID) {
gridID = newGridID;
auto gridFoundIt = drawP.world.gridMan.grids.find(gridID);
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
WorldGrid& g = gridFoundIt->second;
void GridModifyTool::set_grid(const NetObjPtr<WorldGrid>& newGrid) {
grid = newGrid;
if(drawP.world.gridMan.grids->contains(grid)) {
WorldGrid& g = *grid;
oldGrid = g;
CoordSpaceHelper newCam;
newCam.inverseScale = g.size / WorldScalar(WorldGrid::GRID_UNIT_PIXEL_SIZE);
@ -31,9 +34,8 @@ void GridModifyTool::gui_toolbox() {
Toolbar& t = drawP.world.main.toolbar;
t.gui.push_id("Grid modify tool");
t.gui.text_label_centered("Edit Grid");
auto gridFoundIt = drawP.world.gridMan.grids.find(gridID);
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
WorldGrid& g = gridFoundIt->second;
if(drawP.world.gridMan.grids->contains(grid)) {
WorldGrid& g = *grid;
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);
@ -83,9 +85,8 @@ bool GridModifyTool::right_click_popup_gui(Vector2f popupPos) {
}
void GridModifyTool::tool_update() {
auto gridFoundIt = drawP.world.gridMan.grids.find(gridID);
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
WorldGrid& g = gridFoundIt->second;
if(drawP.world.gridMan.grids->contains(grid)) {
WorldGrid& g = *grid;
switch(selectionMode) {
case 0:
if(drawP.controls.leftClick) {
@ -145,9 +146,8 @@ bool GridModifyTool::prevent_undo_or_redo() {
}
void GridModifyTool::draw(SkCanvas* canvas, const DrawData& drawData) {
auto gridFoundIt = drawP.world.gridMan.grids.find(gridID);
if(gridFoundIt != drawP.world.gridMan.grids.end()) {
WorldGrid& g = gridFoundIt->second;
if(drawP.world.gridMan.grids->contains(grid)) {
WorldGrid& g = *grid;
if(g.bounds.has_value()) {
const auto& b = g.bounds.value();
Vector2f bMin = drawP.world.drawData.cam.c.to_space(b.min);
@ -178,5 +178,5 @@ void GridModifyTool::draw(SkCanvas* canvas, const DrawData& drawData) {
}
void GridModifyTool::switch_tool(DrawingProgramToolType newTool) {
drawP.world.gridMan.send_grid_info(oldGrid, gridID);
NetworkingObjects::generic_serialized_class_send_update_to_all<WorldGrid>(grid);
}

View file

@ -1,13 +1,14 @@
#pragma once
#include "DrawingProgramToolBase.hpp"
#include "../WorldGrid.hpp"
#include "Helpers/NetworkingObjects/NetObjPtr.hpp"
class DrawingProgram;
class GridModifyTool : public DrawingProgramToolBase {
public:
GridModifyTool(DrawingProgram& initDrawP);
void set_grid_id(ServerClientID newGridID);
void set_grid(const NetworkingObjects::NetObjPtr<WorldGrid>& newGrid);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox() override;
virtual bool right_click_popup_gui(Vector2f popupPos) override;
@ -17,6 +18,6 @@ class GridModifyTool : public DrawingProgramToolBase {
virtual void switch_tool(DrawingProgramToolType newTool) override;
private:
WorldGrid oldGrid;
ServerClientID gridID;
NetworkingObjects::NetObjPtr<WorldGrid> grid;
unsigned selectionMode = 0;
};