From 36e19b43c90dd636ec6f394814ab527657804ac8 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 6 Jan 2016 15:04:47 -0800 Subject: [PATCH] add some comments; specify const and overrides --- interface/src/avatar/AvatarManager.cpp | 2 + interface/src/avatar/AvatarMotionState.cpp | 2 +- interface/src/avatar/AvatarMotionState.h | 55 ++++++++++++--------- libraries/physics/src/EntityMotionState.cpp | 6 +-- libraries/physics/src/EntityMotionState.h | 38 +++++++------- libraries/physics/src/ObjectMotionState.h | 6 +-- 6 files changed, 61 insertions(+), 48 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 6993fb6ae1..833ed26cc9 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -215,6 +215,8 @@ void AvatarManager::removeAvatar(const QUuid& sessionUUID) { void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar) { AvatarHashMap::handleRemovedAvatar(removedAvatar); + // removedAvatar is a shared pointer to an AvatarData but we need to get to the derived Avatar + // class in this context so we can call methods that don't exist at the base class. Avatar* avatar = static_cast(removedAvatar.get()); avatar->die(); diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index f61533a5e3..9ce9594d45 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -143,7 +143,7 @@ QUuid AvatarMotionState::getSimulatorID() const { } // virtual -int16_t AvatarMotionState::computeCollisionGroup() { +int16_t AvatarMotionState::computeCollisionGroup() const { return COLLISION_GROUP_OTHER_AVATAR; } diff --git a/interface/src/avatar/AvatarMotionState.h b/interface/src/avatar/AvatarMotionState.h index 8f60c8e607..0465ddf50b 100644 --- a/interface/src/avatar/AvatarMotionState.h +++ b/interface/src/avatar/AvatarMotionState.h @@ -21,54 +21,65 @@ class Avatar; class AvatarMotionState : public ObjectMotionState { public: AvatarMotionState(Avatar* avatar, btCollisionShape* shape); - ~AvatarMotionState(); - virtual MotionType getMotionType() const { return _motionType; } + virtual MotionType getMotionType() const override { return _motionType; } - virtual uint32_t getIncomingDirtyFlags(); - virtual void clearIncomingDirtyFlags(); + virtual uint32_t getIncomingDirtyFlags() override; + virtual void clearIncomingDirtyFlags() override; - virtual MotionType computeObjectMotionType() const; + virtual MotionType computeObjectMotionType() const override; - virtual bool isMoving() const; + virtual bool isMoving() const override; // this relays incoming position/rotation to the RigidBody - virtual void getWorldTransform(btTransform& worldTrans) const; + virtual void getWorldTransform(btTransform& worldTrans) const override; // this relays outgoing position/rotation to the EntityItem - virtual void setWorldTransform(const btTransform& worldTrans); + virtual 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. - virtual float getObjectRestitution() const; - virtual float getObjectFriction() const; - virtual float getObjectLinearDamping() const; - virtual float getObjectAngularDamping() const; + // pure virtual overrides from ObjectMotionState + virtual float getObjectRestitution() const override; + virtual float getObjectFriction() const override; + virtual float getObjectLinearDamping() const override; + virtual float getObjectAngularDamping() const override; - virtual glm::vec3 getObjectPosition() const; - virtual glm::quat getObjectRotation() const; - virtual glm::vec3 getObjectLinearVelocity() const; - virtual glm::vec3 getObjectAngularVelocity() const; - virtual glm::vec3 getObjectGravity() const; + virtual glm::vec3 getObjectPosition() const override; + virtual glm::quat getObjectRotation() const override; + virtual glm::vec3 getObjectLinearVelocity() const override; + virtual glm::vec3 getObjectAngularVelocity() const override; + virtual glm::vec3 getObjectGravity() const override; - virtual const QUuid& getObjectID() const; + virtual const QUuid& getObjectID() const override; - virtual QUuid getSimulatorID() const; + virtual QUuid getSimulatorID() const override; void setBoundingBox(const glm::vec3& corner, const glm::vec3& diagonal); void addDirtyFlags(uint32_t flags) { _dirtyFlags |= flags; } - virtual int16_t computeCollisionGroup(); + virtual int16_t computeCollisionGroup() const override; friend class AvatarManager; + friend class Avatar; protected: - virtual bool isReadyToComputeShape() { return true; } + // the dtor had been made protected to force the compiler to verify that it is only + // ever called by the Avatar class dtor. + ~AvatarMotionState(); + + virtual bool isReadyToComputeShape() const override { return true; } virtual btCollisionShape* computeNewShape(); - Avatar* _avatar; // do NOT use smartpointer here + + // The AvatarMotionState keeps a RAW backpointer to its Avatar because all AvatarMotionState + // instances are "owned" by their corresponding Avatar instance and are deleted in the Avatar dtor. + // In other words, it is impossible for the Avatar to be deleted out from under its MotionState. + // In conclusion: weak pointer shennanigans would be pure overhead. + Avatar* _avatar; // do NOT use smartpointer here, no need for weakpointer + uint32_t _dirtyFlags; }; diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index b543d9d75b..c1338b772c 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -217,7 +217,7 @@ void EntityMotionState::setWorldTransform(const btTransform& worldTrans) { // virtual and protected -bool EntityMotionState::isReadyToComputeShape() { +bool EntityMotionState::isReadyToComputeShape() const { return _entity->isReadyToComputeShape(); } @@ -604,13 +604,13 @@ void EntityMotionState::setMotionType(MotionType motionType) { // virtual -QString EntityMotionState::getName() { +QString EntityMotionState::getName() const { assert(entityTreeIsLocked()); return _entity->getName(); } // virtual -int16_t EntityMotionState::computeCollisionGroup() { +int16_t EntityMotionState::computeCollisionGroup() const { if (_entity->getIgnoreForCollisions()) { return COLLISION_GROUP_COLLISIONLESS; } diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index da78513b58..53e7982ae1 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -38,10 +38,10 @@ public: virtual bool isMoving() const; // this relays incoming position/rotation to the RigidBody - virtual void getWorldTransform(btTransform& worldTrans) const; + virtual void getWorldTransform(btTransform& worldTrans) const override; // this relays outgoing position/rotation to the EntityItem - virtual void setWorldTransform(const btTransform& worldTrans); + virtual void setWorldTransform(const btTransform& worldTrans) override; bool isCandidateForOwnership(const QUuid& sessionID) const; bool remoteSimulationOutOfSync(uint32_t simulationStep); @@ -55,32 +55,32 @@ public: void resetAccelerationNearlyGravityCount() { _accelerationNearlyGravityCount = 0; } quint8 getAccelerationNearlyGravityCount() { return _accelerationNearlyGravityCount; } - virtual float getObjectRestitution() const { return _entity->getRestitution(); } - virtual float getObjectFriction() const { return _entity->getFriction(); } - virtual float getObjectLinearDamping() const { return _entity->getDamping(); } - virtual float getObjectAngularDamping() const { return _entity->getAngularDamping(); } + virtual float getObjectRestitution() const override { return _entity->getRestitution(); } + virtual float getObjectFriction() const override { return _entity->getFriction(); } + virtual float getObjectLinearDamping() const override { return _entity->getDamping(); } + virtual float getObjectAngularDamping() const override { return _entity->getAngularDamping(); } - virtual glm::vec3 getObjectPosition() const { return _entity->getPosition() - ObjectMotionState::getWorldOffset(); } - virtual glm::quat getObjectRotation() const { return _entity->getRotation(); } - virtual glm::vec3 getObjectLinearVelocity() const { return _entity->getVelocity(); } - virtual glm::vec3 getObjectAngularVelocity() const { return _entity->getAngularVelocity(); } - virtual glm::vec3 getObjectGravity() const { return _entity->getGravity(); } - virtual glm::vec3 getObjectLinearVelocityChange() const; + virtual glm::vec3 getObjectPosition() const override { return _entity->getPosition() - ObjectMotionState::getWorldOffset(); } + virtual glm::quat getObjectRotation() const override { return _entity->getRotation(); } + virtual glm::vec3 getObjectLinearVelocity() const override { return _entity->getVelocity(); } + virtual glm::vec3 getObjectAngularVelocity() const override { return _entity->getAngularVelocity(); } + virtual glm::vec3 getObjectGravity() const override { return _entity->getGravity(); } + virtual glm::vec3 getObjectLinearVelocityChange() const override; - virtual const QUuid& getObjectID() const { return _entity->getID(); } + virtual const QUuid& getObjectID() const override { return _entity->getID(); } - virtual quint8 getSimulationPriority() const; - virtual QUuid getSimulatorID() const; - virtual void bump(quint8 priority); + virtual quint8 getSimulationPriority() const override; + virtual QUuid getSimulatorID() const override; + virtual void bump(quint8 priority) override; EntityItemPointer getEntity() const { return _entityPtr.lock(); } void resetMeasuredBodyAcceleration(); void measureBodyAcceleration(); - virtual QString getName(); + virtual QString getName() const override; - virtual int16_t computeCollisionGroup(); + virtual int16_t computeCollisionGroup() const override; // eternal logic can suggest a simuator priority bid for the next outgoing update void setOutgoingPriority(quint8 priority); @@ -92,7 +92,7 @@ protected: bool entityTreeIsLocked() const; #endif - virtual bool isReadyToComputeShape(); + virtual bool isReadyToComputeShape() const override; virtual btCollisionShape* computeNewShape(); virtual void setMotionType(MotionType motionType); diff --git a/libraries/physics/src/ObjectMotionState.h b/libraries/physics/src/ObjectMotionState.h index 2e30269efc..e10d58e3ed 100644 --- a/libraries/physics/src/ObjectMotionState.h +++ b/libraries/physics/src/ObjectMotionState.h @@ -134,9 +134,9 @@ public: virtual QUuid getSimulatorID() const = 0; virtual void bump(quint8 priority) {} - virtual QString getName() { return ""; } + virtual QString getName() const { return ""; } - virtual int16_t computeCollisionGroup() = 0; + virtual int16_t computeCollisionGroup() const = 0; bool isActive() const { return _body ? _body->isActive() : false; } @@ -148,7 +148,7 @@ public: friend class PhysicsEngine; protected: - virtual bool isReadyToComputeShape() = 0; + virtual bool isReadyToComputeShape() const = 0; virtual btCollisionShape* computeNewShape() = 0; void setMotionType(MotionType motionType); void updateCCDConfiguration();