本文整理汇总了C++中unit::is_visible_to_team方法的典型用法代码示例。如果您正苦于以下问题:C++ unit::is_visible_to_team方法的具体用法?C++ unit::is_visible_to_team怎么用?C++ unit::is_visible_to_team使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类unit
的用法示例。
在下文中一共展示了unit::is_visible_to_team方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/**
* Returns the sides that cannot currently see @a target.
* (Used to cache visibility before a move.)
*/
std::vector<int> get_sides_not_seeing(const unit & target)
{
const std::vector<team> & teams = resources::gameboard->teams();
std::vector<int> not_seeing;
std::size_t team_size = teams.size();
for ( std::size_t i = 0; i != team_size; ++i)
if ( !target.is_visible_to_team(teams[i], false) )
// not_see contains side numbers; i is a team index, so add 1.
not_seeing.push_back(i+1);
return not_seeing;
}
示例2: redraw_unit
void unit_drawer::redraw_unit (const unit & u) const
{
unit_animation_component & ac = u.anim_comp();
map_location loc = u.get_location();
int side = u.side();
bool hidden = u.get_hidden();
bool is_flying = u.is_flying();
map_location::DIRECTION facing = u.facing();
int hitpoints = u.hitpoints();
int max_hitpoints = u.max_hitpoints();
int movement_left = u.movement_left();
int total_movement = u.total_movement();
bool can_recruit = u.can_recruit();
bool can_advance = u.can_advance();
int experience = u.experience();
int max_experience = u.max_experience();
bool emit_zoc = u.emits_zoc();
SDL_Color hp_color=u.hp_color();
SDL_Color xp_color=u.xp_color();
std::string ellipse=u.image_ellipse();
if ( hidden || is_blindfolded || !u.is_visible_to_team(viewing_team_ref,map, show_everything) )
{
ac.clear_haloes();
if(ac.anim_) {
ac.anim_->update_last_draw_time();
}
return;
}
if (!ac.anim_) {
ac.set_standing();
if (!ac.anim_) return;
}
if (ac.refreshing_) return;
ac.refreshing_ = true;
ac.anim_->update_last_draw_time();
frame_parameters params;
const t_translation::t_terrain terrain = map.get_terrain(loc);
const terrain_type& terrain_info = map.get_terrain_info(terrain);
// do not set to 0 so we can distinguish the flying from the "not on submerge terrain"
// instead use -1.0 (as in "negative depth", it will be ignored by rendering)
params.submerge= is_flying ? -1.0 : terrain_info.unit_submerge();
if (u.invisible(loc) &&
params.highlight_ratio > 0.5) {
params.highlight_ratio = 0.5;
}
if (loc == sel_hex && params.highlight_ratio == 1.0) {
params.highlight_ratio = 1.5;
}
int height_adjust = static_cast<int>(terrain_info.unit_height_adjust() * zoom_factor);
if (is_flying && height_adjust < 0) {
height_adjust = 0;
}
params.y -= height_adjust;
params.halo_y -= height_adjust;
int red = 0,green = 0,blue = 0,tints = 0;
double blend_ratio = 0;
// Add future colored states here
if(u.poisoned()) {
green += 255;
blend_ratio += 0.25;
tints += 1;
}
if(u.slowed()) {
red += 191;
green += 191;
blue += 255;
blend_ratio += 0.25;
tints += 1;
}
if(tints > 0) {
params.blend_with = disp.rgb((red/tints),(green/tints),(blue/tints));
params.blend_ratio = ((blend_ratio/tints));
}
//hackish : see unit_frame::merge_parameters
// we use image_mod on the primary image
// and halo_mod on secondary images and all haloes
params.image_mod = u.image_mods();
params.halo_mod = u.TC_image_mods();
params.image= u.default_anim_image();
if(u.incapacitated()) params.image_mod +="~GS()";
params.primary_frame = t_true;
//.........这里部分代码省略.........
示例3: actor_sighted
/**
* Fires sighted events for the sides that can see @a target.
* If @a cache is supplied, only those sides might get events.
* If @a cache is nullptr, all sides might get events.
* This function is for the sighting *of* units that clear the shroud; it is
* the complement of shroud_clearer::fire_events(), which handles sighting *by*
* units that clear the shroud.
*
* See get_sides_not_seeing() for a way to obtain a cache.
*
* @returns true if an event has mutated the game state.
*/
game_events::pump_result_t actor_sighted(const unit & target, const std::vector<int> * cache)
/* Current logic:
* 1) One event is fired per side that can see the target.
* 2) The second unit for the event is one that can see the target, if possible.
* 3) If no units on a side can see the target, a second unit is chosen as
* close as possible (but this behavior should not be relied on; it is
* subject to change at any time, should it become inconvenient).
* 4) A side with no units at all will not get a sighted event.
* 5) Sides that do not use fog or shroud CAN get sighted events.
*/
{
const std::vector<team> & teams = resources::gameboard->teams();
const std::size_t teams_size = teams.size();
const map_location & target_loc = target.get_location();
// Determine the teams that (probably) should get events.
boost::dynamic_bitset<> needs_event;
needs_event.resize(teams_size, cache == nullptr);
if ( cache != nullptr ) {
// Flag just the sides in the cache as needing events.
for (int side : *cache)
needs_event[side-1] = true;
}
// Exclude the target's own team.
needs_event[target.side()-1] = false;
// Exclude those teams that cannot see the target.
for ( std::size_t i = 0; i != teams_size; ++i )
needs_event[i] = needs_event[i] && target.is_visible_to_team(teams[i], false);
// Cache "jamming".
std::vector< std::map<map_location, int>> jamming_cache(teams_size);
for ( std::size_t i = 0; i != teams_size; ++i )
if ( needs_event[i] )
create_jamming_map(jamming_cache[i], teams[i]);
// Look for units that can be used as the second unit in sighted events.
std::vector<const unit *> second_units(teams_size, nullptr);
std::vector<std::size_t> distances(teams_size, UINT_MAX);
for (const unit & viewer : resources::gameboard->units()) {
const std::size_t index = viewer.side() - 1;
// Does viewer belong to a team for which we still need a unit?
if ( needs_event[index] && distances[index] != 0 ) {
if ( can_see(viewer, target_loc, &jamming_cache[index]) ) {
// Definitely use viewer as the second unit.
second_units[index] = &viewer;
distances[index] = 0;
}
else {
// Consider viewer as a backup if it is close.
std::size_t viewer_distance =
distance_between(target_loc, viewer.get_location());
if ( viewer_distance < distances[index] ) {
second_units[index] = &viewer;
distances[index] = viewer_distance;
}
}
}
}
// Raise events for the appropriate teams.
const game_events::entity_location target_entity(target);
for ( std::size_t i = 0; i != teams_size; ++i )
if ( second_units[i] != nullptr ) {
resources::game_events->pump().raise(sighted_str, target_entity, game_events::entity_location(*second_units[i]));
}
// Fire the events and return.
return resources::game_events->pump()();
}