Fix static object collision group/mask
This commit is contained in:
parent
690627aa67
commit
e083b9c97b
@ -76,8 +76,7 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world,
|
|||||||
model_->GetParamFloat("destr_th", destr_th_);
|
model_->GetParamFloat("destr_th", destr_th_);
|
||||||
}
|
}
|
||||||
|
|
||||||
col_group_ = collision::OG_DEFAULT;
|
int col_mask = ~collision::OG_STATIC;
|
||||||
col_mask_ = collision::OG_ALL;
|
|
||||||
|
|
||||||
// prefer simple cshape which allow destruction
|
// prefer simple cshape which allow destruction
|
||||||
if (cshape)
|
if (cshape)
|
||||||
@ -87,7 +86,8 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world,
|
|||||||
|
|
||||||
if (!model_->IsColShapeBulletTarget())
|
if (!model_->IsColShapeBulletTarget())
|
||||||
{
|
{
|
||||||
col_mask_ &= ~collision::OG_PROJECTILE;
|
col_mask &= ~collision::OG_PROJECTILE;
|
||||||
|
no_projectile_collision_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cmesh)
|
else if (cmesh)
|
||||||
@ -104,7 +104,7 @@ game::MapObjectCollision::MapObjectCollision(collision::DynamicsWorld& world,
|
|||||||
collision::SetObjectInfo(body_.get(), collision::OT_MAP_OBJECT, oflags, this);
|
collision::SetObjectInfo(body_.get(), collision::OT_MAP_OBJECT, oflags, this);
|
||||||
|
|
||||||
// world_.GetBtWorld().addRigidBody(body_.get(), btBroadphaseProxy::StaticFilter, btBroadphaseProxy::AllFilter);
|
// 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()
|
void game::MapObjectCollision::Break()
|
||||||
@ -129,8 +129,12 @@ void game::MapObjectCollision::Break()
|
|||||||
body_->setWorldTransform(trans);
|
body_->setWorldTransform(trans);
|
||||||
|
|
||||||
collision::SetObjectInfo(body_.get(), collision::OT_UNDEFINED, 0, this);
|
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
|
void game::MapObjectCollision::GetModelTransform(Transform& trans) const
|
||||||
|
|||||||
@ -31,8 +31,8 @@ public:
|
|||||||
net::ObjNum GetNum() const { return num_; }
|
net::ObjNum GetNum() const { return num_; }
|
||||||
float GetDestroyThreshold() const { return destr_th_; }
|
float GetDestroyThreshold() const { return destr_th_; }
|
||||||
|
|
||||||
int col_group_ = 0, col_mask_ = 0;
|
bool no_projectile_collision_ = false;
|
||||||
|
|
||||||
virtual ~MapObjectCollision() override;
|
virtual ~MapObjectCollision() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user