mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 23:09:52 +02:00
unravel spaghetti, prefer std over Qt containers
This commit is contained in:
parent
aff1244e09
commit
ee3fde9df1
5 changed files with 50 additions and 37 deletions
|
@ -5310,7 +5310,7 @@ void MyAvatar::releaseGrab(const QUuid& grabID) {
|
||||||
|
|
||||||
_avatarGrabsLock.withWriteLock([&] {
|
_avatarGrabsLock.withWriteLock([&] {
|
||||||
if (_avatarGrabData.remove(grabID)) {
|
if (_avatarGrabData.remove(grabID)) {
|
||||||
_deletedAvatarGrabs.insert(grabID);
|
_deletedAvatarGrabs.push_back(grabID);
|
||||||
tellHandler = true;
|
tellHandler = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -331,19 +331,18 @@ bool Avatar::updateGrabs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool grabAddedOrRemoved = false;
|
bool grabAddedOrRemoved = false;
|
||||||
// update the Grabs according to any changes in _avatarGrabData
|
|
||||||
_avatarGrabsLock.withWriteLock([&] {
|
_avatarGrabsLock.withWriteLock([&] {
|
||||||
if (_avatarGrabDataChanged) {
|
if (_avatarGrabDataChanged) {
|
||||||
|
// collect changes in _avatarGrabData
|
||||||
foreach (auto grabID, _avatarGrabData.keys()) {
|
foreach (auto grabID, _avatarGrabData.keys()) {
|
||||||
AvatarGrabMap::iterator grabItr = _avatarGrabs.find(grabID);
|
MapOfGrabs::iterator itr = _avatarGrabs.find(grabID);
|
||||||
if (grabItr == _avatarGrabs.end()) {
|
if (itr == _avatarGrabs.end()) {
|
||||||
GrabPointer grab = std::make_shared<Grab>();
|
GrabPointer grab = std::make_shared<Grab>();
|
||||||
grab->fromByteArray(_avatarGrabData.value(grabID));
|
grab->fromByteArray(_avatarGrabData.value(grabID));
|
||||||
_avatarGrabs[grabID] = grab;
|
_avatarGrabs[grabID] = grab;
|
||||||
_changedAvatarGrabs.insert(grabID);
|
_changedAvatarGrabs.insert(grabID);
|
||||||
} else {
|
} else {
|
||||||
GrabPointer grab = grabItr.value();
|
bool changed = itr->second->fromByteArray(_avatarGrabData.value(grabID));
|
||||||
bool changed = grab->fromByteArray(_avatarGrabData.value(grabID));
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
_changedAvatarGrabs.insert(grabID);
|
_changedAvatarGrabs.insert(grabID);
|
||||||
}
|
}
|
||||||
|
@ -352,40 +351,38 @@ bool Avatar::updateGrabs() {
|
||||||
_avatarGrabDataChanged = false;
|
_avatarGrabDataChanged = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMutableSetIterator<QUuid> delItr(_deletedAvatarGrabs);
|
// delete _avatarGrabs
|
||||||
while (delItr.hasNext()) {
|
VectorOfIDs undeleted;
|
||||||
QUuid grabID = delItr.next();
|
for (const auto& id : _deletedAvatarGrabs) {
|
||||||
GrabPointer grab = _avatarGrabs[grabID];
|
MapOfGrabs::iterator itr = _avatarGrabs.find(id);
|
||||||
if (!grab) {
|
if (itr == _avatarGrabs.end()) {
|
||||||
delItr.remove();
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool success;
|
bool success;
|
||||||
|
const GrabPointer& grab = itr->second;
|
||||||
SpatiallyNestablePointer target = SpatiallyNestable::findByID(grab->getTargetID(), success);
|
SpatiallyNestablePointer target = SpatiallyNestable::findByID(grab->getTargetID(), success);
|
||||||
|
|
||||||
// only clear this entry from the _deletedAvatarGrabs if we found the entity.
|
|
||||||
if (success && target) {
|
if (success && target) {
|
||||||
target->removeGrab(grab);
|
target->removeGrab(grab);
|
||||||
delItr.remove();
|
_avatarGrabs.erase(itr);
|
||||||
grabAddedOrRemoved = true;
|
grabAddedOrRemoved = true;
|
||||||
|
} else {
|
||||||
|
undeleted.push_back(id);
|
||||||
}
|
}
|
||||||
_avatarGrabs.remove(grabID);
|
|
||||||
_changedAvatarGrabs.remove(grabID);
|
|
||||||
}
|
}
|
||||||
|
_deletedAvatarGrabs = std::move(undeleted);
|
||||||
|
|
||||||
QMutableSetIterator<QUuid> changeItr(_changedAvatarGrabs);
|
// change _avatarGrabs and add Actions to target
|
||||||
while (changeItr.hasNext()) {
|
SetOfIDs unchanged;
|
||||||
QUuid grabID = changeItr.next();
|
for (const auto& id : _changedAvatarGrabs) {
|
||||||
GrabPointer& grab = _avatarGrabs[grabID];
|
MapOfGrabs::iterator itr = _avatarGrabs.find(id);
|
||||||
if (!grab) {
|
if (itr == _avatarGrabs.end()) {
|
||||||
changeItr.remove();
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool success;
|
bool success;
|
||||||
|
const GrabPointer& grab = itr->second;
|
||||||
SpatiallyNestablePointer target = SpatiallyNestable::findByID(grab->getTargetID(), success);
|
SpatiallyNestablePointer target = SpatiallyNestable::findByID(grab->getTargetID(), success);
|
||||||
|
|
||||||
if (success && target) {
|
if (success && target) {
|
||||||
target->addGrab(grab);
|
target->addGrab(grab);
|
||||||
if (isMyAvatar()) {
|
if (isMyAvatar()) {
|
||||||
|
@ -394,11 +391,12 @@ bool Avatar::updateGrabs() {
|
||||||
entity->upgradeScriptSimulationPriority(PERSONAL_SIMULATION_PRIORITY);
|
entity->upgradeScriptSimulationPriority(PERSONAL_SIMULATION_PRIORITY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// only clear this entry from the _changedAvatarGrabs if we found the entity.
|
|
||||||
changeItr.remove();
|
|
||||||
grabAddedOrRemoved = true;
|
grabAddedOrRemoved = true;
|
||||||
|
} else {
|
||||||
|
unchanged.insert(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_changedAvatarGrabs = std::move(unchanged);
|
||||||
});
|
});
|
||||||
return grabAddedOrRemoved;
|
return grabAddedOrRemoved;
|
||||||
}
|
}
|
||||||
|
@ -406,8 +404,8 @@ bool Avatar::updateGrabs() {
|
||||||
void Avatar::accumulateGrabPositions(std::map<QUuid, GrabLocationAccumulator>& grabAccumulators) {
|
void Avatar::accumulateGrabPositions(std::map<QUuid, GrabLocationAccumulator>& grabAccumulators) {
|
||||||
// relay avatar's joint position to grabbed target in a way that allows for averaging
|
// relay avatar's joint position to grabbed target in a way that allows for averaging
|
||||||
_avatarGrabsLock.withReadLock([&] {
|
_avatarGrabsLock.withReadLock([&] {
|
||||||
foreach (auto grabID, _avatarGrabs.keys()) {
|
for (const auto& entry : _avatarGrabs) {
|
||||||
const GrabPointer& grab = _avatarGrabs.value(grabID);
|
const GrabPointer& grab = entry.second;
|
||||||
|
|
||||||
if (!grab || !grab->getActionID().isNull()) {
|
if (!grab || !grab->getActionID().isNull()) {
|
||||||
continue; // the accumulated value isn't used, in this case.
|
continue; // the accumulated value isn't used, in this case.
|
||||||
|
@ -1922,3 +1920,12 @@ scriptable::ScriptableModelBase Avatar::getScriptableModel() {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Avatar::clearAvatarGrabData(const QUuid& id) {
|
||||||
|
AvatarData::clearAvatarGrabData(id);
|
||||||
|
_avatarGrabsLock.withWriteLock([&] {
|
||||||
|
if (_avatarGrabs.find(id) == _avatarGrabs.end()) {
|
||||||
|
_deletedAvatarGrabs.push_back(id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/quaternion.hpp>
|
#include <glm/gtc/quaternion.hpp>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <QtCore/QUuid>
|
#include <QtCore/QUuid>
|
||||||
|
|
||||||
|
@ -23,10 +26,12 @@
|
||||||
#include <graphics-scripting/Forward.h>
|
#include <graphics-scripting/Forward.h>
|
||||||
#include <GLMHelpers.h>
|
#include <GLMHelpers.h>
|
||||||
|
|
||||||
|
#include <Grab.h>
|
||||||
|
#include <ThreadSafeValueCache.h>
|
||||||
|
|
||||||
#include "Head.h"
|
#include "Head.h"
|
||||||
#include "SkeletonModel.h"
|
#include "SkeletonModel.h"
|
||||||
#include "Rig.h"
|
#include "Rig.h"
|
||||||
#include <ThreadSafeValueCache.h>
|
|
||||||
|
|
||||||
#include "MetaModelPayload.h"
|
#include "MetaModelPayload.h"
|
||||||
|
|
||||||
|
@ -625,8 +630,15 @@ protected:
|
||||||
|
|
||||||
static void metaBlendshapeOperator(render::ItemID renderItemID, int blendshapeNumber, const QVector<BlendshapeOffset>& blendshapeOffsets,
|
static void metaBlendshapeOperator(render::ItemID renderItemID, int blendshapeNumber, const QVector<BlendshapeOffset>& blendshapeOffsets,
|
||||||
const QVector<int>& blendedMeshSizes, const render::ItemIDs& subItemIDs);
|
const QVector<int>& blendedMeshSizes, const render::ItemIDs& subItemIDs);
|
||||||
|
void clearAvatarGrabData(const QUuid& grabID) override;
|
||||||
|
|
||||||
AvatarGrabMap _avatarGrabs;
|
using SetOfIDs = std::set<QUuid>;
|
||||||
|
using VectorOfIDs = std::vector<QUuid>;
|
||||||
|
using MapOfGrabs = std::map<QUuid, GrabPointer>;
|
||||||
|
|
||||||
|
MapOfGrabs _avatarGrabs;
|
||||||
|
SetOfIDs _changedAvatarGrabs; // updated grab IDs -- changes needed to entities or physics
|
||||||
|
VectorOfIDs _deletedAvatarGrabs; // deleted grab IDs -- changes needed to entities or physics
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_Avatar_h
|
#endif // hifi_Avatar_h
|
||||||
|
|
|
@ -2997,7 +2997,6 @@ void AvatarData::clearAvatarGrabData(const QUuid& grabID) {
|
||||||
_avatarGrabsLock.withWriteLock([&] {
|
_avatarGrabsLock.withWriteLock([&] {
|
||||||
if (_avatarGrabData.remove(grabID)) {
|
if (_avatarGrabData.remove(grabID)) {
|
||||||
_avatarGrabDataChanged = true;
|
_avatarGrabDataChanged = true;
|
||||||
_deletedAvatarGrabs.insert(grabID);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
#include "AvatarTraits.h"
|
#include "AvatarTraits.h"
|
||||||
#include "HeadData.h"
|
#include "HeadData.h"
|
||||||
#include "PathUtils.h"
|
#include "PathUtils.h"
|
||||||
#include "Grab.h"
|
|
||||||
|
|
||||||
#include <graphics/Material.h>
|
#include <graphics/Material.h>
|
||||||
|
|
||||||
|
@ -67,8 +66,6 @@ using PackedAvatarEntityMap = QMap<QUuid, QByteArray>; // similar to AvatarEntit
|
||||||
using AvatarEntityIDs = QSet<QUuid>;
|
using AvatarEntityIDs = QSet<QUuid>;
|
||||||
|
|
||||||
using AvatarGrabDataMap = QMap<QUuid, QByteArray>;
|
using AvatarGrabDataMap = QMap<QUuid, QByteArray>;
|
||||||
using AvatarGrabIDs = QSet<QUuid>;
|
|
||||||
using AvatarGrabMap = QMap<QUuid, GrabPointer>;
|
|
||||||
|
|
||||||
using AvatarDataSequenceNumber = uint16_t;
|
using AvatarDataSequenceNumber = uint16_t;
|
||||||
|
|
||||||
|
@ -1473,8 +1470,6 @@ protected:
|
||||||
mutable ReadWriteLockable _avatarGrabsLock;
|
mutable ReadWriteLockable _avatarGrabsLock;
|
||||||
AvatarGrabDataMap _avatarGrabData;
|
AvatarGrabDataMap _avatarGrabData;
|
||||||
bool _avatarGrabDataChanged { false }; // by network
|
bool _avatarGrabDataChanged { false }; // by network
|
||||||
AvatarGrabIDs _changedAvatarGrabs; // updated grab IDs -- changes needed to entities or physics
|
|
||||||
AvatarGrabIDs _deletedAvatarGrabs; // deleted grab IDs -- changes needed to entities or physics
|
|
||||||
|
|
||||||
// used to transform any sensor into world space, including the _hmdSensorMat, or hand controllers.
|
// used to transform any sensor into world space, including the _hmdSensorMat, or hand controllers.
|
||||||
ThreadSafeValueCache<glm::mat4> _sensorToWorldMatrixCache { glm::mat4() };
|
ThreadSafeValueCache<glm::mat4> _sensorToWorldMatrixCache { glm::mat4() };
|
||||||
|
@ -1537,7 +1532,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool updateAvatarGrabData(const QUuid& grabID, const QByteArray& grabData);
|
bool updateAvatarGrabData(const QUuid& grabID, const QByteArray& grabData);
|
||||||
void clearAvatarGrabData(const QUuid& grabID);
|
virtual void clearAvatarGrabData(const QUuid& grabID);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend void avatarStateFromFrame(const QByteArray& frameData, AvatarData* _avatar);
|
friend void avatarStateFromFrame(const QByteArray& frameData, AvatarData* _avatar);
|
||||||
|
|
Loading…
Reference in a new issue