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
24EntityDynamicPointer 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
45EntityDynamicPointer 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
63EntityDynamicPointer 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}