revert to old _lastUpdated behavior to fix animations and movement

This commit is contained in:
ZappoMan 2014-09-02 19:28:33 -07:00
parent 835071ab06
commit e8b1497d60
3 changed files with 47 additions and 28 deletions

View file

@ -42,9 +42,7 @@ void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) {
// init values with defaults before calling setProperties
//uint64_t now = usecTimestampNow();
_lastEditedRemote = 0;
_lastEditedLocal = 0;
//_lastEdited = 0;
_lastEdited = 0;
_lastUpdated = 0;
_created = 0; // TODO: when do we actually want to make this "now"
@ -62,9 +60,7 @@ void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) {
EntityItem::EntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) {
_type = EntityTypes::Unknown;
_lastEditedRemote = 0;
_lastEditedLocal = 0;
//_lastEdited = 0;
_lastEdited = 0;
_lastUpdated = 0;
_created = properties.getCreated();
initFromEntityItemID(entityItemID);
@ -120,10 +116,18 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
requestedProperties = entityTreeElementExtraEncodeData->entities.value(getEntityItemID());
}
LevelDetails modelLevel = packetData->startLevel();
LevelDetails entityLevel = packetData->startLevel();
quint64 lastEdited = getLastEdited();
const bool wantDebug = false;
if (wantDebug) {
float editedAgo = getEditedAgo();
QString agoAsString = formatSecondsElapsed(editedAgo);
qDebug() << "Writing entity " << getEntityItemID() << " to buffer, lastEdited =" << lastEdited
<< " ago=" << editedAgo << "seconds - " << agoAsString;
}
bool successIDFits = false;
bool successTypeFits = false;
bool successCreatedFits = false;
@ -210,9 +214,9 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
assert(newPropertyFlagsLength == oldPropertyFlagsLength); // should not have grown
}
packetData->endLevel(modelLevel);
packetData->endLevel(entityLevel);
} else {
packetData->discardLevel(modelLevel);
packetData->discardLevel(entityLevel);
appendState = OctreeElement::NONE; // if we got here, then we didn't include the item
}
@ -302,9 +306,15 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
_created = createdFromBuffer; // TODO: do we ever want to discard this???
if (wantDebug) {
quint64 lastEdited = getLastEdited();
float editedAgo = getEditedAgo();
QString agoAsString = formatSecondsElapsed(editedAgo);
QString ageAsString = formatSecondsElapsed(getAge());
qDebug() << "Loading entity " << getEntityItemID() << " from buffer, _created =" << _created
<< " age=" << getAge() << "seconds - " << ageAsString;
qDebug() << "Loading entity " << getEntityItemID() << " from buffer...";
qDebug() << " _created =" << _created;
qDebug() << " age=" << getAge() << "seconds - " << ageAsString;
qDebug() << " lastEdited =" << lastEdited;
qDebug() << " ago=" << editedAgo << "seconds - " << agoAsString;
}
quint64 lastEditedFromBuffer = 0;
@ -322,8 +332,6 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
qDebug() << " entityItemID=" << getEntityItemID();
qDebug() << " now=" << usecTimestampNow();
qDebug() << " getLastEdited();=" << getLastEdited();
qDebug() << " _lastEditedRemote=" << _lastEditedRemote;
qDebug() << " _lastEditedLocal=" << _lastEditedLocal;
qDebug() << " lastEditedFromBuffer=" << lastEditedFromBuffer << " (BEFORE clockskew adjust)";
qDebug() << " clockSkew=" << clockSkew;
qDebug() << " lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted << " (AFTER clockskew adjust)";
@ -332,7 +340,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
// If we've changed our local tree more recently than the new data from this packet
// then we will not be changing our values, instead we just read and skip the data
if (_lastEditedLocal > lastEditedFromBufferAdjusted) {
if (_lastEdited > lastEditedFromBufferAdjusted) {
overwriteLocalData = false;
if (wantDebug) {
qDebug() << "IGNORING old data from server!!! ****************";
@ -343,8 +351,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
qDebug() << "USING NEW data from server!!! ****************";
}
_lastEditedRemote = lastEditedFromBuffer;
_lastEditedRemoteClockSkew = clockSkew;
_lastEdited = lastEditedFromBufferAdjusted;
somethingChangedNotification(); // notify derived classes that something has changed
}
@ -354,6 +361,11 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
quint64 updateDelta = updateDeltaCoder;
if (overwriteLocalData) {
_lastUpdated = lastEditedFromBufferAdjusted + updateDelta; // don't adjust for clock skew since we already did that for _lastEdited
if (wantDebug) {
qDebug() << "_lastUpdated=" << _lastUpdated;
qDebug() << "_lastEdited=" << _lastEdited;
qDebug() << "lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted;
}
}
encodedUpdateDelta = updateDeltaCoder; // determine true length
dataAt += encodedUpdateDelta.size();
@ -417,7 +429,16 @@ bool EntityItem::isRestingOnSurface() const {
void EntityItem::update(const quint64& updateTime) {
bool wantDebug = false;
float timeElapsed = (float)(updateTime - _lastUpdated) / (float)(USECS_PER_SECOND);
if (wantDebug) {
qDebug() << "********** EntityItem::update()";
qDebug() << " updateTime=" << updateTime;
qDebug() << " _lastUpdated=" << _lastUpdated;
qDebug() << " timeElapsed=" << timeElapsed;
}
_lastUpdated = updateTime;
if (wantDebug) {

View file

@ -64,8 +64,8 @@ public:
quint64 getLastUpdated() const { return _lastUpdated; } /// Last simulated time of this entity universal usecs
/// Last edited time of this entity universal usecs
quint64 getLastEdited() const { return std::max((_lastEditedRemote - _lastEditedRemoteClockSkew), _lastEditedLocal); }
void setLastEdited(quint64 lastEdited) { _lastEditedLocal = lastEdited; _lastEditedLocal = lastEdited; }
quint64 getLastEdited() const { return _lastEdited; }
void setLastEdited(quint64 lastEdited) { _lastEdited = _lastUpdated = lastEdited; }
float getEditedAgo() const /// Elapsed seconds since this entity was last edited
{ return (float)(usecTimestampNow() - getLastEdited()) / (float)USECS_PER_SECOND; }
@ -190,10 +190,7 @@ protected:
uint32_t _creatorTokenID;
bool _newlyCreated;
quint64 _lastUpdated;
//quint64 _lastEdited;
quint64 _lastEditedLocal;
quint64 _lastEditedRemote;
quint64 _lastEditedRemoteClockSkew;
quint64 _lastEdited;
quint64 _created;
glm::vec3 _position;

View file

@ -29,6 +29,7 @@ ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID, const EntityI
_animationFrameIndex = 0.0f;
_lastAnimated = usecTimestampNow();
_jointMappingCompleted = false;
_color[0] = _color[1] = _color[2] = 0;
}
EntityItemProperties ModelEntityItem::getProperties() const {
@ -156,11 +157,11 @@ int ModelEntityItem::oldVersionReadEntityDataFromBuffer(const unsigned char* dat
_lastUpdated -= clockSkew;
// _lastEdited
memcpy(&_lastEditedRemote, dataAt, sizeof(_lastEditedRemote));
dataAt += sizeof(_lastEditedRemote);
bytesRead += sizeof(_lastEditedRemote);
_lastEditedRemote -= clockSkew;
_created = _lastEditedRemote; // NOTE: old models didn't have age or created time, assume their last edit was a create
memcpy(&_lastEdited, dataAt, sizeof(_lastEdited));
dataAt += sizeof(_lastEdited);
bytesRead += sizeof(_lastEdited);
_lastEdited -= clockSkew;
_created = _lastEdited; // NOTE: old models didn't have age or created time, assume their last edit was a create
QString ageAsString = formatSecondsElapsed(getAge());
qDebug() << "Loading old model file, _created = _lastEdited =" << _created