diff --git a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp index 17957d1..89f2b9e 100644 --- a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp +++ b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp @@ -669,24 +669,6 @@ namespace NetworkingObjects { return clientData.begin(); } - NetworkingObjects::NetObjOrderedListIterator get_prev_client_iterator_from_server_previous_net_obj_id(NetworkingObjects::NetObjID previousObjId) { - if(previousObjId == NetworkingObjects::NetObjID{0, 0}) - return clientData.begin(); - else { - auto serverIt = serverIdToDataMap[previousObjId]; - for(;;) { - NetworkingObjects::NetObjID netObjID = *serverIt; - auto clientIt = clientIdToDataMap.find(netObjID); - if(clientIt != clientIdToDataMap.end()) - return clientIt->second; - if(serverIt == serverData.begin()) - return clientData.begin(); - --serverIt; - } - } - return clientData.begin(); - } - std::list::iterator get_server_iterator_from_server_previous_net_obj_id(NetworkingObjects::NetObjID previousObjId) { if(previousObjId == NetworkingObjects::NetObjID{0, 0}) return serverData.begin(); diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 22fd4a4..3dd8e9f 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -91,12 +91,13 @@ void DrawingProgram::init_client_callbacks() { } void DrawingProgram::process_transform_message(const std::vector>& transforms) { + auto selectedSet = selection.get_selection_as_set(); for(auto& [id, coords] : transforms) { auto objPtr = world.netObjMan.get_obj_temporary_ref_from_id(id); - if(!objPtr || selection.is_selected(&(*objPtr->objInfo))) // Whatever transformation we're doing right now will overwrite this transformation, so we can ignore this message - return; + if(!objPtr || selectedSet.contains(&(*objPtr->objInfo))) // Whatever transformation we're doing right now will overwrite this transformation, so we can ignore this message + continue; if(objPtr->coords == coords) - return; + continue; objPtr->coords = coords; objPtr->commit_transform(*this); } @@ -110,7 +111,7 @@ void DrawingProgram::send_transforms_for(const std::vectorsend_items_to_all_clients(RELIABLE_COMMAND_CHANNEL, CLIENT_TRANSFORM_MANY_COMPONENTS, transforms); else - world.con.client_send_items_to_server(RELIABLE_COMMAND_CHANNEL, CLIENT_TRANSFORM_MANY_COMPONENTS, transforms); + world.con.client_send_items_to_server(RELIABLE_COMMAND_CHANNEL, SERVER_TRANSFORM_MANY_COMPONENTS, transforms); } } diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index a91d900..4d2b83a 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -135,6 +135,10 @@ bool DrawingProgramSelection::is_selected(CanvasComponentContainer::ObjInfo* obj void DrawingProgramSelection::reset_all() { selectedSet.clear(); + reset_transform_data(); +} + +void DrawingProgramSelection::reset_transform_data() { selectionTransformCoords = CoordSpaceHelperTransform(); transformOpHappening = TransformOperation::NONE; translateData = TranslationData(); @@ -159,16 +163,14 @@ bool DrawingProgramSelection::mouse_collided_with_rotate_handle_point() { } void DrawingProgramSelection::commit_transform_selection() { - auto selectedSetTemp = selectedSet; - for(auto& comp : selectedSet) { comp->obj->coords = selectionTransformCoords.other_coord_space_from_this_space(comp->obj->coords); - comp->obj->commit_transform(drawP); + comp->obj->commit_transform_dont_invalidate_cache(); } drawP.send_transforms_for(selectedSet); - reset_all(); - set_to_selection(selectedSetTemp); + reset_transform_data(); + calculate_aabb(); } void DrawingProgramSelection::update() { @@ -284,6 +286,7 @@ void DrawingProgramSelection::update() { void DrawingProgramSelection::deselect_all() { if(is_something_selected()) { + commit_transform_selection(); for(auto& obj : selectedSet) drawP.drawCache.add_component(obj); reset_all(); @@ -299,11 +302,9 @@ void DrawingProgramSelection::delete_all() { } void DrawingProgramSelection::erase_component(CanvasComponentContainer::ObjInfo* objToCheck) { - if(is_selected(objToCheck)) { - std::erase(selectedSet, objToCheck); - if(selectedSet.empty()) - reset_all(); - } + std::erase(selectedSet, objToCheck); + if(selectedSet.empty()) + reset_all(); } CanvasComponentContainer::ObjInfo* DrawingProgramSelection::get_front_object_colliding_with_in_editing_layer(const SCollision::ColliderCollection& cC) { diff --git a/src/DrawingProgram/DrawingProgramSelection.hpp b/src/DrawingProgram/DrawingProgramSelection.hpp index 62ef915..335d530 100644 --- a/src/DrawingProgram/DrawingProgramSelection.hpp +++ b/src/DrawingProgram/DrawingProgramSelection.hpp @@ -38,6 +38,7 @@ class DrawingProgramSelection { void sort_selection(); void calculate_aabb(); void reset_all(); + void reset_transform_data(); std::function&)> erase_select_objects_in_bvh_func(std::vector& selectedComponents, const SCollision::ColliderCollection& cC, const SCollision::ColliderCollection& cCWorld, DrawingProgramLayerManager::LayerSelector layerSelector); SCollision::ColliderCollection camSpaceSelection;