Overte C++ Documentation
PropertyGroup.h
1 //
2 // PropertyGroup.h
3 // libraries/entities/src
4 //
5 // Created by Brad Hefta-Gaub on 12/4/13.
6 // Copyright 2013 High Fidelity, Inc.
7 // Copyright 2023 Overte e.V.
8 //
9 // Distributed under the Apache License, Version 2.0.
10 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
11 // SPDX-License-Identifier: Apache-2.0
12 //
13 
14 #ifndef hifi_PropertyGroup_h
15 #define hifi_PropertyGroup_h
16 
17 #include <OctreeElement.h>
18 
19 #include "EntityPropertyFlags.h"
20 
21 
23 class EncodeBitstreamParams;
24 class OctreePacketData;
25 class EntityTreeElementExtraEncodeData;
26 class ReadBitstreamToTreeParams;
27 class ScriptEngine;
28 class ScriptValue;
29 using EntityTreeElementExtraEncodeDataPointer = std::shared_ptr<EntityTreeElementExtraEncodeData>;
30 
31 
32 class PropertyGroup {
33 public:
34  virtual ~PropertyGroup() = default;
35 
36  // EntityItemProperty related helpers
37  virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, ScriptValue& properties, ScriptEngine* engine, bool skipDefaults,
38  EntityItemProperties& defaultEntityProperties, bool returnNothingOnEmptyPropertyFlags, bool isMyOwnAvatarEntity) const = 0;
39  virtual void copyFromScriptValue(const ScriptValue& object, const QSet<QString> &namesSet, bool& _defaultSettings) = 0;
40  virtual void debugDump() const { }
41  virtual void listChangedProperties(QList<QString>& out) { }
42 
43  virtual bool appendToEditPacket(OctreePacketData* packetData,
44  EntityPropertyFlags& requestedProperties,
45  EntityPropertyFlags& propertyFlags,
46  EntityPropertyFlags& propertiesDidntFit,
47  int& propertyCount,
48  OctreeElement::AppendState& appendState) const = 0;
49 
50  virtual bool decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes) = 0;
51  virtual void markAllChanged() = 0;
52  virtual EntityPropertyFlags getChangedProperties() const = 0;
53 
54  // EntityItem related helpers
55  // methods for getting/setting all properties of an entity
56  virtual void getProperties(EntityItemProperties& propertiesOut) const = 0;
57 
59  virtual bool setProperties(const EntityItemProperties& properties) = 0;
60 
61  virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params) const = 0;
62 
63  virtual void appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params,
64  EntityTreeElementExtraEncodeDataPointer entityTreeElementExtraEncodeData,
65  EntityPropertyFlags& requestedProperties,
66  EntityPropertyFlags& propertyFlags,
67  EntityPropertyFlags& propertiesDidntFit,
68  int& propertyCount,
69  OctreeElement::AppendState& appendState) const = 0;
70 
71  virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
72  ReadBitstreamToTreeParams& args,
73  EntityPropertyFlags& propertyFlags, bool overwriteLocalData,
74  bool& somethingChanged) = 0;
75 };
76 
77 #endif // hifi_PropertyGroup_h
Definition: EntityItemProperties.h:106
Handles packing of the data portion of PacketType_OCTREE_DATA messages.
Definition: OctreePacketData.h:93
Provides an engine-independent interface for a scripting engine.
Definition: ScriptEngine.h:93
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40