blob: 42194670c78a90f00c1a8738aab485984d5ca077 [file] [log] [blame]
//#####################################################################
// Copyright 2004, Ron Fedkiw, Eran Guendelman.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
// Class RIGID_BODY_COLLISION_MANAGER
//#####################################################################
#ifndef __RIGID_BODY_COLLISION_MANAGER__
#define __RIGID_BODY_COLLISION_MANAGER__
namespace PhysBAM
{
class RIGID_BODY_COLLISION_MANAGER
{
public:
ARRAYS_2D<bool>* collision_matrix; // indexed by rigid body id; collision_matrix(i,j)==true means body i collides with (is affected by) body j
RIGID_BODY_COLLISION_MANAGER()
: collision_matrix (0)
{}
~RIGID_BODY_COLLISION_MANAGER()
{
delete collision_matrix;
}
void Use_Collision_Matrix()
{
if (!collision_matrix) collision_matrix = new ARRAYS_2D<bool>();
}
void Resize_Collision_Matrix (const int number_of_rigid_bodies)
{
assert (collision_matrix);
collision_matrix->Resize_Array (1, number_of_rigid_bodies, 1, number_of_rigid_bodies, true, true, true);
}
bool Either_Body_Collides_With_The_Other (const int rigid_body_id_1, const int rigid_body_id_2)
{
return Rigid_Body_Collides_With_Other_Rigid_Body (rigid_body_id_1, rigid_body_id_2) || Rigid_Body_Collides_With_Other_Rigid_Body (rigid_body_id_2, rigid_body_id_1);
}
bool Rigid_Body_Collides_With_Other_Rigid_Body (const int rigid_body_id_1, const int rigid_body_id_2) const
{
return !collision_matrix || !collision_matrix->Valid_Index (rigid_body_id_1, rigid_body_id_2) || (*collision_matrix) (rigid_body_id_1, rigid_body_id_2);
}
void Set_Rigid_Body_Collides_With_Other_Rigid_Body (const int rigid_body_id_1, const int rigid_body_id_2, const bool body_1_collides_with_body_2)
{
assert (collision_matrix);
Resize_Collision_Matrix (max (rigid_body_id_1, rigid_body_id_2, collision_matrix->m));
(*collision_matrix) (rigid_body_id_1, rigid_body_id_2) = body_1_collides_with_body_2;
}
//#####################################################################
};
}
#endif