mirror of
https://github.com/lubosz/overte.git
synced 2025-04-16 04:53:13 +02:00
Record entities
This commit is contained in:
parent
8bd9bf39b6
commit
5f4903f884
4 changed files with 21 additions and 4 deletions
|
@ -184,6 +184,7 @@ MyAvatar::MyAvatar(QThread* thread) :
|
|||
if (recordingInterface->getPlayFromCurrentLocation()) {
|
||||
setRecordingBasis();
|
||||
}
|
||||
createRecordingIDs();
|
||||
_previousCollisionGroup = _characterController.computeCollisionGroup();
|
||||
_characterController.setCollisionless(true);
|
||||
} else {
|
||||
|
|
|
@ -236,6 +236,8 @@ void Avatar::updateAvatarEntities() {
|
|||
return;
|
||||
}
|
||||
|
||||
createRecordingIDs();
|
||||
|
||||
if (getID().isNull() ||
|
||||
getID() == AVATAR_SELF_ID ||
|
||||
DependencyManager::get<NodeList>()->getSessionUUID() == QUuid()) {
|
||||
|
|
|
@ -2243,6 +2243,15 @@ void AvatarData::setRecordingBasis(std::shared_ptr<Transform> recordingBasis) {
|
|||
_recordingBasis = recordingBasis;
|
||||
}
|
||||
|
||||
void AvatarData::createRecordingIDs() {
|
||||
_avatarEntitiesLock.withReadLock([&] {
|
||||
_avatarEntityForRecording.clear();
|
||||
for (int i = 0; i < _avatarEntityData.size(); i++) {
|
||||
_avatarEntityForRecording.insert(QUuid::createUuid());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void AvatarData::clearRecordingBasis() {
|
||||
_recordingBasis.reset();
|
||||
}
|
||||
|
@ -2306,10 +2315,12 @@ QJsonObject AvatarData::toJson() const {
|
|||
_avatarEntitiesLock.withReadLock([&] {
|
||||
if (!_avatarEntityData.empty()) {
|
||||
QJsonArray avatarEntityJson;
|
||||
int entityCount = 0;
|
||||
for (auto entityID : _avatarEntityData.keys()) {
|
||||
QVariantMap entityData;
|
||||
entityData.insert("id", entityID);
|
||||
entityData.insert("properties", _avatarEntityData.value(entityID));
|
||||
QUuid newId = _avatarEntityForRecording.size() == _avatarEntityData.size() ? _avatarEntityForRecording.values()[entityCount++] : entityID;
|
||||
entityData.insert("id", newId);
|
||||
entityData.insert("properties", _avatarEntityData.value(entityID).toBase64());
|
||||
avatarEntityJson.push_back(QVariant(entityData).toJsonObject());
|
||||
}
|
||||
root[JSON_AVATAR_ENTITIES] = avatarEntityJson;
|
||||
|
@ -2434,10 +2445,11 @@ void AvatarData::fromJson(const QJsonObject& json, bool useFrameSkeleton) {
|
|||
if (json.contains(JSON_AVATAR_ENTITIES) && json[JSON_AVATAR_ENTITIES].isArray()) {
|
||||
QJsonArray attachmentsJson = json[JSON_AVATAR_ENTITIES].toArray();
|
||||
for (auto attachmentJson : attachmentsJson) {
|
||||
if (attachmentJson.isObject()) {
|
||||
if (attachmentJson.isObject()) {
|
||||
QVariantMap entityData = attachmentJson.toObject().toVariantMap();
|
||||
QUuid entityID = entityData.value("id").toUuid();
|
||||
QByteArray properties = entityData.value("properties").toByteArray();
|
||||
auto ds = QByteArray::fromBase64(entityData.value("properties").toString().toUtf8());
|
||||
QByteArray properties = QByteArray::fromBase64(entityData.value("properties").toByteArray());
|
||||
updateAvatarEntity(entityID, properties);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1077,6 +1077,7 @@ public:
|
|||
void clearRecordingBasis();
|
||||
TransformPointer getRecordingBasis() const;
|
||||
void setRecordingBasis(TransformPointer recordingBasis = TransformPointer());
|
||||
void createRecordingIDs();
|
||||
QJsonObject toJson() const;
|
||||
void fromJson(const QJsonObject& json, bool useFrameSkeleton = true);
|
||||
|
||||
|
@ -1410,6 +1411,7 @@ protected:
|
|||
|
||||
mutable ReadWriteLockable _avatarEntitiesLock;
|
||||
AvatarEntityIDs _avatarEntityDetached; // recently detached from this avatar
|
||||
AvatarEntityIDs _avatarEntityForRecording; // create new entities id for avatar recording
|
||||
AvatarEntityMap _avatarEntityData;
|
||||
bool _avatarEntityDataLocallyEdited { false };
|
||||
bool _avatarEntityDataChanged { false };
|
||||
|
|
Loading…
Reference in a new issue