1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
template < typename ITERATOR, typename MIN, typename MAX, typename MIN2, typename MAX2 >
std::pair< double, ITERATOR > find_min( ITERATOR iter, ITERATOR begin, ITERATOR end,
MIN min, MAX max, MIN2 min2, MAX2 max2 )
{
auto minimum = std::numeric_limits<float>::infinity();
decltype(minimum) min = minimum ;
ITERATOR min_it = end ;
for( ; begin != end ; ++begin )
{
if( iter == begin ) continue ;
auto body_comp = &(it_->second.body);
auto& bc = *body_comp ;
if( max2(bc) < min2(bc) || min2(bc) > max2(bc) ) continue ;
// ignoring the [Minor difference] (don't know what it is)
auto temporary = min(bc) - max(bc) ;
}
return { min, min_it } ;
}
// ...
{
for( auto it = Database.begin(); it != Database.end(); ++ it )
{
auto body = &(it->second.body);
auto delta = body->getVelocity() * dt;
using body_t = decltype(body) ;
if( delta.x < -0.f )
{
double min_for_x, min_for_y ;
decltype(it) min_it_for_x, min_it_for_y ;
std::tie( find_min( it, Database.begin(), Database.end(),
member(&body_t::min_x), member(&body_t::max_x),
member(&body_t::min_y), member(&body_t::max_y ) ),
min_for_x, min_it_for_x ) ;
// use min_for_x, min_it_for_x
std::tie( find_min( it, Database.begin(), Database.end(),
member(&body_t::min_y), member(&body_t::max_y),
member(&body_t::min_x), member(&body_t::max_x ) ),
min_for_y, min_it_for_y ) ;
// use min_for_y, min_it_for_y
}
// ...
}
// ...
}
|