mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 17:35:45 +02:00
revert to old _lastUpdated behavior to fix animations and movement
This commit is contained in:
parent
835071ab06
commit
e8b1497d60
3 changed files with 47 additions and 28 deletions
|
@ -42,9 +42,7 @@ void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) {
|
||||||
|
|
||||||
// init values with defaults before calling setProperties
|
// init values with defaults before calling setProperties
|
||||||
//uint64_t now = usecTimestampNow();
|
//uint64_t now = usecTimestampNow();
|
||||||
_lastEditedRemote = 0;
|
_lastEdited = 0;
|
||||||
_lastEditedLocal = 0;
|
|
||||||
//_lastEdited = 0;
|
|
||||||
_lastUpdated = 0;
|
_lastUpdated = 0;
|
||||||
_created = 0; // TODO: when do we actually want to make this "now"
|
_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) {
|
EntityItem::EntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) {
|
||||||
_type = EntityTypes::Unknown;
|
_type = EntityTypes::Unknown;
|
||||||
_lastEditedRemote = 0;
|
_lastEdited = 0;
|
||||||
_lastEditedLocal = 0;
|
|
||||||
//_lastEdited = 0;
|
|
||||||
_lastUpdated = 0;
|
_lastUpdated = 0;
|
||||||
_created = properties.getCreated();
|
_created = properties.getCreated();
|
||||||
initFromEntityItemID(entityItemID);
|
initFromEntityItemID(entityItemID);
|
||||||
|
@ -120,10 +116,18 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
|
||||||
requestedProperties = entityTreeElementExtraEncodeData->entities.value(getEntityItemID());
|
requestedProperties = entityTreeElementExtraEncodeData->entities.value(getEntityItemID());
|
||||||
}
|
}
|
||||||
|
|
||||||
LevelDetails modelLevel = packetData->startLevel();
|
LevelDetails entityLevel = packetData->startLevel();
|
||||||
|
|
||||||
quint64 lastEdited = getLastEdited();
|
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 successIDFits = false;
|
||||||
bool successTypeFits = false;
|
bool successTypeFits = false;
|
||||||
bool successCreatedFits = false;
|
bool successCreatedFits = false;
|
||||||
|
@ -210,9 +214,9 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
|
||||||
assert(newPropertyFlagsLength == oldPropertyFlagsLength); // should not have grown
|
assert(newPropertyFlagsLength == oldPropertyFlagsLength); // should not have grown
|
||||||
}
|
}
|
||||||
|
|
||||||
packetData->endLevel(modelLevel);
|
packetData->endLevel(entityLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(modelLevel);
|
packetData->discardLevel(entityLevel);
|
||||||
appendState = OctreeElement::NONE; // if we got here, then we didn't include the item
|
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???
|
_created = createdFromBuffer; // TODO: do we ever want to discard this???
|
||||||
|
|
||||||
if (wantDebug) {
|
if (wantDebug) {
|
||||||
|
quint64 lastEdited = getLastEdited();
|
||||||
|
float editedAgo = getEditedAgo();
|
||||||
|
QString agoAsString = formatSecondsElapsed(editedAgo);
|
||||||
QString ageAsString = formatSecondsElapsed(getAge());
|
QString ageAsString = formatSecondsElapsed(getAge());
|
||||||
qDebug() << "Loading entity " << getEntityItemID() << " from buffer, _created =" << _created
|
qDebug() << "Loading entity " << getEntityItemID() << " from buffer...";
|
||||||
<< " age=" << getAge() << "seconds - " << ageAsString;
|
qDebug() << " _created =" << _created;
|
||||||
|
qDebug() << " age=" << getAge() << "seconds - " << ageAsString;
|
||||||
|
qDebug() << " lastEdited =" << lastEdited;
|
||||||
|
qDebug() << " ago=" << editedAgo << "seconds - " << agoAsString;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint64 lastEditedFromBuffer = 0;
|
quint64 lastEditedFromBuffer = 0;
|
||||||
|
@ -322,8 +332,6 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
|
||||||
qDebug() << " entityItemID=" << getEntityItemID();
|
qDebug() << " entityItemID=" << getEntityItemID();
|
||||||
qDebug() << " now=" << usecTimestampNow();
|
qDebug() << " now=" << usecTimestampNow();
|
||||||
qDebug() << " getLastEdited();=" << getLastEdited();
|
qDebug() << " getLastEdited();=" << getLastEdited();
|
||||||
qDebug() << " _lastEditedRemote=" << _lastEditedRemote;
|
|
||||||
qDebug() << " _lastEditedLocal=" << _lastEditedLocal;
|
|
||||||
qDebug() << " lastEditedFromBuffer=" << lastEditedFromBuffer << " (BEFORE clockskew adjust)";
|
qDebug() << " lastEditedFromBuffer=" << lastEditedFromBuffer << " (BEFORE clockskew adjust)";
|
||||||
qDebug() << " clockSkew=" << clockSkew;
|
qDebug() << " clockSkew=" << clockSkew;
|
||||||
qDebug() << " lastEditedFromBufferAdjusted=" << lastEditedFromBufferAdjusted << " (AFTER clockskew adjust)";
|
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
|
// 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
|
// then we will not be changing our values, instead we just read and skip the data
|
||||||
if (_lastEditedLocal > lastEditedFromBufferAdjusted) {
|
if (_lastEdited > lastEditedFromBufferAdjusted) {
|
||||||
overwriteLocalData = false;
|
overwriteLocalData = false;
|
||||||
if (wantDebug) {
|
if (wantDebug) {
|
||||||
qDebug() << "IGNORING old data from server!!! ****************";
|
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!!! ****************";
|
qDebug() << "USING NEW data from server!!! ****************";
|
||||||
}
|
}
|
||||||
|
|
||||||
_lastEditedRemote = lastEditedFromBuffer;
|
_lastEdited = lastEditedFromBufferAdjusted;
|
||||||
_lastEditedRemoteClockSkew = clockSkew;
|
|
||||||
somethingChangedNotification(); // notify derived classes that something has changed
|
somethingChangedNotification(); // notify derived classes that something has changed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,6 +361,11 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
|
||||||
quint64 updateDelta = updateDeltaCoder;
|
quint64 updateDelta = updateDeltaCoder;
|
||||||
if (overwriteLocalData) {
|
if (overwriteLocalData) {
|
||||||
_lastUpdated = lastEditedFromBufferAdjusted + updateDelta; // don't adjust for clock skew since we already did that for _lastEdited
|
_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
|
encodedUpdateDelta = updateDeltaCoder; // determine true length
|
||||||
dataAt += encodedUpdateDelta.size();
|
dataAt += encodedUpdateDelta.size();
|
||||||
|
@ -417,7 +429,16 @@ bool EntityItem::isRestingOnSurface() const {
|
||||||
|
|
||||||
void EntityItem::update(const quint64& updateTime) {
|
void EntityItem::update(const quint64& updateTime) {
|
||||||
bool wantDebug = false;
|
bool wantDebug = false;
|
||||||
|
|
||||||
float timeElapsed = (float)(updateTime - _lastUpdated) / (float)(USECS_PER_SECOND);
|
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;
|
_lastUpdated = updateTime;
|
||||||
|
|
||||||
if (wantDebug) {
|
if (wantDebug) {
|
||||||
|
|
|
@ -64,8 +64,8 @@ public:
|
||||||
quint64 getLastUpdated() const { return _lastUpdated; } /// Last simulated time of this entity universal usecs
|
quint64 getLastUpdated() const { return _lastUpdated; } /// Last simulated time of this entity universal usecs
|
||||||
|
|
||||||
/// Last edited time of this entity universal usecs
|
/// Last edited time of this entity universal usecs
|
||||||
quint64 getLastEdited() const { return std::max((_lastEditedRemote - _lastEditedRemoteClockSkew), _lastEditedLocal); }
|
quint64 getLastEdited() const { return _lastEdited; }
|
||||||
void setLastEdited(quint64 lastEdited) { _lastEditedLocal = lastEdited; _lastEditedLocal = lastEdited; }
|
void setLastEdited(quint64 lastEdited) { _lastEdited = _lastUpdated = lastEdited; }
|
||||||
float getEditedAgo() const /// Elapsed seconds since this entity was last edited
|
float getEditedAgo() const /// Elapsed seconds since this entity was last edited
|
||||||
{ return (float)(usecTimestampNow() - getLastEdited()) / (float)USECS_PER_SECOND; }
|
{ return (float)(usecTimestampNow() - getLastEdited()) / (float)USECS_PER_SECOND; }
|
||||||
|
|
||||||
|
@ -190,10 +190,7 @@ protected:
|
||||||
uint32_t _creatorTokenID;
|
uint32_t _creatorTokenID;
|
||||||
bool _newlyCreated;
|
bool _newlyCreated;
|
||||||
quint64 _lastUpdated;
|
quint64 _lastUpdated;
|
||||||
//quint64 _lastEdited;
|
quint64 _lastEdited;
|
||||||
quint64 _lastEditedLocal;
|
|
||||||
quint64 _lastEditedRemote;
|
|
||||||
quint64 _lastEditedRemoteClockSkew;
|
|
||||||
quint64 _created;
|
quint64 _created;
|
||||||
|
|
||||||
glm::vec3 _position;
|
glm::vec3 _position;
|
||||||
|
|
|
@ -29,6 +29,7 @@ ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID, const EntityI
|
||||||
_animationFrameIndex = 0.0f;
|
_animationFrameIndex = 0.0f;
|
||||||
_lastAnimated = usecTimestampNow();
|
_lastAnimated = usecTimestampNow();
|
||||||
_jointMappingCompleted = false;
|
_jointMappingCompleted = false;
|
||||||
|
_color[0] = _color[1] = _color[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityItemProperties ModelEntityItem::getProperties() const {
|
EntityItemProperties ModelEntityItem::getProperties() const {
|
||||||
|
@ -156,11 +157,11 @@ int ModelEntityItem::oldVersionReadEntityDataFromBuffer(const unsigned char* dat
|
||||||
_lastUpdated -= clockSkew;
|
_lastUpdated -= clockSkew;
|
||||||
|
|
||||||
// _lastEdited
|
// _lastEdited
|
||||||
memcpy(&_lastEditedRemote, dataAt, sizeof(_lastEditedRemote));
|
memcpy(&_lastEdited, dataAt, sizeof(_lastEdited));
|
||||||
dataAt += sizeof(_lastEditedRemote);
|
dataAt += sizeof(_lastEdited);
|
||||||
bytesRead += sizeof(_lastEditedRemote);
|
bytesRead += sizeof(_lastEdited);
|
||||||
_lastEditedRemote -= clockSkew;
|
_lastEdited -= clockSkew;
|
||||||
_created = _lastEditedRemote; // NOTE: old models didn't have age or created time, assume their last edit was a create
|
_created = _lastEdited; // NOTE: old models didn't have age or created time, assume their last edit was a create
|
||||||
|
|
||||||
QString ageAsString = formatSecondsElapsed(getAge());
|
QString ageAsString = formatSecondsElapsed(getAge());
|
||||||
qDebug() << "Loading old model file, _created = _lastEdited =" << _created
|
qDebug() << "Loading old model file, _created = _lastEdited =" << _created
|
||||||
|
|
Loading…
Reference in a new issue