From e083b9c97b6310626678a83df8b884e3439932a2 Mon Sep 17 00:00:00 2001 From: tovjemam Date: Mon, 15 Jun 2026 18:35:56 +0200 Subject: [PATCH] Fix static object collision group/mask --- src/game/mapinstance.cpp | 14 +++++++++----- src/game/mapinstance.hpp | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/game/mapinstance.cpp b/src/game/mapinstance.cpp index 0c232b5..b6136ba 100644 --- a/src/game/mapinstance.cpp +++ b/src/game/mapinstance.cpp @@ -76,8 +76,7 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world, model_->GetParamFloat("destr_th", destr_th_); } - col_group_ = collision::OG_DEFAULT; - col_mask_ = collision::OG_ALL; + int col_mask = ~collision::OG_STATIC; // prefer simple cshape which allow destruction if (cshape) @@ -87,7 +86,8 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world, if (!model_->IsColShapeBulletTarget()) { - col_mask_ &= ~collision::OG_PROJECTILE; + col_mask &= ~collision::OG_PROJECTILE; + no_projectile_collision_ = true; } } else if (cmesh) @@ -104,7 +104,7 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world, collision::SetObjectInfo(body_.get(), collision::OT_MAP_OBJECT, oflags, this); // world_.GetBtWorld().addRigidBody(body_.get(), btBroadphaseProxy::StaticFilter, btBroadphaseProxy::AllFilter); - world_.GetBtWorld().addRigidBody(body_.get(), col_group_, col_mask_); + world_.GetBtWorld().addRigidBody(body_.get(), collision::OG_STATIC, col_mask); } void game::MapObjectCollision::Break() @@ -129,8 +129,12 @@ void game::MapObjectCollision::Break() body_->setWorldTransform(trans); collision::SetObjectInfo(body_.get(), collision::OT_UNDEFINED, 0, this); + + int col_mask = collision::OG_ALL; + if (no_projectile_collision_) + col_mask &= ~collision::OG_PROJECTILE; - world_.GetBtWorld().addRigidBody(body_.get(), col_group_, col_mask_); + world_.GetBtWorld().addRigidBody(body_.get(), collision::OG_DEFAULT, col_mask); } void game::MapObjectCollision::GetModelTransform(Transform& trans) const diff --git a/src/game/mapinstance.hpp b/src/game/mapinstance.hpp index 0b3ed4d..397d793 100644 --- a/src/game/mapinstance.hpp +++ b/src/game/mapinstance.hpp @@ -31,8 +31,8 @@ public: net::ObjNum GetNum() const { return num_; } float GetDestroyThreshold() const { return destr_th_; } - int col_group_ = 0, col_mask_ = 0; - + bool no_projectile_collision_ = false; + virtual ~MapObjectCollision() override; private: