예제 #1
0
 def _check_status(self, b_obj):
     gs = GridSpace(self.blackboard.grid)
     self.start_state = gs.get_state_coords(self.start_coords)
     self.target_state = gs.get_state_coords(self.target_coords)
     go = gs.can_go(self.start_state, self.target_state)
     if not go:
         log.msg('cannot go between %s %s' % (self.start_state, self.target_state))
         return Status.failure
     if not self.was_at_target:
         self.was_at_target = self.target_state.vertical_center_in(b_obj.position)
     if self.target_state.base_in(b_obj.aabb) and self.target_state.touch_platform(b_obj.position):
         return Status.success
     return Status.running
예제 #2
0
 def check_status(self, b_obj):
     if time() - self.start_time >= self.max_time:
         return Status.failure
     gs = GridSpace(self.world.grid)
     self.start_state = gs.get_state_coords(self.start_coords)
     self.target_state = gs.get_state_coords(self.target_coords)
     go = gs.can_go(self.start_state, self.target_state)
     if not go:
         log.msg('Cannot go between %s and %s' % (self.start_state,
                                                  self.target_state))
         return Status.failure
     if not self.was_at_target:
         self.was_at_target = self.target_state.vertical_center_in(
                                                             b_obj.position)
     if (self.target_state.base_in(b_obj.aabb)
       and self.target_state.touch_platform(b_obj.position)):
         return Status.success
     return Status.running
예제 #3
0
 def check_status(self, b_obj):
     bb_stand = self.target_space.bb_stand
     elev = bb_stand.min_y - b_obj.aabb.min_y
     gs = GridSpace(self.world.grid, bb=b_obj.aabb)
     if not self.target_space._can_stand_on():
         self.world.grid.navgrid.delete_node(self.target_space.coords)
         log.msg('CANNOT STAND ON %s' % self.target_space)
         return Status.failure
     if b_obj.horizontally_blocked and not gs.can_go_between(self.target_space, debug=True):
         log.msg('CANNOT GO BETWEEN %s AND %s' % (b_obj.aabb, self.target_space))
         return Status.failure
     if self.bot.is_on_ladder(b_obj) or self.bot.is_in_water(b_obj):
         if b_obj.position_grid == self.target_space.coords:
             return Status.success
     if b_obj.aabb.horizontal_distance(bb_stand) < self.bot.current_motion(b_obj):
         self.was_at_target = True
         if fops.eq(elev, 0):
             return Status.success
     if b_obj.horizontally_blocked and b_obj.on_ground:
         if not gs.can_go(self.target_space):
             log.msg("I am stuck, let's try again? vels %s" %
                     str(b_obj.velocities))
             return Status.failure
     return Status.running