Fixes to world scale up over network

This commit is contained in:
Yousef Khadadeh 2026-05-30 20:57:50 +03:00
parent 015e9bc5df
commit 48823ebad6
4 changed files with 32 additions and 16 deletions

View file

@ -98,7 +98,7 @@ World::World(MainProgram& initMain, const CustomEvents::OpenInfiniPaintFileEvent
void World::init_client_data_list() {
clients = netObjMan.make_obj<NetworkingObjects::NetObjUnorderedSet<ClientData>>();
ownClientData = clients->emplace_direct(clients, ClientData::InitStruct{
serverClientData = ownClientData = clients->emplace_direct(clients, ClientData::InitStruct{
.cursorColor = get_random_cursor_color(),
.displayName = main.conf.displayName
});
@ -156,16 +156,17 @@ void World::init_client(const std::string& serverFullID) {
drawProg.init_client_callbacks();
netClient->add_recv_callback(CLIENT_INITIAL_DATA, [&](cereal::PortableBinaryInputArchive& message) {
std::string fileDisplayName;
NetworkingObjects::NetObjID clientDataObjID;
message(fileDisplayName, clientDataObjID);
NetworkingObjects::NetObjID clientDataObjID, serverDataObjID;
message(fileDisplayName, clientDataObjID, serverDataObjID);
set_name(fileDisplayName);
clients = netObjMan.read_create_message<NetworkingObjects::NetObjUnorderedSet<ClientData>>(message, nullptr);
ownClientData = netObjMan.get_obj_temporary_ref_from_id<ClientData>(clientDataObjID);
serverClientData = netObjMan.get_obj_temporary_ref_from_id<ClientData>(serverDataObjID);
bMan.read_create_message(message);
gridMan.read_create_message(message);
drawProg.read_components_client(message);
canvasTheme.read_create_message(message);
clients = netObjMan.read_create_message<NetworkingObjects::NetObjUnorderedSet<ClientData>>(message, nullptr);
init_client_data_list_callbacks();
ownClientData = netObjMan.get_obj_temporary_ref_from_id<ClientData>(clientDataObjID);
drawData.cam.smooth_move_to(*main.world, ownClientData->get_cam_coords(), ownClientData->get_window_size(), true);
#ifdef ENABLE_ORDERED_LIST_TEST
@ -435,12 +436,12 @@ void World::start_hosting(const std::string& initNetSource, const std::string& s
auto ss(std::make_shared<std::stringstream>());
{
cereal::PortableBinaryOutputArchive a(*ss);
a(CLIENT_INITIAL_DATA, name, clientDataObjPtr.get_net_id());
a(CLIENT_INITIAL_DATA, name, clientDataObjPtr.get_net_id(), serverClientData.get_net_id());
clients.write_create_message(a);
bMan.bookmarkListRoot.write_create_message(a);
gridMan.grids.write_create_message(a);
drawProg.write_components_server(a);
canvasTheme.write_create_message(a);
clients.write_create_message(a);
#ifdef ENABLE_ORDERED_LIST_TEST
listDebugTest.write_create_message(a);
#endif