/** * \brief Draws the entities on the map surface. */ void MapEntities::draw() { for (int layer = 0; layer < LAYER_NB; layer++) { // draw the animated tiles and the tiles that overlap them: // in other words, draw all regions containing animated tiles // (and maybe more, but we don't care because non-animated tiles // will be drawn later) for (unsigned int i = 0; i < tiles_in_animated_regions[layer].size(); i++) { tiles_in_animated_regions[layer][i]->draw_on_map(); } // draw the non-animated tiles (with transparent rectangles on the regions of animated tiles // since they are already drawn) non_animated_tiles_surfaces[layer]->draw_region( map.get_camera_position(), map.get_visible_surface()); // draw the first sprites list<MapEntity*>::iterator i; for (i = entities_drawn_first[layer].begin(); i != entities_drawn_first[layer].end(); i++) { MapEntity* entity = *i; if (entity->is_enabled()) { entity->draw_on_map(); } } // draw the sprites at the hero's level, in the order // defined by their y position (including the hero) for (i = entities_drawn_y_order[layer].begin(); i != entities_drawn_y_order[layer].end(); i++) { MapEntity* entity = *i; if (entity->is_enabled()) { entity->draw_on_map(); } } } }
/** * \brief Tests whether a rectangle overlaps an obstacle dynamic entity. * \param layer The layer. * \param collision_box The rectangle to check. * \param entity_to_check The entity to check (used to decide what is * considered as obstacle). * \return \c true if there is an obstacle entity at this point. */ bool Map::test_collision_with_entities( Layer layer, const Rectangle& collision_box, const MapEntity& entity_to_check) const { const std::list<MapEntity*>& obstacle_entities = entities->get_obstacle_entities(layer); const std::list<MapEntity*>::const_iterator end = obstacle_entities.end(); std::list<MapEntity*>::const_iterator it; for (it = obstacle_entities.begin(); it != end; ++it) { MapEntity* entity = *it; if (entity->overlaps(collision_box) && entity->is_obstacle_for(entity_to_check) && entity->is_enabled() && entity != &entity_to_check) return true; } return false; }