本文整理汇总了C++中vconfig::get_children方法的典型用法代码示例。如果您正苦于以下问题:C++ vconfig::get_children方法的具体用法?C++ vconfig::get_children怎么用?C++ vconfig::get_children使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vconfig
的用法示例。
在下文中一共展示了vconfig::get_children方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: wml_animation_internal
//.........这里部分代码省略.........
if(!filter.null()) {
const unit_filter ufilt(filter, resources::filter_con);
u = ufilt.first_match_on_map();
}
// We have found a unit that matches the filter
if (u && !resources::screen->fogged(u->get_location()))
{
attack_type *primary = nullptr;
attack_type *secondary = nullptr;
Uint32 text_color;
unit_animation::hit_type hits= unit_animation::hit_type::INVALID;
std::vector<attack_type> attacks = u->attacks();
std::vector<attack_type>::iterator itor;
std::unique_ptr<attack_type> dummy_primary;
std::unique_ptr<attack_type> dummy_secondary;
// death and victory animations are handled here because usually
// the code iterates through all the unit's attacks
// but in these two specific cases we need to create dummy attacks
// to fire correctly certain animations
// this is especially evident with the Wose's death animations
if (cfg["flag"] == "death" || cfg["flag"] == "victory") {
filter = cfg.child("primary_attack");
if(!filter.null()) {
dummy_primary.reset(new attack_type(filter.get_config()));
primary = dummy_primary.get();
}
filter = cfg.child("secondary_attack");
if(!filter.null()) {
dummy_secondary.reset(new attack_type(filter.get_config()));
secondary = dummy_secondary.get();
}
}
else {
filter = cfg.child("primary_attack");
if(!filter.null()) {
for(itor = attacks.begin(); itor != attacks.end(); ++itor){
if(itor->matches_filter(filter.get_parsed_config())) {
primary = &*itor;
break;
}
}
}
filter = cfg.child("secondary_attack");
if(!filter.null()) {
for(itor = attacks.begin(); itor != attacks.end(); ++itor){
if(itor->matches_filter(filter.get_parsed_config())) {
secondary = &*itor;
break;
}
}
}
}
if(cfg["hits"] == "yes" || cfg["hits"] == "hit") {
hits = unit_animation::hit_type::HIT;
}
if(cfg["hits"] == "no" || cfg["hits"] == "miss") {
hits = unit_animation::hit_type::MISS;
}
if( cfg["hits"] == "kill" ) {
hits = unit_animation::hit_type::KILL;
}
if(cfg["red"].empty() && cfg["green"].empty() && cfg["blue"].empty()) {
text_color = display::rgb(0xff,0xff,0xff);
} else {
text_color = display::rgb(cfg["red"], cfg["green"], cfg["blue"]);
}
resources::screen->scroll_to_tile(u->get_location(), game_display::ONSCREEN, true, false);
vconfig t_filter = cfg.child("facing");
map_location secondary_loc = map_location::null_location();
if(!t_filter.empty()) {
terrain_filter filter(t_filter, resources::filter_con);
std::set<map_location> locs;
filter.get_locations(locs);
if (!locs.empty() && u->get_location() != *locs.begin()) {
map_location::DIRECTION dir =u->get_location().get_relative_dir(*locs.begin());
u->set_facing(dir);
secondary_loc = u->get_location().get_direction(dir);
}
}
config::attribute_value text = u->gender() == unit_race::FEMALE ? cfg["female_text"] : cfg["male_text"];
if(text.blank()) {
text = cfg["text"];
}
animator.add_animation(&*u, cfg["flag"], u->get_location(),
secondary_loc, cfg["value"], cfg["with_bars"].to_bool(),
text.str(), text_color, hits, primary, secondary,
cfg["value_second"]);
}
const vconfig::child_list sub_anims = cfg.get_children("animate");
vconfig::child_list::const_iterator anim_itor;
for(anim_itor = sub_anims.begin(); anim_itor != sub_anims.end();++anim_itor) {
wml_animation_internal(animator, *anim_itor);
}
}
示例2: internal_matches_filter
//.........这里部分代码省略.........
if (!vcfg["role"].blank() && vcfg["role"].str() != u.get_role()) {
return false;
}
if (!vcfg["ai_special"].blank() && ((vcfg["ai_special"].str() == "guardian") != u.get_state(unit::STATE_GUARDIAN))) {
return false;
}
if (!vcfg["canrecruit"].blank() && vcfg["canrecruit"].to_bool() != u.can_recruit()) {
return false;
}
if (!vcfg["recall_cost"].blank() && vcfg["recall_cost"].to_int(-1) != u.recall_cost()) {
return false;
}
if (!vcfg["level"].blank() && vcfg["level"].to_int(-1) != u.level()) {
return false;
}
if (!vcfg["defense"].blank() && vcfg["defense"].to_int(-1) != u.defense_modifier(fc_.get_disp_context().map().get_terrain(loc))) {
return false;
}
if (!vcfg["movement_cost"].blank() && vcfg["movement_cost"].to_int(-1) != u.movement_cost(fc_.get_disp_context().map().get_terrain(loc))) {
return false;
}
// Now start with the new WML based comparison.
// If a key is in the unit and in the filter, they should match
// filter only => not for us
// unit only => not filtered
config unit_cfg; // No point in serializing the unit once for each [filter_wml]!
for (const vconfig& wmlcfg : vcfg.get_children("filter_wml")) {
config fwml = wmlcfg.get_parsed_config();
/* Check if the filter only cares about variables.
If so, no need to serialize the whole unit. */
config::all_children_itors ci = fwml.all_children_range();
if (fwml.all_children_count() == 1 &&
fwml.attribute_count() == 1 &&
ci.front().key == "variables") {
if (!u.variables().matches(ci.front().cfg))
return false;
} else {
if (unit_cfg.empty())
u.write(unit_cfg);
if (!unit_cfg.matches(fwml))
return false;
}
}
for (const vconfig& vision : vcfg.get_children("filter_vision")) {
std::set<int> viewers;
// Use standard side filter
side_filter ssf(vision, &fc_);
std::vector<int> sides = ssf.get_teams();
viewers.insert(sides.begin(), sides.end());
bool found = false;
for (const int viewer : viewers) {
bool fogged = fc_.get_disp_context().teams()[viewer - 1].fogged(loc);
bool hiding = u.invisible(loc, fc_.get_disp_context());
bool unit_hidden = fogged || hiding;
if (vision["visible"].to_bool(true) != unit_hidden) {
found = true;
示例3: resolve_wml
void part::resolve_wml(const vconfig &cfg)
{
if(cfg.null()) {
return;
}
// Converts shortcut syntax to members of [background_layer]
background_layer bl;
if(cfg.has_attribute("background")) {
bl.set_file(cfg["background"].str());
}
if(cfg.has_attribute("scale_background")) {
bl.set_scale_horizontally(cfg["scale_background"].to_bool(true));
bl.set_scale_vertically(cfg["scale_background"].to_bool(true));
} else {
if(cfg.has_attribute("scale_background_vertically")) {
bl.set_scale_vertically(cfg["scale_background_vertically"].to_bool(true));
}
if(cfg.has_attribute("scale_background_horizontally")) {
bl.set_scale_horizontally(cfg["scale_background_horizontally"].to_bool(true));
}
}
if(cfg.has_attribute("tile_background")) {
bl.set_tile_horizontally(cfg["tile_background"].to_bool(false));
bl.set_tile_vertically(cfg["tile_background"].to_bool(false));
} else {
if(cfg.has_attribute("tile_background_vertically")) {
bl.set_tile_vertically(cfg["tile_background_vertically"].to_bool(false));
}
if(cfg.has_attribute("tile_background_horizontally")) {
bl.set_tile_vertically(cfg["tile_background_horizontally"].to_bool(false));
}
}
if(cfg.has_attribute("keep_aspect_ratio")) {
bl.set_keep_aspect_ratio(cfg["keep_aspect_ratio"].to_bool(true));
}
background_layers_.push_back(bl);
if(cfg.has_attribute("show_title")) {
show_title_ = cfg["show_title"].to_bool();
}
if(cfg.has_attribute("story")) {
text_ = cfg["story"].str();
}
if(cfg.has_attribute("title")) {
text_title_ = cfg["title"].str();
if(!cfg.has_attribute("show_title")) {
show_title_ = true;
}
}
if(cfg.has_attribute("text_layout")) {
text_block_loc_ = string_tblock_loc(cfg["text_layout"]);
}
if(cfg.has_attribute("title_alignment")) {
title_alignment_ = string_title_align(cfg["title_alignment"]);
}
if(cfg.has_attribute("music")) {
music_ = cfg["music"].str();
}
if(cfg.has_attribute("sound")) {
sound_ = cfg["sound"].str();
}
// Execution flow/branching/[image]
for(vconfig::all_children_iterator i = cfg.ordered_begin(); i != cfg.ordered_end(); ++ i) {
// i->first and i->second are goddamn temporaries; do not make references
const std::string key = i->first;
const vconfig node = i->second;
// [background_layer]
if (key == "background_layer") {
background_layers_.push_back(node.get_parsed_config());
}
// [image]
else if(key == "image") {
floating_images_.push_back(node.get_parsed_config());
}
// [if]
else if(key == "if") {
// check if the [if] tag has a [then] child;
// if we try to execute a non-existing [then], we get a segfault
if (game_events::conditional_passed(node)) {
if (node.has_child("then")) {
resolve_wml(node.child("then"));
}
}
// condition not passed, check [elseif] and [else]
else {
// get all [elseif] children and set a flag
vconfig::child_list elseif_children = node.get_children("elseif");
bool elseif_flag = false;
// for each [elseif]: test if it has a [then] child
// if the condition matches, execute [then] and raise flag
for (vconfig::child_list::const_iterator elseif = elseif_children.begin(); elseif != elseif_children.end(); ++elseif) {
if (game_events::conditional_passed(*elseif)) {
if (elseif->has_child("then")) {
resolve_wml(elseif->child("then"));
}
//.........这里部分代码省略.........
示例4: resolve_wml
void controller::resolve_wml(const vconfig& cfg)
{
for(vconfig::all_children_iterator i = cfg.ordered_begin(); i != cfg.ordered_end(); ++i)
{
// i->first and i->second are goddamn temporaries; do not make references
const std::string key = i->first;
const vconfig node = i->second;
if(key == "part" && !node.empty()) {
part_pointer_type const story_part(new part(node));
// Use scenario name as part title if the WML doesn't supply a custom one.
if((*story_part).show_title() && (*story_part).title().empty()) {
(*story_part).set_title( scenario_name_ );
}
parts_.push_back(story_part);
}
// [if]
else if(key == "if") {
// check if the [if] tag has a [then] child;
// if we try to execute a non-existing [then], we get a segfault
if (game_events::conditional_passed(node)) {
if (node.has_child("then")) {
resolve_wml(node.child("then"));
}
}
// condition not passed, check [elseif] and [else]
else {
// get all [elseif] children and set a flag
vconfig::child_list elseif_children = node.get_children("elseif");
bool elseif_flag = false;
// for each [elseif]: test if it has a [then] child
// if the condition matches, execute [then] and raise flag
for (vconfig::child_list::const_iterator elseif = elseif_children.begin(); elseif != elseif_children.end(); ++elseif) {
if (game_events::conditional_passed(*elseif)) {
if (elseif->has_child("then")) {
resolve_wml(elseif->child("then"));
}
elseif_flag = true;
break;
}
}
// if we have an [else] tag and no [elseif] was successful (flag not raised), execute it
if (node.has_child("else") && !elseif_flag) {
resolve_wml(node.child("else"));
}
}
}
// [switch]
else if(key == "switch") {
const std::string var_name = node["variable"];
const std::string var_actual_value = resources::gamedata->get_variable_const(var_name);
bool case_not_found = true;
for(vconfig::all_children_iterator j = node.ordered_begin(); j != node.ordered_end(); ++j) {
if(j->first != "case") continue;
// Enter all matching cases.
const std::string var_expected_value = (j->second)["value"];
if(var_actual_value == var_expected_value) {
case_not_found = false;
resolve_wml(j->second);
}
}
if(case_not_found) {
for(vconfig::all_children_iterator j = node.ordered_begin(); j != node.ordered_end(); ++j) {
if(j->first != "else") continue;
// Enter all elses.
resolve_wml(j->second);
}
}
}
// [deprecated_message]
else if(key == "deprecated_message") {
// Won't appear until the scenario start event finishes.
game_events::handle_deprecated_message(node.get_parsed_config());
}
// [wml_message]
else if(key == "wml_message") {
// Pass to game events handler. As with [deprecated_message],
// it won't appear until the scenario start event is complete.
game_events::handle_wml_log_message(node.get_parsed_config());
}
}
}