本文整理汇总了C++中monster::is_dead方法的典型用法代码示例。如果您正苦于以下问题:C++ monster::is_dead方法的具体用法?C++ monster::is_dead怎么用?C++ monster::is_dead使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类monster
的用法示例。
在下文中一共展示了monster::is_dead方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update_pos
bool Creature_tracker::update_pos(const monster &critter, const int new_x_pos, const int new_y_pos)
{
if (critter.posx() == new_x_pos && critter.posy() == new_y_pos) {
return true; // success?
}
bool success = false;
const int dead_critter_id = dead_mon_at(point(critter.posx(), critter.posy()));
const int live_critter_id = mon_at(point(critter.posx(), critter.posy()));
const int critter_id = critter.is_dead() ? dead_critter_id : live_critter_id;
const int new_critter_id = mon_at(new_x_pos, new_y_pos);
if (new_critter_id >= 0 && !_old_monsters_list[new_critter_id]->is_dead()) {
debugmsg("update_zombie_pos: new location %d,%d already has zombie %d",
new_x_pos, new_y_pos, new_critter_id);
} else if (critter_id >= 0) {
if (&critter == _old_monsters_list[critter_id]) {
_old_monsters_by_location.erase(point(critter.posx(), critter.posy()));
_old_monsters_by_location[point(new_x_pos, new_y_pos)] = critter_id;
success = true;
} else {
debugmsg("update_zombie_pos: old location %d,%d had zombie %d instead",
critter.posx(), critter.posy(), critter_id);
}
} else {
// We're changing the x/y coordinates of a zombie that hasn't been added
// to the game yet. add_zombie() will update _old_monsters_by_location for us.
debugmsg("update_zombie_pos: no such zombie at %d,%d (moving to %d,%d)",
critter.posx(), critter.posy(), new_x_pos, new_y_pos);
}
return success;
}
示例2: update_pos
bool Creature_tracker::update_pos( const monster &critter, const tripoint &new_pos )
{
const auto old_pos = critter.pos();
if( critter.is_dead() ) {
// mon_at ignores dead critters anyway, changing their position in the
// monsters_by_location map is useless.
remove_from_location_map( critter );
return true;
}
const int critter_id = mon_at( old_pos );
const int new_critter_id = mon_at( new_pos );
if( new_critter_id >= 0 ) {
auto &othermon = *monsters_list[new_critter_id];
if( othermon.is_hallucination() ) {
othermon.die( nullptr );
} else {
debugmsg( "update_zombie_pos: wanted to move %s to %d,%d,%d, but new location already has %s",
critter.disp_name().c_str(),
new_pos.x, new_pos.y, new_pos.z, othermon.disp_name().c_str() );
return false;
}
}
if( critter_id >= 0 ) {
if( &critter == monsters_list[critter_id] ) {
monsters_by_location.erase( old_pos );
monsters_by_location[new_pos] = critter_id;
return true;
} else {
const auto &othermon = *monsters_list[critter_id];
debugmsg( "update_zombie_pos: wanted to move %s from old location %d,%d,%d, but it had %s instead",
critter.disp_name().c_str(),
old_pos.x, old_pos.y, old_pos.z, othermon.disp_name().c_str() );
return false;
}
} else {
// We're changing the x/y/z coordinates of a zombie that hasn't been added
// to the game yet. add_zombie() will update monsters_by_location for us.
debugmsg( "update_zombie_pos: no %s at %d,%d,%d (moving to %d,%d,%d)",
critter.disp_name().c_str(),
old_pos.x, old_pos.y, old_pos.z, new_pos.x, new_pos.y, new_pos.z );
// Rebuild cache in case the monster actually IS in the game, just bugged
rebuild_cache();
return false;
}
return false;
}
示例3: update_pos
bool Creature_tracker::update_pos( const monster &critter, const tripoint &new_pos )
{
if( critter.is_dead() ) {
// find ignores dead critters anyway, changing their position in the
// monsters_by_location map is useless.
remove_from_location_map( critter );
return true;
}
if( const std::shared_ptr<monster> new_critter_ptr = find( new_pos ) ) {
auto &othermon = *new_critter_ptr;
if( othermon.is_hallucination() ) {
othermon.die( nullptr );
} else {
debugmsg( "update_zombie_pos: wanted to move %s to %d,%d,%d, but new location already has %s",
critter.disp_name(),
new_pos.x, new_pos.y, new_pos.z, othermon.disp_name() );
return false;
}
}
const auto iter = std::find_if( monsters_list.begin(), monsters_list.end(),
[&]( const std::shared_ptr<monster> &ptr ) {
return ptr.get() == &critter;
} );
if( iter != monsters_list.end() ) {
monsters_by_location.erase( critter.pos() );
monsters_by_location[new_pos] = *iter;
return true;
} else {
const tripoint &old_pos = critter.pos();
// We're changing the x/y/z coordinates of a zombie that hasn't been added
// to the game yet. add_zombie() will update monsters_by_location for us.
debugmsg( "update_zombie_pos: no %s at %d,%d,%d (moving to %d,%d,%d)",
critter.disp_name(),
old_pos.x, old_pos.y, old_pos.z, new_pos.x, new_pos.y, new_pos.z );
// Rebuild cache in case the monster actually IS in the game, just bugged
rebuild_cache();
return false;
}
}
示例4: update_pos
bool Creature_tracker::update_pos(const monster &critter, const tripoint &new_pos)
{
const auto old_pos = critter.pos3();
if( critter.is_dead() ) {
// mon_at ignores dead critters anyway, changing their position in the
// monsters_by_location map is useless.
remove_from_location_map( critter );
return true;
}
bool success = false;
const int critter_id = mon_at( old_pos );
const int new_critter_id = mon_at( new_pos );
if( new_critter_id >= 0 ) {
debugmsg("update_zombie_pos: new location %d,%d,%d already has zombie %d",
new_pos.x, new_pos.y, new_pos.z, new_critter_id);
} else if( critter_id >= 0 ) {
if( &critter == monsters_list[critter_id] ) {
monsters_by_location.erase( old_pos );
monsters_by_location[new_pos] = critter_id;
success = true;
} else {
debugmsg("update_zombie_pos: old location %d,%d had zombie %d instead",
old_pos.x, old_pos.y, critter_id);
}
} else {
// We're changing the x/y/z coordinates of a zombie that hasn't been added
// to the game yet. add_zombie() will update monsters_by_location for us.
debugmsg("update_zombie_pos: no such zombie at %d,%d,%d (moving to %d,%d,%d)",
old_pos.x, old_pos.y, old_pos.z, new_pos.x, new_pos.y, new_pos.z );
// Rebuild cache in case the monster actually IS in the game, just bugged
rebuild_cache();
}
return success;
}