-void Hud::drawSelectionBoxes(std::vector<aabb3f> &hilightboxes) {
- for (std::vector<aabb3f>::const_iterator
- i = hilightboxes.begin();
- i != hilightboxes.end(); i++) {
- driver->draw3DBox(*i, selectionbox_argb);
+void Hud::drawSelectionMesh()
+{
+ if (!m_use_selection_mesh) {
+ // Draw 3D selection boxes
+ video::SMaterial oldmaterial = driver->getMaterial2D();
+ driver->setMaterial(m_selection_material);
+ for (std::vector<aabb3f>::const_iterator
+ i = m_selection_boxes.begin();
+ i != m_selection_boxes.end(); ++i) {
+ aabb3f box = aabb3f(
+ i->MinEdge + m_selection_pos_with_offset,
+ i->MaxEdge + m_selection_pos_with_offset);
+
+ u32 r = (selectionbox_argb.getRed() *
+ m_selection_mesh_color.getRed() / 255);
+ u32 g = (selectionbox_argb.getGreen() *
+ m_selection_mesh_color.getGreen() / 255);
+ u32 b = (selectionbox_argb.getBlue() *
+ m_selection_mesh_color.getBlue() / 255);
+ driver->draw3DBox(box, video::SColor(255, r, g, b));
+ }
+ driver->setMaterial(oldmaterial);
+ } else if (m_selection_mesh) {
+ // Draw selection mesh
+ video::SMaterial oldmaterial = driver->getMaterial2D();
+ driver->setMaterial(m_selection_material);
+ setMeshColor(m_selection_mesh, m_selection_mesh_color);
+ scene::IMesh* mesh = cloneMesh(m_selection_mesh);
+ translateMesh(mesh, m_selection_pos_with_offset);
+ u32 mc = m_selection_mesh->getMeshBufferCount();
+ for (u32 i = 0; i < mc; i++) {
+ scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
+ driver->drawMeshBuffer(buf);
+ }
+ mesh->drop();
+ driver->setMaterial(oldmaterial);