12 #ifndef hifi_EntityMotionState_h
13 #define hifi_EntityMotionState_h
15 #include <EntityItem.h>
16 #include <EntityTypes.h>
18 #include <workload/Region.h>
20 #include "ObjectMotionState.h"
27 class EntityMotionState :
public ObjectMotionState {
29 enum class OwnershipState {
36 EntityMotionState() =
delete;
37 EntityMotionState(btCollisionShape* shape, EntityItemPointer item);
38 virtual ~EntityMotionState();
40 void handleDeactivation();
41 virtual void handleEasyChanges(uint32_t& flags)
override;
44 virtual PhysicsMotionType computePhysicsMotionType()
const override;
46 virtual bool isMoving()
const override;
49 virtual void getWorldTransform(btTransform& worldTrans)
const override;
52 virtual void setWorldTransform(
const btTransform& worldTrans)
override;
54 bool shouldSendUpdate(uint32_t simulationStep);
58 virtual uint32_t getIncomingDirtyFlags()
const override;
59 virtual void clearIncomingDirtyFlags(uint32_t mask = DIRTY_PHYSICS_FLAGS)
override;
61 virtual float getObjectRestitution()
const override {
return _entity->getRestitution(); }
62 virtual float getObjectFriction()
const override {
return _entity->getFriction(); }
63 virtual float getObjectLinearDamping()
const override {
return _entity->getDamping(); }
64 virtual float getObjectAngularDamping()
const override {
return _entity->getAngularDamping(); }
66 virtual glm::vec3 getObjectPosition()
const override {
return _entity->getWorldPosition() - ObjectMotionState::getWorldOffset(); }
67 virtual glm::quat getObjectRotation()
const override {
return _entity->getWorldOrientation(); }
68 virtual glm::vec3 getObjectLinearVelocity()
const override {
return _entity->getWorldVelocity(); }
69 virtual glm::vec3 getObjectAngularVelocity()
const override {
return _entity->getWorldAngularVelocity(); }
70 virtual glm::vec3 getObjectGravity()
const override {
return _entity->getGravity(); }
71 virtual glm::vec3 getObjectLinearVelocityChange()
const override;
73 virtual const QUuid getObjectID()
const override {
return _entity->getID(); }
75 virtual uint8_t getSimulationPriority()
const override;
76 virtual QUuid getSimulatorID()
const override;
77 virtual void bump(uint8_t priority)
override;
81 const EntityItemPointer& getEntity()
const {
return _entity; }
83 void resetMeasuredBodyAcceleration();
84 void measureBodyAcceleration();
86 virtual QString getName()
const override;
87 ShapeType getShapeType()
const override {
return _entity->getShapeType(); }
89 virtual void computeCollisionGroupAndMask(int32_t& group, int32_t& mask)
const override;
91 bool shouldSendBid()
const;
93 bool isLocallyOwned()
const override;
94 bool isLocallyOwnedOrShouldBe()
const override;
96 friend class PhysicalEntitySimulation;
97 OwnershipState getOwnershipState()
const {
return _ownershipState; }
99 void setRegion(uint8_t region);
100 void saveKinematicState(btScalar timeStep)
override;
103 void setRigidBody(btRigidBody* body)
override;
105 uint8_t computeFinalBidPriority()
const;
106 void updateSendVelocities();
107 uint64_t getNextBidExpiry()
const {
return _nextBidExpiry; }
110 void clearOwnershipState();
111 void updateServerPhysicsVariables();
112 bool remoteSimulationOutOfSync(uint32_t simulationStep);
114 void slaveBidPriority();
116 void clearObjectVelocities()
const;
118 bool isInPhysicsSimulation()
const {
return _body !=
nullptr; }
119 bool shouldBeInPhysicsSimulation()
const;
120 void setMotionType(PhysicsMotionType motionType)
override;
124 EntityItemPointer _entity;
137 glm::vec3 _serverPosition;
138 glm::quat _serverRotation;
139 glm::vec3 _serverVelocity;
140 glm::vec3 _serverAngularVelocity;
141 glm::vec3 _serverGravity;
142 glm::vec3 _serverAcceleration;
143 QByteArray _serverActionData;
145 glm::vec3 _lastVelocity;
146 glm::vec3 _measuredAcceleration;
147 quint64 _nextBidExpiry { 0 };
149 float _measuredDeltaTime;
150 uint32_t _lastMeasureStep;
153 OwnershipState _ownershipState { OwnershipState::NotLocallyOwned };
154 uint8_t _loopsWithoutOwner;
155 mutable uint8_t _accelerationNearlyGravityCount;
156 uint8_t _numInactiveUpdates { 1 };
157 uint8_t _bumpedPriority { 0 };
158 uint8_t _region { workload::Region::INVALID };
160 bool isServerlessMode();
Utility for processing, packing, queueing and sending of outbound edit messages.
Definition: OctreeEditPacketSender.h:23