History

rename base action classes to dynamics, start on constraints

Seth Alves committed 9 years ago

Commit 74c0a701 parent b07ed1339 files · +1200 −872Browse files

Showing the changes to interface/src/InterfaceDynamicFactory.cpp (1 of 39 files). Show all

Unified · Split

interface/src/InterfaceDynamicFactory.cpp+85−0
@@ -0,0 +1,85 @@
1+//
2+// InterfaceDynamicFactory.cpp
3+// libraries/entities/src
4+//
5+// Created by Seth Alves on 2015-6-2
6+// Copyright 2015 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+
13+
14+#include <avatar/AvatarActionHold.h>
15+#include <ObjectActionOffset.h>
16+#include <ObjectActionSpring.h>
17+#include <ObjectActionTravelOriented.h>
18+#include <ObjectConstraintHinge.h>
19+#include <LogHandler.h>
20+
21+#include "InterfaceDynamicFactory.h"
22+
23+
24+EntityDynamicPointer interfaceDynamicFactory(EntityDynamicType type, const QUuid& id, EntityItemPointer ownerEntity) {
25+ switch (type) {
26+ case DYNAMIC_TYPE_NONE:
27+ return EntityDynamicPointer();
28+ case DYNAMIC_TYPE_OFFSET:
29+ return std::make_shared<ObjectActionOffset>(id, ownerEntity);
30+ case DYNAMIC_TYPE_SPRING:
31+ return std::make_shared<ObjectActionSpring>(id, ownerEntity);
32+ case DYNAMIC_TYPE_HOLD:
33+ return std::make_shared<AvatarActionHold>(id, ownerEntity);
34+ case DYNAMIC_TYPE_TRAVEL_ORIENTED:
35+ return std::make_shared<ObjectActionTravelOriented>(id, ownerEntity);
36+ case DYNAMIC_TYPE_HINGE:
37+ return std::make_shared<ObjectConstraintHinge>(id, ownerEntity);
38+ }
39+
40+ Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown entity dynamic type");
41+ return EntityDynamicPointer();
42+}
43+
44+
45+EntityDynamicPointer InterfaceDynamicFactory::factory(EntityDynamicType type,
46+ const QUuid& id,
47+ EntityItemPointer ownerEntity,
48+ QVariantMap arguments) {
49+ EntityDynamicPointer dynamic = interfaceDynamicFactory(type, id, ownerEntity);
50+ if (dynamic) {
51+ bool ok = dynamic->updateArguments(arguments);
52+ if (ok) {
53+ if (dynamic->lifetimeIsOver()) {
54+ return nullptr;
55+ }
56+ return dynamic;
57+ }
58+ }
59+ return nullptr;
60+}
61+
62+
63+EntityDynamicPointer InterfaceDynamicFactory::factoryBA(EntityItemPointer ownerEntity, QByteArray data) {
64+ QDataStream serializedArgumentStream(data);
65+ EntityDynamicType type;
66+ QUuid id;
67+
68+ serializedArgumentStream >> type;
69+ serializedArgumentStream >> id;
70+
71+ EntityDynamicPointer dynamic = interfaceDynamicFactory(type, id, ownerEntity);
72+
73+ if (dynamic) {
74+ dynamic->deserialize(data);
75+ if (dynamic->lifetimeIsOver()) {
76+ static QString repeatedMessage =
77+ LogHandler::getInstance().addRepeatedMessageRegex(".*factoryBA lifetimeIsOver during dynamic creation.*");
78+ qDebug() << "InterfaceDynamicFactory::factoryBA lifetimeIsOver during dynamic creation --"
79+ << dynamic->getExpires() << "<" << usecTimestampNow();
80+ return nullptr;
81+ }
82+ }
83+
84+ return dynamic;
85+}