Overte C++ Documentation
AvatarTraits.h
1 //
2 // AvatarTraits.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_AvatarTraits_h
13 #define hifi_AvatarTraits_h
14 
15 #include <algorithm>
16 #include <cstdint>
17 #include <array>
18 #include <vector>
19 
20 #include <QtCore/QUuid>
21 
22 class ExtendedIODevice;
23 class AvatarData;
24 
25 namespace AvatarTraits {
26  enum TraitType : int8_t {
27  // Null trait
28  NullTrait = -1,
29 
30  // Simple traits
31  SkeletonModelURL = 0,
32  SkeletonData,
33  // Instanced traits
34  FirstInstancedTrait,
35  AvatarEntity = FirstInstancedTrait,
36  Grab,
37 
38  // Traits count
39  TotalTraitTypes
40  };
41 
42  const int NUM_SIMPLE_TRAITS = (int)FirstInstancedTrait;
43  const int NUM_INSTANCED_TRAITS = (int)TotalTraitTypes - (int)FirstInstancedTrait;
44  const int NUM_TRAITS = (int)TotalTraitTypes;
45 
46  using TraitInstanceID = QUuid;
47 
48  inline bool isSimpleTrait(TraitType traitType) {
49  return traitType > NullTrait && traitType < FirstInstancedTrait;
50  }
51 
52  using TraitVersion = int32_t;
53  const TraitVersion DEFAULT_TRAIT_VERSION = 0;
54  const TraitVersion NULL_TRAIT_VERSION = -1;
55 
56  using TraitWireSize = int16_t;
57  const TraitWireSize DELETED_TRAIT_SIZE = -1;
58  const TraitWireSize MAXIMUM_TRAIT_SIZE = INT16_MAX;
59 
60  using TraitMessageSequence = int64_t;
61  const TraitMessageSequence FIRST_TRAIT_SEQUENCE = 0;
62  const TraitMessageSequence MAX_TRAIT_SEQUENCE = INT64_MAX;
63 
64  qint64 packTrait(TraitType traitType, ExtendedIODevice& destination, const AvatarData& avatar);
65  qint64 packVersionedTrait(TraitType traitType, ExtendedIODevice& destination,
66  TraitVersion traitVersion, const AvatarData& avatar);
67 
68  qint64 packTraitInstance(TraitType traitType, TraitInstanceID traitInstanceID,
69  ExtendedIODevice& destination, AvatarData& avatar);
70  qint64 packVersionedTraitInstance(TraitType traitType, TraitInstanceID traitInstanceID,
71  ExtendedIODevice& destination, TraitVersion traitVersion,
72  AvatarData& avatar);
73 
74  qint64 packInstancedTraitDelete(TraitType traitType, TraitInstanceID instanceID, ExtendedIODevice& destination,
75  TraitVersion traitVersion = NULL_TRAIT_VERSION);
76 
77 };
78 
79 #endif // hifi_AvatarTraits_h