mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 06:23:35 +02:00
add a convenience method to AvatarHashMap to check for avatar removal
This commit is contained in:
parent
e303ce1a12
commit
69d3360675
8 changed files with 20 additions and 19 deletions
|
@ -56,7 +56,6 @@ Avatar::Avatar() :
|
||||||
_mouseRayOrigin(0.0f, 0.0f, 0.0f),
|
_mouseRayOrigin(0.0f, 0.0f, 0.0f),
|
||||||
_mouseRayDirection(0.0f, 0.0f, 0.0f),
|
_mouseRayDirection(0.0f, 0.0f, 0.0f),
|
||||||
_moving(false),
|
_moving(false),
|
||||||
_owningAvatarMixer(),
|
|
||||||
_collisionFlags(0),
|
_collisionFlags(0),
|
||||||
_initialized(false),
|
_initialized(false),
|
||||||
_shouldRenderBillboard(true)
|
_shouldRenderBillboard(true)
|
||||||
|
|
|
@ -99,9 +99,6 @@ public:
|
||||||
|
|
||||||
/// Returns the distance to use as a LOD parameter.
|
/// Returns the distance to use as a LOD parameter.
|
||||||
float getLODDistance() const;
|
float getLODDistance() const;
|
||||||
|
|
||||||
Node* getOwningAvatarMixer() { return _owningAvatarMixer.data(); }
|
|
||||||
void setOwningAvatarMixer(const QWeakPointer<Node>& owningAvatarMixer) { _owningAvatarMixer = owningAvatarMixer; }
|
|
||||||
|
|
||||||
bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance) const;
|
bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance) const;
|
||||||
|
|
||||||
|
@ -177,7 +174,6 @@ protected:
|
||||||
glm::vec3 _mouseRayDirection;
|
glm::vec3 _mouseRayDirection;
|
||||||
float _stringLength;
|
float _stringLength;
|
||||||
bool _moving; ///< set when position is changing
|
bool _moving; ///< set when position is changing
|
||||||
QWeakPointer<Node> _owningAvatarMixer;
|
|
||||||
|
|
||||||
uint32_t _collisionFlags;
|
uint32_t _collisionFlags;
|
||||||
|
|
||||||
|
|
|
@ -51,14 +51,16 @@ void AvatarManager::updateOtherAvatars(float deltaTime) {
|
||||||
// simulate avatars
|
// simulate avatars
|
||||||
AvatarHash::iterator avatarIterator = _avatarHash.begin();
|
AvatarHash::iterator avatarIterator = _avatarHash.begin();
|
||||||
while (avatarIterator != _avatarHash.end()) {
|
while (avatarIterator != _avatarHash.end()) {
|
||||||
Avatar* avatar = static_cast<Avatar*>(avatarIterator.value().data());
|
AvatarSharedPointer sharedAvatar = avatarIterator.value();
|
||||||
if (avatar == static_cast<Avatar*>(_myAvatar.data()) || !avatar->isInitialized()) {
|
Avatar* avatar = reinterpret_cast<Avatar*>(sharedAvatar.data());
|
||||||
|
|
||||||
|
if (sharedAvatar == _myAvatar || !avatar->isInitialized()) {
|
||||||
// DO NOT update _myAvatar! Its update has already been done earlier in the main loop.
|
// DO NOT update _myAvatar! Its update has already been done earlier in the main loop.
|
||||||
// DO NOT update uninitialized Avatars
|
// DO NOT update uninitialized Avatars
|
||||||
++avatarIterator;
|
++avatarIterator;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (avatar->getOwningAvatarMixer()) {
|
if (!shouldKillAvatar(sharedAvatar)) {
|
||||||
// this avatar's mixer is still around, go ahead and simulate it
|
// this avatar's mixer is still around, go ahead and simulate it
|
||||||
avatar->simulate(deltaTime);
|
avatar->simulate(deltaTime);
|
||||||
avatar->setMouseRay(mouseOrigin, mouseDirection);
|
avatar->setMouseRay(mouseOrigin, mouseDirection);
|
||||||
|
@ -127,11 +129,6 @@ void AvatarManager::renderAvatarFades(const glm::vec3& cameraPosition, Avatar::R
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::sharedAvatarAddedToHash(const AvatarSharedPointer& sharedAvatar,
|
|
||||||
const QWeakPointer<Node>& mixerWeakPointer) {
|
|
||||||
reinterpret_cast<Avatar*>(sharedAvatar.data())->setOwningAvatarMixer(mixerWeakPointer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AvatarManager::processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer<Node>& mixerWeakPointer) {
|
void AvatarManager::processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer<Node>& mixerWeakPointer) {
|
||||||
switch (packetTypeForPacket(datagram)) {
|
switch (packetTypeForPacket(datagram)) {
|
||||||
case PacketTypeBulkAvatarData:
|
case PacketTypeBulkAvatarData:
|
||||||
|
|
|
@ -41,8 +41,6 @@ public slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AvatarManager(const AvatarManager& other);
|
AvatarManager(const AvatarManager& other);
|
||||||
|
|
||||||
void sharedAvatarAddedToHash(const AvatarSharedPointer& sharedAvatar, const QWeakPointer<Node>& mixerWeakPointer);
|
|
||||||
|
|
||||||
void simulateAvatarFades(float deltaTime);
|
void simulateAvatarFades(float deltaTime);
|
||||||
void renderAvatarFades(const glm::vec3& cameraPosition, Avatar::RenderMode renderMode);
|
void renderAvatarFades(const glm::vec3& cameraPosition, Avatar::RenderMode renderMode);
|
||||||
|
|
|
@ -51,7 +51,8 @@ AvatarData::AvatarData() :
|
||||||
_displayNameTargetAlpha(0.0f),
|
_displayNameTargetAlpha(0.0f),
|
||||||
_displayNameAlpha(0.0f),
|
_displayNameAlpha(0.0f),
|
||||||
_billboard(),
|
_billboard(),
|
||||||
_errorLogExpiry(0)
|
_errorLogExpiry(0),
|
||||||
|
_owningAvatarMixer()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ typedef unsigned long long quint64;
|
||||||
|
|
||||||
#include <CollisionInfo.h>
|
#include <CollisionInfo.h>
|
||||||
#include <RegisteredMetaTypes.h>
|
#include <RegisteredMetaTypes.h>
|
||||||
|
#include <Node.h>
|
||||||
|
|
||||||
#include "HeadData.h"
|
#include "HeadData.h"
|
||||||
#include "HandData.h"
|
#include "HandData.h"
|
||||||
|
@ -220,6 +221,9 @@ public:
|
||||||
QString getSkeletonModelURLFromScript() const { return _skeletonModelURL.toString(); }
|
QString getSkeletonModelURLFromScript() const { return _skeletonModelURL.toString(); }
|
||||||
void setSkeletonModelURLFromScript(const QString& skeletonModelString) { setSkeletonModelURL(QUrl(skeletonModelString)); }
|
void setSkeletonModelURLFromScript(const QString& skeletonModelString) { setSkeletonModelURL(QUrl(skeletonModelString)); }
|
||||||
|
|
||||||
|
Node* getOwningAvatarMixer() { return _owningAvatarMixer.data(); }
|
||||||
|
void setOwningAvatarMixer(const QWeakPointer<Node>& owningAvatarMixer) { _owningAvatarMixer = owningAvatarMixer; }
|
||||||
|
|
||||||
virtual float getBoundingRadius() const { return 1.f; }
|
virtual float getBoundingRadius() const { return 1.f; }
|
||||||
|
|
||||||
static void setNetworkAccessManager(QNetworkAccessManager* sharedAccessManager) { networkAccessManager = sharedAccessManager; }
|
static void setNetworkAccessManager(QNetworkAccessManager* sharedAccessManager) { networkAccessManager = sharedAccessManager; }
|
||||||
|
@ -278,6 +282,8 @@ protected:
|
||||||
static QNetworkAccessManager* networkAccessManager;
|
static QNetworkAccessManager* networkAccessManager;
|
||||||
|
|
||||||
quint64 _errorLogExpiry; ///< time in future when to log an error
|
quint64 _errorLogExpiry; ///< time in future when to log an error
|
||||||
|
|
||||||
|
QWeakPointer<Node> _owningAvatarMixer;
|
||||||
|
|
||||||
/// Loads the joint indices, names from the FST file (if any)
|
/// Loads the joint indices, names from the FST file (if any)
|
||||||
virtual void updateJointMappings();
|
virtual void updateJointMappings();
|
||||||
|
|
|
@ -27,6 +27,10 @@ AvatarHash::iterator AvatarHashMap::erase(const AvatarHash::iterator& iterator)
|
||||||
return _avatarHash.erase(iterator);
|
return _avatarHash.erase(iterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AvatarHashMap::shouldKillAvatar(const AvatarSharedPointer& sharedAvatar) {
|
||||||
|
return (sharedAvatar->getOwningAvatarMixer() == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
AvatarSharedPointer AvatarHashMap::newSharedAvatar() {
|
AvatarSharedPointer AvatarHashMap::newSharedAvatar() {
|
||||||
AvatarData* avatarData = new AvatarData();
|
AvatarData* avatarData = new AvatarData();
|
||||||
return AvatarSharedPointer(avatarData);
|
return AvatarSharedPointer(avatarData);
|
||||||
|
@ -42,7 +46,7 @@ AvatarSharedPointer AvatarHashMap::matchingOrNewAvatar(const QUuid& sessionUUID,
|
||||||
qDebug() << "Adding avatar with sessionUUID " << sessionUUID << "to AvatarManager hash.";
|
qDebug() << "Adding avatar with sessionUUID " << sessionUUID << "to AvatarManager hash.";
|
||||||
_avatarHash.insert(sessionUUID, matchingAvatar);
|
_avatarHash.insert(sessionUUID, matchingAvatar);
|
||||||
|
|
||||||
sharedAvatarAddedToHash(matchingAvatar, mixerWeakPointer);
|
matchingAvatar->setOwningAvatarMixer(mixerWeakPointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return matchingAvatar;
|
return matchingAvatar;
|
||||||
|
|
|
@ -35,9 +35,9 @@ public:
|
||||||
protected:
|
protected:
|
||||||
virtual AvatarHash::iterator erase(const AvatarHash::iterator& iterator);
|
virtual AvatarHash::iterator erase(const AvatarHash::iterator& iterator);
|
||||||
|
|
||||||
|
bool shouldKillAvatar(const AvatarSharedPointer& sharedAvatar);
|
||||||
|
|
||||||
virtual AvatarSharedPointer newSharedAvatar();
|
virtual AvatarSharedPointer newSharedAvatar();
|
||||||
virtual void sharedAvatarAddedToHash(const AvatarSharedPointer& sharedAvatar,
|
|
||||||
const QWeakPointer<Node>& mixerWeakPointer) = 0;
|
|
||||||
AvatarSharedPointer matchingOrNewAvatar(const QUuid& nodeUUID, const QWeakPointer<Node>& mixerWeakPointer);
|
AvatarSharedPointer matchingOrNewAvatar(const QUuid& nodeUUID, const QWeakPointer<Node>& mixerWeakPointer);
|
||||||
|
|
||||||
void processAvatarDataPacket(const QByteArray& packet, const QWeakPointer<Node>& mixerWeakPointer);
|
void processAvatarDataPacket(const QByteArray& packet, const QWeakPointer<Node>& mixerWeakPointer);
|
||||||
|
|
Loading…
Reference in a new issue