void MenuEnemy::render() { if (enemy == NULL) return; if (enemy->stats.corpse && enemy->stats.corpse_ticks == 0) return; Rect src, dest; src.w = bar_pos.w; src.h = bar_pos.h; dest.x = window_area.x+bar_pos.x; dest.y = window_area.y+bar_pos.y; dest.w = bar_pos.w; dest.h = bar_pos.h; int hp_bar_length = 0; if (enemy->stats.get(STAT_HP_MAX) == 0) hp_bar_length = 0; else if (bar_hp) hp_bar_length = (enemy->stats.hp * bar_hp->getGraphics()->getWidth()) / enemy->stats.get(STAT_HP_MAX); // draw hp bar background setBackgroundClip(src); setBackgroundDest(dest); Menu::render(); // draw hp bar fill if (bar_hp) { src.w = hp_bar_length; src.h = bar_pos.h; bar_hp->setClip(src); bar_hp->setDest(dest); render_device->render(bar_hp); } std::stringstream ss; ss.str(""); if (enemy->stats.hp > 0) ss << enemy->stats.hp << "/" << enemy->stats.get(STAT_HP_MAX); else ss << msg->get("Dead"); if (!text_pos.hidden) { if (custom_text_pos) { label_text.set(window_area.x+text_pos.x, window_area.y+text_pos.y, text_pos.justify, text_pos.valign, msg->get("%s level %d", enemy->stats.level, enemy->stats.name), color_normal, text_pos.font_style); } else { label_text.set(window_area.x+bar_pos.x+bar_pos.w/2, window_area.y+bar_pos.y, JUSTIFY_CENTER, VALIGN_BOTTOM, msg->get("%s level %d", enemy->stats.level, enemy->stats.name), color_normal); } label_text.render(); label_stats.set(window_area.x+bar_pos.x+bar_pos.w/2, window_area.y+bar_pos.y+bar_pos.h/2, JUSTIFY_CENTER, VALIGN_CENTER, ss.str(), color_normal); label_stats.render(); } }
void MenuBook::alignElements() { closeButton->pos.x += window_area.x; closeButton->pos.y += window_area.y; Rect clip; clip.x = clip.y = 0; clip.w = window_area.w; clip.h = window_area.h; setBackgroundClip(clip); setBackgroundDest(window_area); for (unsigned i=0; i<text.size(); i++) { text[i]->setDestX(size[i].x + window_area.x); text[i]->setDestY(size[i].y + window_area.y); } for (unsigned i=0; i<image.size(); i++) { image[i]->setDestX(int(image[i]->getDest().x) + window_area.x); image[i]->setDestY(int(image[i]->getDest().y) + window_area.y); } }
void MenuTalker::render() { if (!visible) return; Rect src; Rect dest; int offset_x = window_area.x; int offset_y = window_area.y; // dialog box src.x = 0; src.y = 0; dest.x = offset_x + dialog_pos.x; dest.y = offset_y + dialog_pos.y; src.w = dest.w = dialog_pos.w; src.h = dest.h = dialog_pos.h; setBackgroundClip(src); setBackgroundDest(dest); Menu::render(); if (static_cast<unsigned>(dialog_node) < npc->dialog.size() && event_cursor < npc->dialog[dialog_node].size()) { // show active portrait EVENT_COMPONENT_TYPE etype = npc->dialog[dialog_node][event_cursor].type; if (etype == EC_NPC_DIALOG_THEM) { Sprite *r = npc->portrait; if (r) { src.w = dest.w = portrait_he.w; src.h = dest.h = portrait_he.h; dest.x = offset_x + portrait_he.x; dest.y = offset_y + portrait_he.y; r->setClip(src); r->setDest(dest); render_device->render(r); } } else if (etype == EC_NPC_DIALOG_YOU) { if (portrait) { src.w = dest.w = portrait_you.w; src.h = dest.h = portrait_you.h; dest.x = offset_x + portrait_you.x; dest.y = offset_y + portrait_you.y; portrait->setClip(src); portrait->setDest(dest); render_device->render(portrait); } } } // name & dialog text label_name->render(); textbox->render(); // show advance button if there are more event components, or close button if not if (static_cast<unsigned>(dialog_node) < npc->dialog.size() && !npc->dialog[dialog_node].empty() && event_cursor < npc->dialog[dialog_node].size()-1) { if (npc->dialog[dialog_node][event_cursor+1].type != EC_NONE) { advanceButton->render(); } else { closeButton->render(); } } else { closeButton->render(); } }
void MenuPowers::render() { if (!visible) return; Rect src; Rect dest; // background dest = window_area; src.x = 0; src.y = 0; src.w = window_area.w; src.h = window_area.h; setBackgroundClip(src); setBackgroundDest(dest); Menu::render(); if (tab_control) { tab_control->render(); unsigned active_tab = tab_control->getActiveTab(); for (unsigned i=0; i<tabs.size(); i++) { if (active_tab == i) { // power tree Sprite *r = tree_surf[i]; if (r) { r->setClip(src); r->setDest(dest); render_device->render(r); } // power icons renderPowers(active_tab); } } } else if (!tree_surf.empty()) { Sprite *r = tree_surf[0]; if (r) { r->setClip(src); r->setDest(dest); render_device->render(r); } renderPowers(0); } else { renderPowers(0); } // close button closeButton->render(); // text overlay if (!title.hidden) label_powers.render(); // stats if (!unspent_points.hidden) { std::stringstream ss; ss.str(""); if (points_left !=0) { ss << msg->get("Unspent skill points:") << " " << points_left; } stat_up.set(ss.str()); stat_up.render(); } }
void MenuTalker::render() { if (!visible) return; Rect src; Rect dest; int offset_x = window_area.x; int offset_y = window_area.y; // dialog box src.x = 0; src.y = 0; dest.x = offset_x + dialog_pos.x; dest.y = offset_y + dialog_pos.y; src.w = dest.w = dialog_pos.w; src.h = dest.h = dialog_pos.h; setBackgroundClip(src); setBackgroundDest(dest); Menu::render(); if (static_cast<unsigned>(dialog_node) < npc->dialog.size() && event_cursor < npc->dialog[dialog_node].size()) { // show active portrait int etype = npc->dialog[dialog_node][event_cursor].type; if (etype == EventComponent::NPC_DIALOG_THEM) { if (npc->npc_portrait) { src.w = dest.w = portrait_he.w; src.h = dest.h = portrait_he.h; dest.x = offset_x + portrait_he.x; dest.y = offset_y + portrait_he.y; npc->npc_portrait->setClipFromRect(src); npc->npc_portrait->setDestFromRect(dest); render_device->render(npc->npc_portrait); } } else if (etype == EventComponent::NPC_DIALOG_YOU) { if (npc->hero_portrait) { src.w = dest.w = portrait_you.w; src.h = dest.h = portrait_you.h; dest.x = offset_x + portrait_you.x; dest.y = offset_y + portrait_you.y; npc->hero_portrait->setClipFromRect(src); npc->hero_portrait->setDestFromRect(dest); render_device->render(npc->hero_portrait); } else if (portrait) { src.w = dest.w = portrait_you.w; src.h = dest.h = portrait_you.h; dest.x = offset_x + portrait_you.x; dest.y = offset_y + portrait_you.y; portrait->setClipFromRect(src); portrait->setDestFromRect(dest); render_device->render(portrait); } } } else if (dialog_node == -1 && npc->npc_portrait) { src.w = dest.w = portrait_he.w; src.h = dest.h = portrait_he.h; dest.x = offset_x + portrait_he.x; dest.y = offset_y + portrait_he.y; npc->npc_portrait->setClipFromRect(src); npc->npc_portrait->setDestFromRect(dest); render_device->render(npc->npc_portrait); } // name & dialog text label_name->render(); textbox->render(); // show advance button if there are more event components, or close button if not if (advanceButton->enabled) advanceButton->render(); else if (closeButton->enabled) closeButton->render(); }
void MenuStatBar::render() { if (disappear()) return; Rect src; Rect dest; // position elements based on the window position Rect bar_dest = bar_pos; bar_dest.x = bar_pos.x+window_area.x; bar_dest.y = bar_pos.y+window_area.y; // draw bar background dest.x = bar_dest.x; dest.y = bar_dest.y; src.x = 0; src.y = 0; src.w = bar_pos.w; src.h = bar_pos.h; setBackgroundClip(src); setBackgroundDest(dest); Menu::render(); unsigned long stat_cur_clamped = std::min(stat_cur, stat_max); unsigned long normalized_cur = stat_cur_clamped - std::min(stat_cur_clamped, stat_min); unsigned long normalized_max = stat_max - std::min(stat_max, stat_min); // draw bar progress based on orientation if (orientation == HORIZONTAL) { unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_pos.w)) / normalized_max; src.x = 0; src.y = 0; src.w = static_cast<int>(bar_length); src.h = bar_pos.h; dest.x = bar_dest.x; dest.y = bar_dest.y; } else if (orientation == VERTICAL) { unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_pos.h)) / normalized_max; src.x = 0; src.y = bar_pos.h-static_cast<int>(bar_length); src.w = bar_pos.w; src.h = static_cast<int>(bar_length); dest.x = bar_dest.x; dest.y = bar_dest.y+src.y; } if (bar) { bar->setClipFromRect(src); bar->setDestFromRect(dest); render_device->render(bar); } // if mouseover, draw text if (!text_pos.hidden) { if (settings->statbar_labels || (inpt->usingMouse() && Utils::isWithinRect(bar_dest, inpt->mouse) && !menu->exit->visible)) { std::stringstream ss; if (!custom_string.empty()) ss << custom_string; else ss << stat_cur << "/" << stat_max; label->setText(ss.str()); label->setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL)); if (custom_text_pos) { label->setPos(bar_dest.x + text_pos.x, bar_dest.y + text_pos.y); label->setJustify(text_pos.justify); label->setVAlign(text_pos.valign); label->setFont(text_pos.font_style); } else { label->setPos(bar_dest.x + bar_pos.w/2, bar_dest.y + bar_pos.h/2); label->setJustify(FontEngine::JUSTIFY_CENTER); label->setVAlign(LabelInfo::VALIGN_CENTER); } label->render(); } } }