Added constraint framework, and the nail contraint

This commit is contained in:
nicola.candussi
2008-10-20 10:43:18 +00:00
parent c986721fb6
commit b95810245f
22 changed files with 1164 additions and 25 deletions

View File

@@ -27,6 +27,7 @@ Written by: Nicola Candussi <nicola@fluidinteractive.com>
shared_ptr<solver_impl_t> solver_t::m_impl;
std::set<rigid_body_t::pointer> solver_t::m_rigid_bodies;
std::set<constraint_t::pointer> solver_t::m_constraints;
shared_ptr<solver_impl_t> solver_t::get_solver()
{
@@ -84,6 +85,12 @@ rigid_body_t::pointer solver_t::create_rigid_body(collision_shape_t::pointer& cs
return rigid_body_t::pointer(new rigid_body_t(m_impl->create_rigid_body(cs->impl()), cs));
}
nail_constraint_t::pointer solver_t::create_nail_constraint(rigid_body_t::pointer& rb, vec3f const& pivot)
{
return nail_constraint_t::pointer(new nail_constraint_t(m_impl->create_nail_constraint(rb->impl(), pivot), rb));
}
//add/remove from world
void solver_t::add_rigid_body(rigid_body_t::pointer& rb)
{
@@ -114,6 +121,35 @@ void solver_t::remove_all_rigid_bodies()
m_rigid_bodies.clear();
}
void solver_t::add_constraint(constraint_t::pointer& c)
{
if(c) {
if(m_constraints.find(c) == m_constraints.end()) {
m_constraints.insert(c);
m_impl->add_constraint(c->impl());
}
}
}
void solver_t::remove_constraint(constraint_t::pointer& c)
{
if(c) {
if(m_constraints.find(c) != m_constraints.end()) {
m_impl->remove_constraint(c->impl());
m_constraints.erase(c);
}
}
}
void solver_t::remove_all_constraints()
{
std::set<constraint_t::pointer>::iterator it;
for(it = m_constraints.begin(); it != m_constraints.end(); ++it) {
m_impl->remove_constraint(const_cast<constraint_t*>((*it).get())->impl());
}
m_constraints.clear();
}
void solver_t::set_gravity(vec3f const& g)
{
m_impl->set_gravity(g);