+ if (controller->hold(Controller::DOWN)) {
+ do_duck();
+ } else {
+ do_standup();
+ }
+
+ /* grabbing */
+ if(controller->hold(Controller::ACTION) && !grabbed_object
+ && try_grab && !duck) {
+ Vector pos;
+ if(grab_dir == LEFT) {
+ pos = Vector(bbox.get_left() - 5, bbox.get_bottom() - 16);
+ } else {
+ pos = Vector(bbox.get_right() + 5, bbox.get_bottom() - 16);
+ }
+
+ for(Sector::Portables::iterator i = sector->portables.begin();
+ i != sector->portables.end(); ++i) {
+ Portable* portable = *i;
+ if(!portable->is_portable())
+ continue;
+
+ MovingObject* moving_object = dynamic_cast<MovingObject*> (portable);
+ assert(portable);
+ if(moving_object == NULL)
+ continue;
+
+ if(moving_object->get_bbox().contains(pos)) {
+ grabbed_object = portable;
+ grabbed_object->grab(*this, get_pos(), dir);
+ break;
+ }
+ }
+ }