/** * \brief Notifies this state that the hero has just failed to change its * position because of obstacles. */ void Hero::PullingState::notify_obstacle_reached() { if (is_moving_grabbed_entity()) { // an obstacle is reached before the 16 pixels are completed pulled_entity->update(); stop_moving_pulled_entity(); } }
/** * \brief Notifies this state that the movement if finished. */ void Hero::PullingState::notify_movement_finished() { if (is_moving_grabbed_entity()) { // the 16 pixels of the path are completed pulled_entity->update(); stop_moving_pulled_entity(); } }
/** * @brief Notifies this state that the hero has just failed to change its * position because of obstacles. */ void Hero::PullingState::notify_obstacle_reached() { if (is_moving_grabbed_entity()) { // an obstacle is reached before the 16 pixels are completed //std::cout << "stop moving block: the hero has reached an obstacle\n"; stop_moving_pulled_entity(); } }
/** * @brief Notifies this state that the movement if finished. */ void Hero::PullingState::notify_movement_finished() { if (is_moving_grabbed_entity()) { // the 16 pixels of the path are completed //std::cout << "stop moving block: 16 pixels were completed\n"; stop_moving_pulled_entity(); } }
/** * \brief Stops this state. */ void Hero::PullingState::stop(const State* next_state) { State::stop(next_state); if (is_moving_grabbed_entity()) { get_hero().clear_movement(); pulled_entity->update(); stop_moving_pulled_entity(); } }
/** * \brief Notifies this state that the hero has just changed its * position. */ void Hero::PullingState::notify_position_changed() { if (is_moving_grabbed_entity()) { // if the entity has made more than 8 pixels and is aligned on the grid, // we stop the movement bool horizontal = get_sprites().get_animation_direction() % 2 == 0; bool has_reached_grid = pulling_movement->get_total_distance_covered() > 8 && ((horizontal && pulled_entity->is_aligned_to_grid_x()) || (!horizontal && pulled_entity->is_aligned_to_grid_y())); if (has_reached_grid) { stop_moving_pulled_entity(); } } }
/** * @brief Notifies this state that the hero has just changed its * position. */ void Hero::PullingState::notify_position_changed() { if (is_moving_grabbed_entity()) { // if the entity has made more than 8 pixels and is aligned on the grid, // we stop the movement PathMovement *movement = (PathMovement*) hero.get_movement(); bool horizontal = get_sprites().get_animation_direction() % 2 == 0; bool has_reached_grid = movement->get_total_distance_covered() >= 16 && ((horizontal && pulled_entity->is_aligned_to_grid_x()) || (!horizontal && pulled_entity->is_aligned_to_grid_y())); if (has_reached_grid) { //std::cout << "stop moving block: the entity has reached the grid\n"; stop_moving_pulled_entity(); } } }
/** * \brief Notifies the hero that the entity he is pulling cannot move any more because of a collision. */ void Hero::PullingState::notify_grabbed_entity_collision() { stop_moving_pulled_entity(); }