void GraphicsSystem::renderObjects(std::ostream* tree) { // The tuple is order, layer, depth, objid, GraphicsObject. Tuples are easy // to sort. typedef std::vector<std::tuple<int, int, int, int, GraphicsObject*> > ToRenderVec; ToRenderVec to_render; // Collate all objects that we might want to render. AllocatedLazyArrayIterator<GraphicsObject> it = graphics_object_impl_->foreground_objects.allocated_begin(); AllocatedLazyArrayIterator<GraphicsObject> end = graphics_object_impl_->foreground_objects.allocated_end(); for (; it != end; ++it) { const ObjectSettings& settings = getObjectSettings(it.pos()); if (settings.obj_on_off == 1 && showObject1() == false) continue; else if (settings.obj_on_off == 2 && showObject2() == false) continue; else if (settings.weather_on_off && showWeather() == false) continue; else if (settings.space_key && interfaceHidden()) continue; to_render.push_back(std::make_tuple( it->zOrder(), it->zLayer(), it->zDepth(), it.pos(), &*it)); } // Sort by all the ordering values. std::sort(to_render.begin(), to_render.end()); for (ToRenderVec::iterator it = to_render.begin(); it != to_render.end(); ++it) { get<4>(*it)->render(get<3>(*it), NULL, tree); } }
void GraphicsSystem::renderObjects(std::ostream* tree) { // Render all visible foreground objects AllocatedLazyArrayIterator<GraphicsObject> it = graphics_object_impl_->foreground_objects.allocated_begin(); AllocatedLazyArrayIterator<GraphicsObject> end = graphics_object_impl_->foreground_objects.allocated_end(); for (; it != end; ++it) { const ObjectSettings& settings = getObjectSettings(it.pos()); if (settings.obj_on_off == 1 && showObject1() == false) continue; else if (settings.obj_on_off == 2 && showObject2() == false) continue; else if (settings.weather_on_off && showWeather() == false) continue; else if (settings.space_key && interfaceHidden()) continue; it->render(it.pos(), tree); } }