Fixed transform over network sync issues
This commit is contained in:
parent
65c744d5cd
commit
260288a1b0
4 changed files with 17 additions and 32 deletions
|
|
@ -91,12 +91,13 @@ void DrawingProgram::init_client_callbacks() {
|
|||
}
|
||||
|
||||
void DrawingProgram::process_transform_message(const std::vector<std::pair<NetworkingObjects::NetObjID, CoordSpaceHelper>>& transforms) {
|
||||
auto selectedSet = selection.get_selection_as_set();
|
||||
for(auto& [id, coords] : transforms) {
|
||||
auto objPtr = world.netObjMan.get_obj_temporary_ref_from_id<CanvasComponentContainer>(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::vector<CanvasComponentContai
|
|||
if(world.netObjMan.is_server())
|
||||
world.netServer->send_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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<float>& cC) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ class DrawingProgramSelection {
|
|||
void sort_selection();
|
||||
void calculate_aabb();
|
||||
void reset_all();
|
||||
void reset_transform_data();
|
||||
std::function<bool(const std::shared_ptr<DrawingProgramCacheBVHNode>&)> erase_select_objects_in_bvh_func(std::vector<CanvasComponentContainer::ObjInfo*>& selectedComponents, const SCollision::ColliderCollection<float>& cC, const SCollision::ColliderCollection<WorldScalar>& cCWorld, DrawingProgramLayerManager::LayerSelector layerSelector);
|
||||
|
||||
SCollision::ColliderCollection<float> camSpaceSelection;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue