12 #ifndef hifi_EntityDynamicInterface_h
13 #define hifi_EntityDynamicInterface_h
17 #include <glm/glm.hpp>
20 #include <QVariantMap>
24 class EntitySimulation;
25 using EntityItemPointer = std::shared_ptr<EntityItem>;
26 using EntityItemWeakPointer = std::weak_ptr<EntityItem>;
27 class EntitySimulation;
28 using EntitySimulationPointer = std::shared_ptr<EntitySimulation>;
30 enum EntityDynamicType {
32 DYNAMIC_TYPE_NONE = 0,
33 DYNAMIC_TYPE_OFFSET = 1000,
34 DYNAMIC_TYPE_SPRING = 2000,
35 DYNAMIC_TYPE_TRACTOR = 2100,
36 DYNAMIC_TYPE_HOLD = 3000,
37 DYNAMIC_TYPE_TRAVEL_ORIENTED = 4000,
38 DYNAMIC_TYPE_HINGE = 5000,
39 DYNAMIC_TYPE_FAR_GRAB = 6000,
40 DYNAMIC_TYPE_SLIDER = 7000,
41 DYNAMIC_TYPE_BALL_SOCKET = 8000,
42 DYNAMIC_TYPE_CONE_TWIST = 9000
46 class EntityDynamicInterface {
48 EntityDynamicInterface(EntityDynamicType type,
const QUuid&
id) : _id(id), _type(type) { }
49 virtual ~EntityDynamicInterface() { }
50 const QUuid& getID()
const {
return _id; }
51 EntityDynamicType getType()
const {
return _type; }
53 virtual void removeFromOwner() { }
55 virtual void remapIDs(QHash<EntityItemID, EntityItemID>& map) = 0;
57 virtual bool isAction()
const {
return false; }
58 virtual bool isConstraint()
const {
return false; }
59 virtual bool isReadyForAdd()
const {
return true; }
61 bool isActive() {
return _active; }
62 void deactivate() { _active =
false; }
64 virtual void removeFromSimulation(EntitySimulationPointer simulation)
const = 0;
65 virtual EntityItemWeakPointer getOwnerEntity()
const = 0;
66 virtual void setOwnerEntity(
const EntityItemPointer ownerEntity) = 0;
67 virtual bool updateArguments(QVariantMap arguments) = 0;
68 virtual QVariantMap getArguments() = 0;
70 virtual QByteArray serialize()
const = 0;
71 virtual void deserialize(QByteArray serializedArguments) = 0;
73 static EntityDynamicType dynamicTypeFromString(QString dynamicTypeString);
74 static QString dynamicTypeToString(EntityDynamicType dynamicType);
76 virtual bool lifetimeIsOver() {
return false; }
77 virtual quint64 getExpires() {
return 0; }
79 virtual bool isMine() {
return _isMine; }
80 virtual void setIsMine(
bool value) { _isMine = value; }
82 virtual bool shouldSuppressLocationEdits() {
return false; }
84 virtual void prepareForPhysicsSimulation() { }
89 static glm::vec3 extractVec3Argument (QString objectName, QVariantMap arguments,
90 QString argumentName,
bool& ok,
bool required =
true);
91 static glm::quat extractQuatArgument (QString objectName, QVariantMap arguments,
92 QString argumentName,
bool& ok,
bool required =
true);
93 static float extractFloatArgument(QString objectName, QVariantMap arguments,
94 QString argumentName,
bool& ok,
bool required =
true);
95 static int extractIntegerArgument(QString objectName, QVariantMap arguments,
96 QString argumentName,
bool& ok,
bool required =
true);
97 static QString extractStringArgument(QString objectName, QVariantMap arguments,
98 QString argumentName,
bool& ok,
bool required =
true);
99 static bool extractBooleanArgument(QString objectName, QVariantMap arguments,
100 QString argumentName,
bool& ok,
bool required =
true);
104 EntityDynamicType _type;
105 bool _active {
false };
106 bool _isMine {
false };
110 typedef std::shared_ptr<EntityDynamicInterface> EntityDynamicPointer;
112 QDataStream& operator<<(QDataStream& stream,
const EntityDynamicType& entityDynamicType);
113 QDataStream& operator>>(QDataStream& stream, EntityDynamicType& entityDynamicType);
115 QString serializedDynamicsToDebugString(QByteArray data);
Definition: EntityItem.h:82
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28