void MenuCharacter::render() { if (!visible) return; SDL_Rect src; SDL_Rect dest; int offset_y = (VIEW_H - 416)/2; // background src.x = 0; src.y = 0; dest.x = 0; dest.y = offset_y; src.w = dest.w = 320; src.h = dest.h = 416; SDL_BlitSurface(background, &src, screen, &dest); // labels // TODO: translate() font->render("Character", 160, offset_y+8, JUSTIFY_CENTER, screen, FONT_WHITE); font->render("Name", 72, offset_y+34, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Level", 248, offset_y+34, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Physical", 40, offset_y+74, JUSTIFY_LEFT, screen, FONT_WHITE); font->render("Mental", 40, offset_y+138, JUSTIFY_LEFT, screen, FONT_WHITE); font->render("Offense", 40, offset_y+202, JUSTIFY_LEFT, screen, FONT_WHITE); font->render("Defense", 40, offset_y+266, JUSTIFY_LEFT, screen, FONT_WHITE); font->render("Total HP", 152, offset_y+106, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Regen", 248, offset_y+106, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Total MP", 152, offset_y+170, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Regen", 248, offset_y+170, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Accuracy vs. Def 1", 152, offset_y+234, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("vs. Def 5", 248, offset_y+234, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Avoidance vs. Off 1", 152, offset_y+298, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("vs. Off 5", 248, offset_y+298, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Main Weapon", 120, offset_y+338, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Ranged Weapon", 120, offset_y+354, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Crit Chance", 120, offset_y+370, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Absorb", 248, offset_y+338, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Fire Resist", 248, offset_y+354, JUSTIFY_RIGHT, screen, FONT_WHITE); font->render("Ice Resist", 248, offset_y+370, JUSTIFY_RIGHT, screen, FONT_WHITE); // character data stringstream ss; font->render(stats->name, 83, offset_y+34, JUSTIFY_LEFT, screen, FONT_WHITE); ss.str(""); ss << stats->level; font->render(ss.str(), 268, offset_y+34, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->physical; font->render(ss.str(), 24, offset_y+74, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->mental; font->render(ss.str(), 24, offset_y+138, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->offense; font->render(ss.str(), 24, offset_y+202, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->defense; font->render(ss.str(), 24, offset_y+266, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->maxhp; font->render(ss.str(), 172, offset_y+106, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->hp_per_minute; font->render(ss.str(), 268, offset_y+106, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->maxmp; font->render(ss.str(), 172, offset_y+170, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->mp_per_minute; font->render(ss.str(), 268, offset_y+170, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (stats->accuracy) << "%"; font->render(ss.str(), 172, offset_y+234, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (stats->accuracy - 20) << "%"; font->render(ss.str(), 268, offset_y+234, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (stats->avoidance) << "%"; font->render(ss.str(), 172, offset_y+298, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (stats->avoidance - 20) << "%"; font->render(ss.str(), 268, offset_y+298, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); if (stats->dmg_melee_max >= stats->dmg_ment_max) ss << stats->dmg_melee_min << "-" << stats->dmg_melee_max; else ss << stats->dmg_ment_min << "-" << stats->dmg_ment_max; font->render(ss.str(), 144, offset_y+338, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); if (stats->dmg_ranged_max > 0) ss << stats->dmg_ranged_min << "-" << stats->dmg_ranged_max; else ss << "-"; font->render(ss.str(), 144, offset_y+354, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << stats->crit << "%"; font->render(ss.str(), 144, offset_y+370, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); if (stats->absorb_min == stats->absorb_max) ss << stats->absorb_min; else ss << stats->absorb_min << "-" << stats->absorb_max; font->render(ss.str(), 272, offset_y+338, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (100 - stats->attunement_fire) << "%"; font->render(ss.str(), 272, offset_y+354, JUSTIFY_CENTER, screen, FONT_WHITE); ss.str(""); ss << (100 - stats->attunement_ice) << "%"; font->render(ss.str(), 272, offset_y+370, JUSTIFY_CENTER, screen, FONT_WHITE); // highlight proficiencies displayProficiencies(stats->physical, offset_y+64); displayProficiencies(stats->mental, offset_y+128); displayProficiencies(stats->offense, offset_y+192); displayProficiencies(stats->defense, offset_y+256); // if points are available, show the upgrade buttons int spent = stats->physical + stats->mental + stats->offense + stats->defense -4; // check to see if there are skill points available if (spent < stats->level-1) { src.x = 0; src.y = 0; src.w = dest.w = 32; src.h = dest.h = 16; dest.x = 16; // physical if (stats->physical < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+96 dest.y = offset_y + 96; SDL_BlitSurface(upgrade, &src, screen, &dest); } // mental if (stats->mental < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+160 dest.y = offset_y + 160; SDL_BlitSurface(upgrade, &src, screen, &dest); } // offense if (stats->offense < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+224 dest.y = offset_y + 224; SDL_BlitSurface(upgrade, &src, screen, &dest); } // defense if (stats->defense < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+288 dest.y = offset_y + 288; SDL_BlitSurface(upgrade, &src, screen, &dest); } } }
void MenuCharacter::render() { if (!visible) return; SDL_Rect src; SDL_Rect dest; int offset_y = (VIEW_H - 416)/2; // background src.x = 0; src.y = 0; dest.x = 0; dest.y = offset_y; src.w = dest.w = 320; src.h = dest.h = 416; SDL_BlitSurface(background, &src, screen, &dest); // close button closeButton->render(); // title labelCharacter->render(); // labels and values for (int i=0; i<CSTAT_COUNT; i++) { cstat[i].label->render(); cstat[i].value->render(); } // highlight proficiencies displayProficiencies(stats->get_physical(), offset_y+64); displayProficiencies(stats->get_mental(), offset_y+128); displayProficiencies(stats->get_offense(), offset_y+192); displayProficiencies(stats->get_defense(), offset_y+256); // if points are available, show the upgrade buttons // TODO: replace with WidgetButton int spent = stats->physical_character + stats->mental_character + stats->offense_character + stats->defense_character -4; int max_spendable_stat_points = 16; // check to see if there are skill points available if (spent < stats->level && spent < max_spendable_stat_points) { src.x = 0; src.y = 0; src.w = dest.w = 32; src.h = dest.h = 16; dest.x = 16; // physical if (stats->physical_character < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+96 dest.y = offset_y + 96; SDL_BlitSurface(upgrade, &src, screen, &dest); } // mental if (stats->mental_character < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+160 dest.y = offset_y + 160; SDL_BlitSurface(upgrade, &src, screen, &dest); } // offense if (stats->offense_character < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+224 dest.y = offset_y + 224; SDL_BlitSurface(upgrade, &src, screen, &dest); } // defense if (stats->defense_character < 5) { // && mouse.x >= 16 && mouse.y >= offset_y+288 dest.y = offset_y + 288; SDL_BlitSurface(upgrade, &src, screen, &dest); } } }