From 45dbff67f8099a832f508a80e29bb0dc667edb61 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 27 Jan 2015 11:15:33 -0800 Subject: [PATCH] more hacking --- libraries/entities/src/BoxEntityItem.cpp | 9 ++++ libraries/entities/src/BoxEntityItem.h | 2 + libraries/entities/src/EntityItem.cpp | 58 +++++++++++++-------- libraries/entities/src/EntityItem.h | 4 ++ libraries/entities/src/SphereEntityItem.cpp | 11 ++++ libraries/entities/src/SphereEntityItem.h | 2 + libraries/physics/src/EntityMotionState.cpp | 8 ++- 7 files changed, 71 insertions(+), 23 deletions(-) diff --git a/libraries/entities/src/BoxEntityItem.cpp b/libraries/entities/src/BoxEntityItem.cpp index 88e1a4b6b1..25ef2e6aaf 100644 --- a/libraries/entities/src/BoxEntityItem.cpp +++ b/libraries/entities/src/BoxEntityItem.cpp @@ -101,3 +101,12 @@ void BoxEntityItem::computeShapeInfo(ShapeInfo& info) const { info.setBox(halfExtents); } +void BoxEntityItem::debugDump() const { + quint64 now = usecTimestampNow(); + qDebug() << " BOX EntityItem id:" << getEntityItemID() << "---------------------------------------------"; + qDebug() << " color:" << _color[0] << "," << _color[1] << "," << _color[2]; + qDebug() << " position:" << debugTreeVector(_position); + qDebug() << " dimensions:" << debugTreeVector(_dimensions); + qDebug() << " getLastEdited:" << debugTime(getLastEdited(), now); +} + diff --git a/libraries/entities/src/BoxEntityItem.h b/libraries/entities/src/BoxEntityItem.h index 3ce67369ee..8d68a13158 100644 --- a/libraries/entities/src/BoxEntityItem.h +++ b/libraries/entities/src/BoxEntityItem.h @@ -53,6 +53,8 @@ public: void computeShapeInfo(ShapeInfo& info) const; + virtual void debugDump() const; + protected: rgbColor _color; }; diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 338009c280..0ebab1f19c 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -380,7 +380,11 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef float editedAgo = getEditedAgo(); QString agoAsString = formatSecondsElapsed(editedAgo); QString ageAsString = formatSecondsElapsed(getAge()); + qDebug() << "------------------------------------------"; qDebug() << "Loading entity " << getEntityItemID() << " from buffer..."; + qDebug() << "------------------------------------------"; + debugDump(); + qDebug() << "------------------------------------------"; qDebug() << " _created =" << _created; qDebug() << " age=" << getAge() << "seconds - " << ageAsString; qDebug() << " lastEdited =" << lastEdited; @@ -402,19 +406,17 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef bool fromSameServerEdit = (lastEditedFromBuffer == _lastEditedFromRemoteInRemoteTime); - if (wantDebug) { + if (true || wantDebug) { qDebug() << "data from server **************** "; - qDebug() << " entityItemID=" << getEntityItemID(); - qDebug() << " now=" << now; - qDebug() << " getLastEdited()=" << getLastEdited(); - qDebug() << " lastEditedFromBuffer=" << lastEditedFromBuffer << " (BEFORE clockskew adjust)"; - qDebug() << " clockSkew=" << clockSkew; - qDebug() << " lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted << " (AFTER clockskew adjust)"; - qDebug() << " _lastEditedFromRemote=" << _lastEditedFromRemote - << " (our local time the last server edit we accepted)"; - qDebug() << " _lastEditedFromRemoteInRemoteTime=" << _lastEditedFromRemoteInRemoteTime - << " (remote time the last server edit we accepted)"; - qDebug() << " fromSameServerEdit=" << fromSameServerEdit; + qDebug() << " entityItemID:" << getEntityItemID(); + qDebug() << " now:" << now; + qDebug() << " getLastEdited:" << debugTime(getLastEdited(), now); + qDebug() << " lastEditedFromBuffer:" << debugTime(lastEditedFromBuffer, now); + qDebug() << " clockSkew:" << debugTimeOnly(clockSkew); + qDebug() << " lastEditedFromBufferAdjusted:" << debugTime(lastEditedFromBufferAdjusted, now); + qDebug() << " _lastEditedFromRemote:" << debugTime(_lastEditedFromRemote, now); + qDebug() << " _lastEditedFromRemoteInRemoteTime:" << debugTime(_lastEditedFromRemoteInRemoteTime, now); + qDebug() << " fromSameServerEdit:" << fromSameServerEdit; } bool ignoreServerPacket = false; // assume we'll use this server packet @@ -438,13 +440,15 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef if (ignoreServerPacket) { overwriteLocalData = false; - if (wantDebug) { + if (true || wantDebug) { qDebug() << "IGNORING old data from server!!! ****************"; + debugDump(); } } else { - if (wantDebug) { + if (true || wantDebug) { qDebug() << "USING NEW data from server!!! ****************"; + debugDump(); } // don't allow _lastEdited to be in the future @@ -464,9 +468,9 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef if (overwriteLocalData) { _lastUpdated = lastEditedFromBufferAdjusted + updateDelta; // don't adjust for clock skew since we already did that if (wantDebug) { - qDebug() << "_lastUpdated =" << _lastUpdated; - qDebug() << "_lastEdited=" << _lastEdited; - qDebug() << "lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted; + qDebug() << " _lastUpdated:" << debugTime(_lastUpdated, now); + qDebug() << " _lastEdited:" << debugTime(_lastEdited, now); + qDebug() << " lastEditedFromBufferAdjusted:" << debugTime(lastEditedFromBufferAdjusted, now); } } encodedUpdateDelta = updateDeltaCoder; // determine true length @@ -482,15 +486,25 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef if (overwriteLocalData) { _lastSimulated = lastEditedFromBufferAdjusted + simulatedDelta; // don't adjust for clock skew since we already did that if (wantDebug) { - qDebug() << "_lastSimulated =" << _lastSimulated; - qDebug() << "_lastEdited=" << _lastEdited; - qDebug() << "lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted; + qDebug() << " _lastSimulated:" << debugTime(_lastSimulated, now); + qDebug() << " _lastEdited:" << debugTime(_lastEdited, now); + qDebug() << " lastEditedFromBufferAdjusted:" << debugTime(lastEditedFromBufferAdjusted, now); } } encodedSimulatedDelta = simulatedDeltaCoder; // determine true length dataAt += encodedSimulatedDelta.size(); bytesRead += encodedSimulatedDelta.size(); - } + } + + #if 1 //def WANT_DEBUG + if (overwriteLocalData) { + qDebug() << "EntityItem::readEntityDataFromBuffer()... changed entity:" << getEntityItemID(); + qDebug() << " getLastEdited:" << debugTime(getLastEdited(), now); + qDebug() << " getLastSimulated:" << debugTime(getLastSimulated(), now); + qDebug() << " getLastUpdated:" << debugTime(getLastUpdated(), now); + } + #endif + // Property Flags QByteArray encodedPropertyFlags = originalDataBuffer.mid(bytesRead); // maximum possible size @@ -592,7 +606,7 @@ void EntityItem::adjustEditPacketForClockSkew(unsigned char* editPacketBuffer, s memcpy(&lastEditedInLocalTime, dataAt, sizeof(lastEditedInLocalTime)); quint64 lastEditedInServerTime = lastEditedInLocalTime + clockSkew; memcpy(dataAt, &lastEditedInServerTime, sizeof(lastEditedInServerTime)); - const bool wantDebug = false; + const bool wantDebug = true; if (wantDebug) { qDebug("EntityItem::adjustEditPacketForClockSkew()..."); qDebug() << " lastEditedInLocalTime: " << lastEditedInLocalTime; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 2cba4692d0..58dc391458 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -36,6 +36,10 @@ class EntityTreeElementExtraEncodeData; #define DONT_ALLOW_INSTANTIATION virtual void pureVirtualFunctionPlaceHolder() = 0; #define ALLOW_INSTANTIATION virtual void pureVirtualFunctionPlaceHolder() { }; +#define debugTime(T, N) qPrintable(QString("%1 [ %2 ago]").arg(T, 16, 10).arg(formatUsecTime(N - T), 15)) +#define debugTimeOnly(T) qPrintable(QString("%1").arg(T, 16, 10)) +#define debugTreeVector(V) V << "[" << (V * (float)TREE_SCALE) << " in meters ]" + /// EntityItem class this is the base class for all entity types. It handles the basic properties and functionality available /// to all other entity types. In particular: postion, size, rotation, age, lifetime, velocity, gravity. You can not instantiate diff --git a/libraries/entities/src/SphereEntityItem.cpp b/libraries/entities/src/SphereEntityItem.cpp index 7f3d619e03..181e5851f6 100644 --- a/libraries/entities/src/SphereEntityItem.cpp +++ b/libraries/entities/src/SphereEntityItem.cpp @@ -132,3 +132,14 @@ bool SphereEntityItem::findDetailedRayIntersection(const glm::vec3& origin, cons } return false; } + + +void SphereEntityItem::debugDump() const { + quint64 now = usecTimestampNow(); + qDebug() << "SHPERE EntityItem id:" << getEntityItemID() << "---------------------------------------------"; + qDebug() << " color:" << _color[0] << "," << _color[1] << "," << _color[2]; + qDebug() << " position:" << debugTreeVector(_position); + qDebug() << " dimensions:" << debugTreeVector(_dimensions); + qDebug() << " getLastEdited:" << debugTime(getLastEdited(), now); +} + diff --git a/libraries/entities/src/SphereEntityItem.h b/libraries/entities/src/SphereEntityItem.h index c81f80d9ab..f76c9f5600 100644 --- a/libraries/entities/src/SphereEntityItem.h +++ b/libraries/entities/src/SphereEntityItem.h @@ -63,6 +63,8 @@ public: bool& keepSearching, OctreeElement*& element, float& distance, BoxFace& face, void** intersectedObject, bool precisionPicking) const; + virtual void debugDump() const; + protected: virtual void recalculateCollisionShape(); diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 3355f12b47..01d9162314 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -228,9 +228,15 @@ void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, uint32_ // we only update lastEdited when we're sending new physics data // (i.e. NOT when we just simulate the positions forward, nore when we resend non-moving data) // NOTE: Andrew & Brad to discuss. Let's make sure we're using lastEdited, lastSimulated, and lastUpdated correctly - quint64 lastSimulated = _entity->getLastSimulated(); + quint64 now = usecTimestampNow(); + quint64 lastSimulated = _entity->getLastSimulated(); // or now??? _entity->setLastEdited(lastSimulated); properties.setLastEdited(lastSimulated); + + qDebug() << "EntityMotionState::sendUpdate()"; + qDebug() << " EntityItemId:" << _entity->getEntityItemID() << "---------------------------------------------"; + qDebug() << " lastSimulated:" << debugTime(lastSimulated, now); + } else { properties.setLastEdited(_entity->getLastEdited()); }