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
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
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