Exemple #1
0
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);
		}

		
	}
}
Exemple #2
0
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);
		}

		
	}
}