12 #ifndef hifi_ClientTraitsHandler_h
13 #define hifi_ClientTraitsHandler_h
15 #include <QtCore/QSharedPointer>
17 #include <ReceivedMessage.h>
19 #include "AssociatedTraitValues.h"
24 class ClientTraitsHandler :
public QObject {
27 ClientTraitsHandler(AvatarData* owningAvatar);
29 int sendChangedTraitsToMixer();
31 bool hasChangedTraits()
const {
return _hasChangedTraits; }
33 void markTraitUpdated(AvatarTraits::TraitType updatedTrait);
34 void markInstancedTraitUpdated(AvatarTraits::TraitType traitType, QUuid updatedInstanceID);
35 void markInstancedTraitDeleted(AvatarTraits::TraitType traitType, QUuid deleteInstanceID);
37 void resetForNewMixer();
40 void processTraitOverride(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode);
43 using Mutex = std::recursive_mutex;
44 using Lock = std::lock_guard<Mutex>;
46 enum ClientTraitStatus {
52 AvatarData*
const _owningAvatar;
55 AvatarTraits::AssociatedTraitValues<ClientTraitStatus, Unchanged> _traitStatuses;
57 AvatarTraits::TraitVersion _currentTraitVersion { AvatarTraits::DEFAULT_TRAIT_VERSION };
58 AvatarTraits::TraitVersion _currentSkeletonVersion { AvatarTraits::NULL_TRAIT_VERSION };
60 bool _shouldPerformInitialSend {
false };
61 bool _hasChangedTraits {
false };