Exemplo n.º 1
0
void tmp_side_wait::generate_menu(twindow& window)
{
	if (stop_updates_) {
		return;
	}

	std::stringstream strstr;

	users_.clear();
	sides_table_->clear();
	
	std::vector<std::set<int> > team_names = generate_team_names_from_side(level_);
	std::vector<int> allies = generate_allies_from_team_names(team_names);
	int side = 0;
	BOOST_FOREACH (const config &sd, level_.child_range("side")) {
		if (!sd["current_player"].empty()) {
			const std::string player_id = sd["current_player"].str();
			connected_user_list::const_iterator it = users_.begin();
			for (; it != users_.end(); ++ it) {
				if (it->name == player_id) {
					break;
				}
			}
			if (it == users_.end()) {
				users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0));
			}
		}
	}
	regenerate_hero_map_from_users(disp_, heros_, users_, member_users_);

	BOOST_FOREACH (const config &sd, level_.child_range("side")) {
		if (!sd["allow_player"].to_bool(true)) {
			side ++;
			continue;
		}

		// std::stringstream str;
		std::map<std::string, string_map> data;

		data["number"]["label"] = sd["side"].str();

		strstr.str("");
		if (!sd["current_player"].empty()) {
			strstr << sd["current_player"].str();
		} else {
			std::string controller = sd["controller"].str();
			if (controller == "network") {
				strstr << _("Network Player");
			} else if (controller == "ai") {
				strstr << _("Computer Player");
			} else if (controller == "null") {
				strstr << _("Empty");
			}
		}
		data["player"]["label"] = strstr.str();

		if (!sd["leader"].empty()) {
			hero& leader = heros_[sd["leader"].to_int()];
			data["faction"]["label"] = leader.name();
			data["portrait"]["label"] = leader.image();
			data["feature"]["label"] = hero::feature_str(leader.side_feature_);
		} else {
			data["faction"]["label"] = _("Random");
			data["portrait"]["label"] = "hero-64/random.png";
			data["feature"]["label"] = hero::feature_str(HEROS_NO_FEATURE);
		}

		strstr.str("");
		strstr << allies[side];
		data["ally"]["label"] = strstr.str();

		strstr.str("");
		strstr << sd["gold"].to_int() << "/" << sd["income"].to_int();
		data["income"]["label"] = strstr.str();

		sides_table_->add_row(data);

		tgrid* grid_ptr = sides_table_->get_row_grid(side);
		
		side ++;
	}

	update_playerlist();

	window.invalidate_layout();
}
Exemplo n.º 2
0
void tmp_side_wait::generate_menu(twindow& window)
{
	if (stop_updates_) {
		foreach (const config &sd, level_.child_range("side")) {
			hero& leader = heros_[sd["leader"].to_int()];
			int selected_feature = sd["selected_feature"].to_int();
			if (selected_feature >= COMBO_FEATURES_MIN_VALID) {
				leader.side_feature_ = hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID];

			} else if (selected_feature == COMBO_FEATURES_NONE) {
				leader.side_feature_ = HEROS_NO_FEATURE;
			}
		}
		return;
	}
/*
	if (sides_table_->get_item_count()) {
		return;
	}
*/
	std::vector<std::string> details;

	users_.clear();
	sides_table_->clear();
	int side = 0;
	foreach (const config &sd, level_.child_range("side")) {
		if (!sd["allow_player"].to_bool(true)) {
			side ++;
			continue;
		}

		if (!sd["current_player"].empty()) {
			const std::string player_id = sd["current_player"].str();
			connected_user_list::const_iterator it = users_.begin();
			for (; it != users_.end(); ++ it) {
				if (it->name == player_id) {
					break;
				}
			}
			if (it == users_.end()) {
				users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0));
			}
		}

		// std::stringstream str;
		std::map<std::string, string_map> data;

		data["number"]["label"] = sd["side"].str();

		data["player"]["label"] = sd["user_description"];

		if (!sd["leader"].empty()) {
			hero& leader = heros_[sd["leader"].to_int()];
			data["faction"]["label"] = leader.name();
			data["portrait"]["label"] = leader.image();
		} else {
			data["faction"]["label"] = _("Random");
			data["portrait"]["label"] = "hero-64/random.png";
		}

		std::string feature_str;
		int selected_feature = sd["selected_feature"].to_int();
		if (selected_feature == COMBO_FEATURES_RANDOM) {
			data["feature"]["label"] = _("Random");

		} else if (selected_feature >= COMBO_FEATURES_MIN_VALID) {
			data["feature"]["label"] = hero::feature_str(hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]);
		}

		data["income"]["label"] = sd["income"].str();

		data["color"]["label"] = get_color_string(side);
		// data["label"]["use_markup"] = "true";

		sides_table_->add_row(data);

		tgrid* grid_ptr = sides_table_->get_row_grid(side);
		tlabel* label = find_widget<tlabel>(grid_ptr, "color", false, true);
		label->set_use_markup(true);

		side ++;
	}

	update_playerlist();

	window.invalidate_layout();
}