
i added PrefilterMaterialID[8] which is static so all controller bodies would not collide with them.
- Code: Select all
unsigned CustomPlayerController::ConvexAllBodyCastPrefilter(const NewtonBody* body, const NewtonCollision* collision, void* userData)
{
CastFilterData* filterData;
filterData = (CastFilterData*) userData;
for (int i =1; i < 8;i ++)
filterData->materialID[i] = PrefilterMaterialID[i];
for (int i =0; i < 8;i ++){
if (NewtonBodyGetMaterialGroupID(body) == filterData->materialID[i])
return 0;
}
for (int i =0; i < filterData->m_count;i ++){
if (filterData->m_filter[i] == body ) {
return 0;
}
}
return 1;
}
void CustomPlayerController::addPrefilterMaterialID(const NewtonBody* body,int index )
{
PrefilterMaterialID[index] = NewtonBodyGetMaterialGroupID(body);
}
In ogrenewt, i also added a similiar function for calling newton function.
- Code: Select all
void PlayerController::addPrefilterMaterialID(OgreNewt::Body * body,int index){
CustomPlayerController* joint = (CustomPlayerController*) m_joint;
joint->addPrefilterMaterialID(body->getNewtonBody(),index);
}