1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-15 06:52:34 +02:00

Remove raw ptrs from CharacterObject

This commit is contained in:
Filip Gawin 2018-08-28 19:53:32 +02:00
parent 2670de509f
commit 071481f617
3 changed files with 17 additions and 18 deletions

View File

@ -64,18 +64,18 @@ void CharacterObject::createActor(const glm::vec2& size) {
tf.setIdentity();
tf.setOrigin(btVector3(position.x, position.y, position.z));
physObject = new btPairCachingGhostObject();
physObject = std::make_unique<btPairCachingGhostObject>();
physObject->setUserPointer(this);
physObject->setWorldTransform(tf);
physShape = new btCapsuleShapeZ(size.x, size.y);
physObject->setCollisionShape(physShape);
physShape = std::make_unique<btCapsuleShapeZ>(size.x, size.y);
physObject->setCollisionShape(physShape.get());
physObject->setCollisionFlags(btCollisionObject::CF_KINEMATIC_OBJECT);
#if BT_BULLET_VERSION < 285
physCharacter =
new btKinematicCharacterController(physObject, physShape, 0.30f, 2);
physCharacter = std::make_unique<btKinematicCharacterController>(
physObject.get(), physShape.get(), 0.30f, 2);
#else
physCharacter = new btKinematicCharacterController(
physObject, physShape, 0.30f, btVector3(0.f, 0.f, 1.f));
physCharacter = std::make_unique<btKinematicCharacterController>(
physObject.get(), physShape.get(), 0.30f, btVector3(0.f, 0.f, 1.f));
#endif
physCharacter->setFallSpeed(20.f);
physCharacter->setUseGhostSweepTest(true);
@ -89,21 +89,20 @@ void CharacterObject::createActor(const glm::vec2& size) {
physCharacter->setJumpSpeed(5.f);
engine->dynamicsWorld->addCollisionObject(
physObject, btBroadphaseProxy::KinematicFilter,
physObject.get(), btBroadphaseProxy::KinematicFilter,
btBroadphaseProxy::StaticFilter | btBroadphaseProxy::SensorTrigger);
engine->dynamicsWorld->addAction(physCharacter);
engine->dynamicsWorld->addAction(physCharacter.get());
}
}
void CharacterObject::destroyActor() {
if (physCharacter) {
engine->dynamicsWorld->removeCollisionObject(physObject);
engine->dynamicsWorld->removeAction(physCharacter);
engine->dynamicsWorld->removeCollisionObject(physObject.get());
engine->dynamicsWorld->removeAction(physCharacter.get());
delete physCharacter;
delete physObject;
delete physShape;
physCharacter = nullptr;
physObject = nullptr;
physShape = nullptr;
}
}

View File

@ -81,9 +81,9 @@ private:
public:
static const float DefaultJumpSpeed;
btKinematicCharacterController* physCharacter = nullptr;
btPairCachingGhostObject* physObject = nullptr;
btCapsuleShapeZ* physShape = nullptr;
std::unique_ptr<btKinematicCharacterController> physCharacter;
std::unique_ptr<btPairCachingGhostObject> physObject;
std::unique_ptr<btCapsuleShapeZ> physShape;
CharacterController* controller;

View File

@ -425,7 +425,7 @@ const ViewCamera& IngameState::getCamera(float alpha) {
auto target = getCameraTarget();
bool lookleft = held(GameInputState::LookLeft);
bool lookright = held(GameInputState::LookRight);
btCollisionObject* physTarget = player->getCharacter()->physObject;
btCollisionObject* physTarget = player->getCharacter()->physObject.get();
auto targetTransform = target->getTimeAdjustedTransform(alpha);