mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 17:28:13 +02:00
create missing avatar when processing traits
This commit is contained in:
parent
fc5b72e9b9
commit
0f03764c97
1 changed files with 16 additions and 29 deletions
|
@ -200,14 +200,8 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
||||||
auto avatarID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
auto avatarID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
||||||
|
|
||||||
// grab the avatar so we can ask it to process trait data
|
// grab the avatar so we can ask it to process trait data
|
||||||
AvatarSharedPointer avatar;
|
bool isNewAvatar;
|
||||||
|
auto avatar = newOrExistingAvatar(avatarID, sendingNode, isNewAvatar);
|
||||||
QReadLocker locker(&_hashLock);
|
|
||||||
auto it = _avatarHash.find(avatarID);
|
|
||||||
if (it != _avatarHash.end()) {
|
|
||||||
avatar = *it;
|
|
||||||
}
|
|
||||||
locker.unlock();
|
|
||||||
|
|
||||||
// read the first trait type for this avatar
|
// read the first trait type for this avatar
|
||||||
AvatarTraits::TraitType traitType;
|
AvatarTraits::TraitType traitType;
|
||||||
|
@ -223,21 +217,16 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
||||||
AvatarTraits::TraitWireSize traitBinarySize;
|
AvatarTraits::TraitWireSize traitBinarySize;
|
||||||
bool skipBinaryTrait = false;
|
bool skipBinaryTrait = false;
|
||||||
|
|
||||||
if (!avatar) {
|
|
||||||
skipBinaryTrait = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AvatarTraits::isSimpleTrait(traitType)) {
|
if (AvatarTraits::isSimpleTrait(traitType)) {
|
||||||
message->readPrimitive(&traitBinarySize);
|
message->readPrimitive(&traitBinarySize);
|
||||||
|
|
||||||
if (avatar) {
|
// check if this trait version is newer than what we already have for this avatar
|
||||||
// check if this trait version is newer than what we already have for this avatar
|
if (packetTraitVersion > lastProcessedVersions[traitType]) {
|
||||||
if (packetTraitVersion > lastProcessedVersions[traitType]) {
|
avatar->processTrait(traitType, message->read(traitBinarySize));
|
||||||
avatar->processTrait(traitType, message->read(traitBinarySize));
|
lastProcessedVersions[traitType] = packetTraitVersion;
|
||||||
lastProcessedVersions[traitType] = packetTraitVersion;
|
} else {
|
||||||
} else {
|
skipBinaryTrait = true;
|
||||||
skipBinaryTrait = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AvatarTraits::TraitInstanceID traitInstanceID =
|
AvatarTraits::TraitInstanceID traitInstanceID =
|
||||||
|
@ -245,18 +234,16 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
||||||
|
|
||||||
message->readPrimitive(&traitBinarySize);
|
message->readPrimitive(&traitBinarySize);
|
||||||
|
|
||||||
if (avatar) {
|
auto& processedInstanceVersion = lastProcessedVersions.getInstanceValueRef(traitType, traitInstanceID);
|
||||||
auto& processedInstanceVersion = lastProcessedVersions.getInstanceValueRef(traitType, traitInstanceID);
|
if (packetTraitVersion > processedInstanceVersion) {
|
||||||
if (packetTraitVersion > processedInstanceVersion) {
|
if (traitBinarySize == AvatarTraits::DELETED_TRAIT_SIZE) {
|
||||||
if (traitBinarySize == AvatarTraits::DELETED_TRAIT_SIZE) {
|
avatar->processDeletedTraitInstance(traitType, traitInstanceID);
|
||||||
avatar->processDeletedTraitInstance(traitType, traitInstanceID);
|
|
||||||
} else {
|
|
||||||
avatar->processTraitInstance(traitType, traitInstanceID, message->read(traitBinarySize));
|
|
||||||
}
|
|
||||||
processedInstanceVersion = packetTraitVersion;
|
|
||||||
} else {
|
} else {
|
||||||
skipBinaryTrait = true;
|
avatar->processTraitInstance(traitType, traitInstanceID, message->read(traitBinarySize));
|
||||||
}
|
}
|
||||||
|
processedInstanceVersion = packetTraitVersion;
|
||||||
|
} else {
|
||||||
|
skipBinaryTrait = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue