mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-10 08:12:08 +02:00
add skeleton trait sending to Agent, queuing in AvatarMixer
This commit is contained in:
parent
486557e28a
commit
ac835650b7
9 changed files with 29 additions and 12 deletions
|
@ -21,6 +21,7 @@
|
|||
#include <QtCore/QTimer>
|
||||
#include <QUuid>
|
||||
|
||||
#include <ClientTraitsHandler.h>
|
||||
#include <EntityEditPacketSender.h>
|
||||
#include <EntityTree.h>
|
||||
#include <ScriptEngine.h>
|
||||
|
|
|
@ -54,7 +54,7 @@ AvatarMixer::AvatarMixer(ReceivedMessage& message) :
|
|||
packetReceiver.registerListener(PacketType::RadiusIgnoreRequest, this, "handleRadiusIgnoreRequestPacket");
|
||||
packetReceiver.registerListener(PacketType::RequestsDomainListData, this, "handleRequestsDomainListDataPacket");
|
||||
packetReceiver.registerListener(PacketType::AvatarIdentityRequest, this, "handleAvatarIdentityRequestPacket");
|
||||
packetReceiver.registerListener(PacketType::SetAvatarTraits, this, "handleSetAvatarTraitsMessage");
|
||||
packetReceiver.registerListener(PacketType::SetAvatarTraits, this, "queueIncomingPacket");
|
||||
|
||||
packetReceiver.registerListenerForTypes({
|
||||
PacketType::ReplicatedAvatarIdentity,
|
||||
|
@ -607,10 +607,6 @@ void AvatarMixer::handleAvatarIdentityPacket(QSharedPointer<ReceivedMessage> mes
|
|||
_handleAvatarIdentityPacketElapsedTime += (end - start);
|
||||
}
|
||||
|
||||
void AvatarMixer::handleSetAvatarTraitsMessage(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
|
||||
qDebug() << "Got a traits packet of" << message->getSize() << "bytes from" << senderNode;
|
||||
}
|
||||
|
||||
void AvatarMixer::handleAvatarIdentityRequestPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
|
||||
if (message->getSize() < NUM_BYTES_RFC4122_UUID) {
|
||||
qCDebug(avatars) << "Malformed AvatarIdentityRequest received from" << message->getSenderSockAddr().toString();
|
||||
|
|
|
@ -48,7 +48,6 @@ private slots:
|
|||
void handleAdjustAvatarSorting(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleAvatarQueryPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleAvatarIdentityPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleSetAvatarTraitsMessage(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleKillAvatarPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleNodeIgnoreRequestPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
|
||||
void handleRadiusIgnoreRequestPacket(QSharedPointer<ReceivedMessage> packet, SharedNodePointer sendingNode);
|
||||
|
@ -127,9 +126,7 @@ private:
|
|||
|
||||
RateCounter<> _loopRate; // this is the rate that the main thread tight loop runs
|
||||
|
||||
|
||||
AvatarMixerSlavePool _slavePool;
|
||||
|
||||
};
|
||||
|
||||
#endif // hifi_AvatarMixer_h
|
||||
|
|
|
@ -62,6 +62,9 @@ int AvatarMixerClientData::processPackets() {
|
|||
case PacketType::AvatarData:
|
||||
parseData(*packet);
|
||||
break;
|
||||
case PacketType::SetAvatarTraits:
|
||||
processSetTraitsMessage(*packet);
|
||||
break;
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
|
@ -87,6 +90,11 @@ int AvatarMixerClientData::parseData(ReceivedMessage& message) {
|
|||
// compute the offset to the data payload
|
||||
return _avatar->parseDataFromBuffer(message.readWithoutCopy(message.getBytesLeftToRead()));
|
||||
}
|
||||
|
||||
void AvatarMixerClientData::processSetTraitsMessage(ReceivedMessage& message) {
|
||||
qDebug() << "Pulling a traits message of" << message.getSize();
|
||||
}
|
||||
|
||||
uint64_t AvatarMixerClientData::getLastBroadcastTime(const QUuid& nodeUUID) const {
|
||||
// return the matching PacketSequenceNumber, or the default if we don't have it
|
||||
auto nodeMatch = _lastBroadcastTimes.find(nodeUUID);
|
||||
|
|
|
@ -120,6 +120,8 @@ public:
|
|||
void queuePacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer node);
|
||||
int processPackets(); // returns number of packets processed
|
||||
|
||||
void processSetTraitsMessage(ReceivedMessage& message);
|
||||
|
||||
private:
|
||||
struct PacketQueue : public std::queue<QSharedPointer<ReceivedMessage>> {
|
||||
QWeakPointer<Node> node;
|
||||
|
|
|
@ -61,7 +61,10 @@ AnimationDetails ScriptableAvatar::getAnimationDetails() {
|
|||
void ScriptableAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
|
||||
_bind.reset();
|
||||
_animSkeleton.reset();
|
||||
|
||||
AvatarData::setSkeletonModelURL(skeletonModelURL);
|
||||
|
||||
_clientTraitsHandler.markTraitChanged(AvatarTraits::SkeletonModelURL);
|
||||
}
|
||||
|
||||
static AnimPose composeAnimPose(const FBXJoint& fbxJoint, const glm::quat rotation, const glm::vec3 translation) {
|
||||
|
@ -137,4 +140,6 @@ void ScriptableAvatar::update(float deltatime) {
|
|||
_animation.clear();
|
||||
}
|
||||
}
|
||||
|
||||
_clientTraitsHandler.sendChangedTraitsToMixer();
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <AnimationCache.h>
|
||||
#include <AnimSkeleton.h>
|
||||
#include <AvatarData.h>
|
||||
#include <ClientTraitsHandler.h>
|
||||
#include <ScriptEngine.h>
|
||||
|
||||
/**jsdoc
|
||||
|
@ -123,7 +124,7 @@
|
|||
class ScriptableAvatar : public AvatarData, public Dependency {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
|
||||
/**jsdoc
|
||||
* @function Avatar.startAnimation
|
||||
* @param {string} url
|
||||
|
@ -164,6 +165,8 @@ private:
|
|||
QStringList _maskedJoints;
|
||||
AnimationPointer _bind; // a sleazy way to get the skeleton, given the various library/cmake dependencies
|
||||
std::shared_ptr<AnimSkeleton> _animSkeleton;
|
||||
|
||||
ClientTraitsHandler _clientTraitsHandler { this };
|
||||
};
|
||||
|
||||
#endif // hifi_ScriptableAvatar_h
|
||||
|
|
|
@ -1669,7 +1669,10 @@ void MyAvatar::clearJointsData() {
|
|||
void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
|
||||
_skeletonModelChangeCount++;
|
||||
int skeletonModelChangeCount = _skeletonModelChangeCount;
|
||||
|
||||
auto previousSkeletonModelURL = _skeletonModelURL;
|
||||
Avatar::setSkeletonModelURL(skeletonModelURL);
|
||||
|
||||
_skeletonModel->setTagMask(render::hifi::TAG_NONE);
|
||||
_skeletonModel->setGroupCulled(true);
|
||||
_skeletonModel->setVisibleInScene(true, qApp->getMain3DScene());
|
||||
|
@ -1700,7 +1703,11 @@ void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
|
|||
emit skeletonChanged();
|
||||
emit skeletonModelURLChanged();
|
||||
|
||||
_clientTraitsHandler.markTraitChanged(AvatarTraits::SkeletonModelURL);
|
||||
if (previousSkeletonModelURL != _skeletonModelURL) {
|
||||
_clientTraitsHandler.markTraitChanged(AvatarTraits::SkeletonModelURL);
|
||||
} else {
|
||||
qDebug() << "Not marking skeleton model URL trait changed since the new value matches the previous";
|
||||
}
|
||||
}
|
||||
|
||||
void MyAvatar::removeAvatarEntities(const std::function<bool(const QUuid& entityID)>& condition) {
|
||||
|
|
|
@ -22,8 +22,6 @@ namespace AvatarTraits {
|
|||
|
||||
using TraitVersion = uint32_t;
|
||||
const TraitVersion DEFAULT_TRAIT_VERSION = 0;
|
||||
|
||||
using TraitVersions = std::vector<TraitVersion>;
|
||||
}
|
||||
|
||||
#endif // hifi_AvatarTraits_h
|
||||
|
|
Loading…
Reference in a new issue