Overte C++ Documentation
ClientTraitsHandler.h
1 //
2 // ClientTraitsHandler.h
3 // libraries/avatars/src
4 //
5 // Created by Stephen Birarda on 7/30/18.
6 // Copyright 2018 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_ClientTraitsHandler_h
13 #define hifi_ClientTraitsHandler_h
14 
15 #include <QtCore/QSharedPointer>
16 
17 #include <ReceivedMessage.h>
18 
19 #include "AssociatedTraitValues.h"
20 #include "Node.h"
21 
22 class AvatarData;
23 
24 class ClientTraitsHandler : public QObject {
25  Q_OBJECT
26 public:
27  ClientTraitsHandler(AvatarData* owningAvatar);
28 
29  int sendChangedTraitsToMixer();
30 
31  bool hasChangedTraits() const { return _hasChangedTraits; }
32 
33  void markTraitUpdated(AvatarTraits::TraitType updatedTrait);
34  void markInstancedTraitUpdated(AvatarTraits::TraitType traitType, QUuid updatedInstanceID);
35  void markInstancedTraitDeleted(AvatarTraits::TraitType traitType, QUuid deleteInstanceID);
36 
37  void resetForNewMixer();
38 
39 public slots:
40  void processTraitOverride(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode);
41 
42 private:
43  using Mutex = std::recursive_mutex;
44  using Lock = std::lock_guard<Mutex>;
45 
46  enum ClientTraitStatus {
47  Unchanged,
48  Updated,
49  Deleted
50  };
51 
52  AvatarData* const _owningAvatar;
53 
54  Mutex _traitLock;
55  AvatarTraits::AssociatedTraitValues<ClientTraitStatus, Unchanged> _traitStatuses;
56 
57  AvatarTraits::TraitVersion _currentTraitVersion { AvatarTraits::DEFAULT_TRAIT_VERSION };
58  AvatarTraits::TraitVersion _currentSkeletonVersion { AvatarTraits::NULL_TRAIT_VERSION };
59 
60  bool _shouldPerformInitialSend { false };
61  bool _hasChangedTraits { false };
62 };
63 
64 #endif // hifi_ClientTraitsHandler_h