From aaae07087c4d9d9b5299834a64b737c8c17882c4 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Mon, 7 Jul 2014 18:09:50 -0700 Subject: [PATCH] Fix for local edits. --- .../metavoxels/src/MetavoxelClientManager.cpp | 27 +++++++++---------- .../metavoxels/src/MetavoxelClientManager.h | 4 +-- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/libraries/metavoxels/src/MetavoxelClientManager.cpp b/libraries/metavoxels/src/MetavoxelClientManager.cpp index 9abb5e9e5d..abe54873bd 100644 --- a/libraries/metavoxels/src/MetavoxelClientManager.cpp +++ b/libraries/metavoxels/src/MetavoxelClientManager.cpp @@ -116,30 +116,26 @@ void MetavoxelClient::writeUpdateMessage(Bitstream& out) { out << QVariant::fromValue(state); } -void MetavoxelClient::readMessage(Bitstream& in) { - Endpoint::readMessage(in); - - // reapply local edits - foreach (const DatagramSequencer::HighPriorityMessage& message, _sequencer.getHighPriorityMessages()) { - if (message.data.userType() == MetavoxelEditMessage::Type) { - message.data.value().apply(_data, _sequencer.getWeakSharedObjectHash()); - } - } -} - void MetavoxelClient::handleMessage(const QVariant& message, Bitstream& in) { int userType = message.userType(); if (userType == MetavoxelDeltaMessage::Type) { PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord(); if (_reliableDeltaChannel) { - _data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, _dataLOD = _reliableDeltaLOD); + _remoteData.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, _remoteDataLOD = _reliableDeltaLOD); _sequencer.getInputStream().persistReadMappings(in.getAndResetReadMappings()); in.clearPersistentMappings(); _reliableDeltaChannel = NULL; } else { - _data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, - _dataLOD = getLastAcknowledgedSendRecord()->getLOD()); + _remoteData.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, + _remoteDataLOD = getLastAcknowledgedSendRecord()->getLOD()); + } + // copy to local and reapply local edits + _data = _remoteData; + foreach (const DatagramSequencer::HighPriorityMessage& message, _sequencer.getHighPriorityMessages()) { + if (message.data.userType() == MetavoxelEditMessage::Type) { + message.data.value().apply(_data, _sequencer.getWeakSharedObjectHash()); + } } } else if (userType == MetavoxelDeltaPendingMessage::Type) { if (!_reliableDeltaChannel) { @@ -157,5 +153,6 @@ PacketRecord* MetavoxelClient::maybeCreateSendRecord() const { } PacketRecord* MetavoxelClient::maybeCreateReceiveRecord() const { - return new PacketRecord(_dataLOD, _data); + return new PacketRecord(_remoteDataLOD, _remoteData); } + diff --git a/libraries/metavoxels/src/MetavoxelClientManager.h b/libraries/metavoxels/src/MetavoxelClientManager.h index 9ab2e2c8b0..1f37b15c18 100644 --- a/libraries/metavoxels/src/MetavoxelClientManager.h +++ b/libraries/metavoxels/src/MetavoxelClientManager.h @@ -60,7 +60,6 @@ public: protected: virtual void writeUpdateMessage(Bitstream& out); - virtual void readMessage(Bitstream& in); virtual void handleMessage(const QVariant& message, Bitstream& in); virtual PacketRecord* maybeCreateSendRecord() const; @@ -70,7 +69,8 @@ private: MetavoxelClientManager* _manager; MetavoxelData _data; - MetavoxelLOD _dataLOD; + MetavoxelData _remoteData; + MetavoxelLOD _remoteDataLOD; ReliableChannel* _reliableDeltaChannel; MetavoxelLOD _reliableDeltaLOD;