/* SectorInfoOverlay::draw * Draws the overlay at [bottom] from 0 to [right] *******************************************************************/ void SectorInfoOverlay::draw(int bottom, int right, float alpha) { // Don't bother if invisible if (alpha <= 0.0f) return; // Init GL stuff glLineWidth(1.0f); glDisable(GL_LINE_SMOOTH); // Determine overlay height double scale = (gl_font_size / 12.0); text_box->setLineHeight(16 * scale); if (last_size != right) { last_size = right; text_box->setSize(right - 88 - 92); } int height = text_box->getHeight() + 4; // Slide in/out animation float alpha_inv = 1.0f - alpha; bottom += height*alpha_inv*alpha_inv; // Get colours rgba_t col_bg = ColourConfiguration::getColour("map_overlay_background"); rgba_t col_fg = ColourConfiguration::getColour("map_overlay_foreground"); col_fg.a = col_fg.a*alpha; col_bg.a = col_bg.a*alpha; rgba_t col_border(0, 0, 0, 140); // Draw overlay background int tex_box_size = 80 * scale; glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Drawing::drawBorderedRect(0, bottom - height - 4, right - (tex_box_size * 2) - 30, bottom+2, col_bg, col_border); Drawing::drawBorderedRect(right - (tex_box_size * 2) - 28, bottom - height - 4, right, bottom+2, col_bg, col_border); // Draw info text lines text_box->draw(2, bottom - height, col_fg); // Ceiling texture drawTexture(alpha, right - tex_box_size - 8, bottom - 4, ctex, "C"); // Floor texture drawTexture(alpha, right - (tex_box_size * 2) - 20, bottom - 4, ftex, "F"); // Done glEnable(GL_LINE_SMOOTH); }
/* InfoOverlay3D::draw * Draws the overlay *******************************************************************/ void InfoOverlay3D::draw(int bottom, int right, int middle, float alpha) { // Don't bother if invisible if (alpha <= 0.0f) return; // Don't bother if no info if (info.size() == 0) return; // Update if needed if ((object->modifiedTime() > last_update) || // object updated (object->getObjType() == MOBJ_SIDE && ((MapSide*)object)->getParentLine()->modifiedTime() > last_update)) // parent line updated update(object->getIndex(), current_type, object->getParentMap()); // Init GL stuff glLineWidth(1.0f); glDisable(GL_LINE_SMOOTH); // Determine overlay height int nlines = MAX(info.size(), info2.size()); if (nlines < 4) nlines = 4; double scale = (gl_font_size / 12.0); int line_height = 16 * scale; int height = nlines * line_height + 4; // Get colours rgba_t col_bg = ColourConfiguration::getColour("map_3d_overlay_background"); rgba_t col_fg = ColourConfiguration::getColour("map_3d_overlay_foreground"); col_fg.a = col_fg.a*alpha; col_bg.a = col_bg.a*alpha; rgba_t col_border(0, 0, 0, 140); // Slide in/out animation float alpha_inv = 1.0f - alpha; int bottom2 = bottom; bottom += height*alpha_inv*alpha_inv; // Draw overlay background glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Drawing::drawBorderedRect(0, bottom - height - 4, right, bottom + 2, col_bg, col_border); // Draw info text lines (left) int y = height; for (unsigned a = 0; a < info.size(); a++) { Drawing::drawText(info[a], middle - (40 * scale) - 4, bottom - y, col_fg, Drawing::FONT_CONDENSED, Drawing::ALIGN_RIGHT); y -= line_height; } // Draw info text lines (right) y = height; for (unsigned a = 0; a < info2.size(); a++) { Drawing::drawText(info2[a], middle + (40 * scale) + 4, bottom - y, col_fg, Drawing::FONT_CONDENSED); y -= line_height; } // Draw texture if any drawTexture(alpha, middle - (40 * scale), bottom); // Done glEnable(GL_LINE_SMOOTH); }
/* LineInfoOverlay::draw * Draws the overlay at [bottom] from 0 to [right] *******************************************************************/ void LineInfoOverlay::draw(int bottom, int right, float alpha) { // Don't bother if invisible if (alpha <= 0.0f) return; // Init GL stuff glLineWidth(1.0f); glDisable(GL_LINE_SMOOTH); // Determine overlay height int sides_width = 2; if (side_front.exists) sides_width += 256; if (side_back.exists) sides_width += 256; if (last_size != right - sides_width) { last_size = right - sides_width; text_box->setSize(right - sides_width); } int height = text_box->getHeight() + 4; // Get colours rgba_t col_bg = ColourConfiguration::getColour("map_overlay_background"); rgba_t col_fg = ColourConfiguration::getColour("map_overlay_foreground"); col_fg.a = col_fg.a*alpha; col_bg.a = col_bg.a*alpha; rgba_t col_border(0, 0, 0, 140); // Slide in/out animation float alpha_inv = 1.0f - alpha; bottom += height*alpha_inv*alpha_inv; // Determine widths int n_side_panels = 0; if (side_front.exists) n_side_panels++; if (side_back.exists) n_side_panels++; // Draw overlay background scale = gl_font_size / 12.0; int tex_box_size = 80 * scale; int sinf_size = ((tex_box_size * 3) + 16); int main_panel_end = right - (n_side_panels * (sinf_size +2)); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glLineWidth(1.0f); Drawing::drawBorderedRect(0, bottom-height-4, main_panel_end, bottom+2, col_bg, col_border); // Draw info text lines text_box->setLineHeight(16 * scale); text_box->draw(2, bottom - height, col_fg); // Side info int x = right - sinf_size; if (side_front.exists) { // Background glDisable(GL_TEXTURE_2D); Drawing::drawBorderedRect(x, bottom-height-4, x + sinf_size, bottom+2, col_bg, col_border); drawSide(bottom-4, right, alpha, side_front, x); x -= (sinf_size + 2); } if (side_back.exists) { // Background glDisable(GL_TEXTURE_2D); Drawing::drawBorderedRect(x, bottom-height-4, x + sinf_size, bottom+2, col_bg, col_border); drawSide(bottom-4, right, alpha, side_back, x); } // Done glEnable(GL_LINE_SMOOTH); }