97 lines · 3.2 KB · C
RawDownload
////  DetailedMotionState.h//  interface/src/avatar/////  Created by Luis Cuenca 1/11/2019//  Copyright 2019 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #ifndef hifi_DetailedMotionState_h#define hifi_DetailedMotionState_h #include <QSet> #include <ObjectMotionState.h>#include <BulletUtil.h> #include "OtherAvatar.h" class DetailedMotionState : public ObjectMotionState {public:    DetailedMotionState(AvatarPointer avatar, const btCollisionShape* shape, int jointIndex);     void handleEasyChanges(uint32_t& flags) override;     PhysicsMotionType getMotionType() const override { return _motionType; }     uint32_t getIncomingDirtyFlags() const override;    void clearIncomingDirtyFlags(uint32_t mask = DIRTY_PHYSICS_FLAGS) override;     PhysicsMotionType computePhysicsMotionType() const override;     bool isMoving() const override;     // this relays incoming position/rotation to the RigidBody    void getWorldTransform(btTransform& worldTrans) const override;     // this relays outgoing position/rotation to the EntityItem    void setWorldTransform(const btTransform& worldTrans) override;      // These pure virtual methods must be implemented for each MotionState type    // and make it possible to implement more complicated methods in this base class.     // pure virtual overrides from ObjectMotionState    float getObjectRestitution() const override;    float getObjectFriction() const override;    float getObjectLinearDamping() const override;    float getObjectAngularDamping() const override;     glm::vec3 getObjectPosition() const override;    glm::quat getObjectRotation() const override;    glm::vec3 getObjectLinearVelocity() const override;    glm::vec3 getObjectAngularVelocity() const override;    glm::vec3 getObjectGravity() const override;     const QUuid getObjectID() const override;     QString getName() const override;    ShapeType getShapeType() const override { return SHAPE_TYPE_HULL; }    QUuid getSimulatorID() const override;     void addDirtyFlags(uint32_t flags) { _dirtyFlags |= flags; }     void computeCollisionGroupAndMask(int32_t& group, int32_t& mask) const override;     float getMass() const override;    void forceActive();    QUuid getAvatarID() const { return _avatar->getID(); }    int32_t getJointIndex() const { return _jointIndex; }    void setIsBound(bool isBound, const std::vector<int32_t>& boundJoints) { _isBound = isBound; _boundJoints = boundJoints; }    bool getIsBound(std::vector<int32_t>& boundJoints) const { boundJoints = _boundJoints; return _isBound; }     friend class AvatarManager;    friend class Avatar; protected:    void setRigidBody(btRigidBody* body) override;    void setShape(const btCollisionShape* shape) override;     // the dtor had been made protected to force the compiler to verify that it is only    // ever called by the Avatar class dtor.    ~DetailedMotionState();     AvatarPointer _avatar;    float _diameter { 0.0f };     uint32_t _dirtyFlags;    int32_t _jointIndex { -1 };    OtherAvatarPointer _otherAvatar { nullptr };    bool _isBound { false };    std::vector<int32_t> _boundJoints;}; #endif // hifi_DetailedMotionState_h