Overte C++ Documentation
AnimationPropertyGroup.h
1 //
2 // AnimationPropertyGroup.h
3 // libraries/entities/src
4 //
5 // Created by Brad Hefta-Gaub on 2015/9/30.
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 
15 #ifndef hifi_AnimationPropertyGroup_h
16 #define hifi_AnimationPropertyGroup_h
17 
18 #include <stdint.h>
19 
20 #include <glm/glm.hpp>
21 
22 #include "EntityItemPropertiesMacros.h"
23 #include "PropertyGroup.h"
24 
26 class EncodeBitstreamParams;
27 class OctreePacketData;
28 class EntityTreeElementExtraEncodeData;
29 class ReadBitstreamToTreeParams;
30 class ScriptEngine;
31 class ScriptValue;
32 
33 class AnimationPropertyGroup : public PropertyGroup {
34 public:
35  static const float MAXIMUM_POSSIBLE_FRAME;
36 
37  // EntityItemProperty related helpers
38  virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, ScriptValue& properties,
39  ScriptEngine* engine, bool skipDefaults,
40  EntityItemProperties& defaultEntityProperties, bool returnNothingOnEmptyPropertyFlags,
41  bool isMyOwnAvatarEntity) const override;
42  virtual void copyFromScriptValue(const ScriptValue& object, const QSet<QString> &namesSet, bool& _defaultSettings) override;
43 
44  void merge(const AnimationPropertyGroup& other);
45 
46  virtual void debugDump() const override;
47  virtual void listChangedProperties(QList<QString>& out) override;
48 
49  virtual bool appendToEditPacket(OctreePacketData* packetData,
50  EntityPropertyFlags& requestedProperties,
51  EntityPropertyFlags& propertyFlags,
52  EntityPropertyFlags& propertiesDidntFit,
53  int& propertyCount,
54  OctreeElement::AppendState& appendState) const override;
55 
56  virtual bool decodeFromEditPacket(EntityPropertyFlags& propertyFlags,
57  const unsigned char*& dataAt, int& processedBytes) override;
58  virtual void markAllChanged() override;
59  virtual EntityPropertyFlags getChangedProperties() const override;
60 
61  // EntityItem related helpers
62  // methods for getting/setting all properties of an entity
63  virtual void getProperties(EntityItemProperties& propertiesOut) const override;
64 
66  virtual bool setProperties(const EntityItemProperties& properties) override;
67 
68  virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params) const override;
69 
70  virtual void appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params,
71  EntityTreeElementExtraEncodeDataPointer entityTreeElementExtraEncodeData,
72  EntityPropertyFlags& requestedProperties,
73  EntityPropertyFlags& propertyFlags,
74  EntityPropertyFlags& propertiesDidntFit,
75  int& propertyCount,
76  OctreeElement::AppendState& appendState) const override;
77 
78  virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
79  ReadBitstreamToTreeParams& args,
80  EntityPropertyFlags& propertyFlags, bool overwriteLocalData,
81  bool& somethingChanged) override;
82 
83  float getNumFrames() const;
84  float computeLoopedFrame(float frame) const;
85  bool isValidAndRunning() const;
86 
87  DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, "");
88  DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float, 30.0f);
89  DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float, 0.0f);
90  DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool, false); // was animationIsPlaying
91  DEFINE_PROPERTY(PROP_ANIMATION_LOOP, Loop, loop, bool, true); // was animationSettings.loop
92  DEFINE_PROPERTY(PROP_ANIMATION_FIRST_FRAME, FirstFrame, firstFrame, float, 0.0f); // was animationSettings.firstFrame
93  DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame
94  DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold
95  DEFINE_PROPERTY(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation, allowTranslation, bool, true);
96 
97 protected:
98  friend bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b);
99  friend bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b);
100  void setFromOldAnimationSettings(const QString& value);
101 };
102 
103 #endif // hifi_AnimationPropertyGroup_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