本文整理汇总了C++中canSee函数的典型用法代码示例。如果您正苦于以下问题:C++ canSee函数的具体用法?C++ canSee怎么用?C++ canSee使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了canSee函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: while
void Monster::updateTargetList()
{
auto friendIterator = friendList.begin();
while (friendIterator != friendList.end()) {
Creature* creature = *friendIterator;
if (creature->getHealth() <= 0 || !canSee(creature->getPosition())) {
creature->decrementReferenceCounter();
friendIterator = friendList.erase(friendIterator);
} else {
++friendIterator;
}
}
auto targetIterator = targetList.begin();
while (targetIterator != targetList.end()) {
Creature* creature = *targetIterator;
if (creature->getHealth() <= 0 || !canSee(creature->getPosition())) {
creature->decrementReferenceCounter();
targetIterator = targetList.erase(targetIterator);
} else {
++targetIterator;
}
}
SpectatorHashSet spectators;
g_game.map.getSpectators(spectators, position, true);
spectators.erase(this);
for (Creature* spectator : spectators) {
if (canSee(spectator->getPosition())) {
onCreatureFound(spectator);
}
}
}
开发者ID:WibbenZ,项目名称:forgottenserver,代码行数:33,代码来源:monster.cpp
示例2: while
void Monster::updateTargetList()
{
CreatureList::iterator it = friendList.begin();
while(it != friendList.end())
{
if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition()))
{
(*it)->releaseThing2();
it = friendList.erase(it);
}
else
++it;
}
it = targetList.begin();
while(it != targetList.end())
{
if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition()))
{
(*it)->releaseThing2();
it = targetList.erase(it);
}
else
++it;
}
const SpectatorVec& list = g_game.getSpectators(getPosition());
for(SpectatorVec::const_iterator list_it = list.begin(), list_end = list.end(); list_it != list_end; ++list_it)
{
if((*list_it) != this && canSee((*list_it)->getPosition()))
onCreatureFound(*list_it);
}
}
开发者ID:armadaazteca,项目名称:tfs0.2.15,代码行数:33,代码来源:monster.cpp
示例3: updateTargetList
void Actor::updateTargetList()
{
CreatureList::iterator it;
for(it = friendList.begin(); it != friendList.end();){
if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition())){
(*it)->unRef();
it = friendList.erase(it);
}
else
++it;
}
for(it = targetList.begin(); it != targetList.end();){
if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition())){
(*it)->unRef();
it = targetList.erase(it);
}
else
++it;
}
const SpectatorVec& list = g_game.getSpectators(getPosition());
for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it){
if((*it) != this && canSee((*it)->getPosition())){
onCreatureFound(*it);
}
}
}
开发者ID:opentibia,项目名称:server,代码行数:28,代码来源:actor.cpp
示例4: canSee
void Monster::onCreatureMove(const Creature* creature, const Tile* newTile, const Position& newPos,
const Tile* oldTile, const Position& oldPos, bool teleport)
{
Creature::onCreatureMove(creature, newTile, newPos, oldTile, oldPos, teleport);
if(creature == this)
{
if(isSummon())
isMasterInRange = canSee(master->getPosition());
updateTargetList();
updateIdleStatus();
}
else
{
bool canSeeNewPos = canSee(newPos), canSeeOldPos = canSee(oldPos);
if(canSeeNewPos && !canSeeOldPos)
onCreatureEnter(const_cast<Creature*>(creature));
else if(!canSeeNewPos && canSeeOldPos)
onCreatureLeave(const_cast<Creature*>(creature));
if(isSummon() && master == creature && canSeeNewPos) //Turn the summon on again
isMasterInRange = true;
updateIdleStatus();
if(!followCreature && !isSummon() && isOpponent(creature)) //we have no target lets try pick this one
selectTarget(const_cast<Creature*>(creature));
}
}
开发者ID:alexisjojo,项目名称:darkkonia,代码行数:28,代码来源:monster.cpp
示例5: canSee
void Actor::onCreatureMove(const Creature* creature, const Tile* newTile, const Position& newPos,
const Tile* oldTile, const Position& oldPos, bool teleport)
{
Creature::onCreatureMove(creature, newTile, newPos, oldTile, oldPos, teleport);
if(creature == this){
if(isSummon()){
isMasterInRange = canSee(getMaster()->getPosition());
}
updateTargetList();
updateIdleStatus();
/*
TODO: Optimizations here
if(teleport){
//do a full update of the friend/target list
}
else{
//partial update of the friend/target list
}
*/
}
else{
bool canSeeNewPos = canSee(newPos);
bool canSeeOldPos = canSee(oldPos);
if(canSeeNewPos && !canSeeOldPos){
onCreatureEnter(const_cast<Creature*>(creature));
}
else if(!canSeeNewPos && canSeeOldPos){
onCreatureLeave(const_cast<Creature*>(creature));
}
if(isSummon() && getMaster() == creature){
if(canSeeNewPos){
//Turn the summon on again
isMasterInRange = true;
}
}
updateIdleStatus();
if(!followCreature && !isSummon()){
//we have no target lets try pick this one
if(isOpponent(creature)){
selectTarget(const_cast<Creature*>(creature));
}
}
}
}
开发者ID:opentibia,项目名称:server,代码行数:51,代码来源:actor.cpp
示例6: game
bool ZombieEntity::attack()
{
Vector2D playerPos = game().getPlayerPosition();
bool attacking = false;
// left ?
if (playerPos.x < x && playerPos.y > y - 15 && playerPos.y < y + 15 && canSee(playerPos.x, playerPos.y))
{
direction = 3;
velocity.x = -creatureSpeed;
velocity.y = 0;
facingDirection = 4;
attacking = true;
}
// right ?
else if (playerPos.x > x && playerPos.y > y - 15 && playerPos.y < y + 15 && canSee(playerPos.x, playerPos.y))
{
direction = 1;
velocity.x = creatureSpeed;
velocity.y = 0;
facingDirection = 6;
attacking = true;
}
// down ?
else if (playerPos.y > y && playerPos.x > x - 15 && playerPos.x < x + 15 && canSee(playerPos.x, playerPos.y))
{
direction = 2;
velocity.x = 0;
velocity.y = creatureSpeed;
facingDirection = 2;
attacking = true;
}
// up ?
else if (playerPos.y < y && playerPos.x > x - 15 && playerPos.x < x + 15 && canSee(playerPos.x, playerPos.y))
{
direction = 0;
velocity.x = 0;
velocity.y = -creatureSpeed;
facingDirection = 8;
attacking = true;
}
if (attacking)
{
SoundManager::getInstance().playSound(SOUND_ZOMBIE_ATTACKING);
facingTimer = 0.2f;
nextFacingDirection = facingDirection;
}
return attacking;
}
开发者ID:Cirrus-Minor,项目名称:witchblast,代码行数:51,代码来源:ZombieEntity.cpp
示例7: setAttackedCreature
bool Creature::setAttackedCreature(Creature* creature)
{
if(creature)
{
const Position& creaturePos = creature->getPosition();
if(creaturePos.z != getPosition().z || !canSee(creaturePos))
{
attackedCreature = NULL;
return false;
}
}
attackedCreature = creature;
if(attackedCreature)
{
onTarget(attackedCreature);
attackedCreature->onAttacked();
}
for(std::list<Creature*>::iterator cit = summons.begin(); cit != summons.end(); ++cit)
(*cit)->setAttackedCreature(creature);
Condition* condition = getCondition(CONDITION_LOGINPROTECTION, CONDITIONID_DEFAULT);
if(condition)
removeCondition(condition);
return true;
}
开发者ID:Azuen,项目名称:RealOTX-7.72,代码行数:28,代码来源:creature.cpp
示例8: basicAI
void AISystem::basicAI(entityx::Entity &e) {
world->currLevel->calculateMaps();
world->currLevel->computeMovesTo(target_x, target_y);
if (canSee(e) && canMoveToward(e)) {
moveToward(e);
}
// if (failMoraleCheck() && canMoveAway()) {
// moveAway();
// } else if (hasRangedAttack() && canMoveToward(e)) {
// if (decideToCharge()) {
// moveToward(e);
// } else {
// rangedAttack();
// }
// } else if (canAttack() && hasRangedAttack() && canMoveAway()) {
// if (decideToRetreat()) {
// moveAway();
// } else {
// attack();
// }
// } else if (canAttack()) {
// attack();
// } else if (canMoveToward(e)) {
// moveToward(e);
// } else {
// wait();
// }
}
开发者ID:fros1y,项目名称:journey,代码行数:29,代码来源:AISystem.cpp
示例9: checkCreatureAsKnown
void ProtocolGameBase::checkCreatureAsKnown(uint32_t id, bool& known, uint32_t& removedKnown)
{
auto result = knownCreatureSet.insert(id);
if (!result.second) {
known = true;
return;
}
known = false;
if (knownCreatureSet.size() > 1300) {
// Look for a creature to remove
for (std::unordered_set<uint32_t>::iterator it = knownCreatureSet.begin(), end = knownCreatureSet.end(); it != end; ++it) {
Creature* creature = g_game.getCreatureByID(*it);
if (!canSee(creature)) {
removedKnown = *it;
knownCreatureSet.erase(it);
return;
}
}
// Bad situation. Let's just remove anyone.
std::unordered_set<uint32_t>::iterator it = knownCreatureSet.begin();
if (*it == id) {
++it;
}
removedKnown = *it;
knownCreatureSet.erase(it);
} else {
removedKnown = 0;
}
}
开发者ID:samuel2498,项目名称:nowy,代码行数:33,代码来源:protocolgamebase.cpp
示例10: setFollowCreature
bool Creature::setFollowCreature(Creature* creature, bool fullPathSearch /*= false*/)
{
if (creature) {
if (followCreature == creature) {
return true;
}
const Position& creaturePos = creature->getPosition();
if (creaturePos.z != getPosition().z || !canSee(creaturePos)) {
followCreature = NULL;
return false;
}
if (!listWalkDir.empty()) {
listWalkDir.clear();
onWalkAborted();
}
hasFollowPath = false;
forceUpdateFollowPath = false;
followCreature = creature;
isUpdatingPath = true;
} else {
isUpdatingPath = false;
followCreature = NULL;
}
onFollowCreature(creature);
return true;
}
开发者ID:afsdadsfdsa,项目名称:forgottenserver,代码行数:30,代码来源:creature.cpp
示例11: sendCreatureLight
void ProtocolGameBase::sendCreatureLight(const Creature* creature)
{
if (!canSee(creature)) {
return;
}
NetworkMessage msg;
AddCreatureLight(msg, creature);
writeToOutputBuffer(msg);
}
开发者ID:samuel2498,项目名称:nowy,代码行数:10,代码来源:protocolgamebase.cpp
示例12: canSee
bool ProtocolGameBase::canSee(const Creature* c) const
{
if (!c || !player || c->isRemoved()) {
return false;
}
if (!player->canSeeCreature(c)) {
return false;
}
return canSee(c->getPosition());
}
开发者ID:samuel2498,项目名称:nowy,代码行数:12,代码来源:protocolgamebase.cpp
示例13: sendMagicEffect
void ProtocolGameBase::sendMagicEffect(const Position& pos, uint8_t type)
{
if (!canSee(pos)) {
return;
}
NetworkMessage msg;
msg.addByte(0x83);
msg.addPosition(pos);
msg.addByte(type);
writeToOutputBuffer(msg);
}
开发者ID:samuel2498,项目名称:nowy,代码行数:12,代码来源:protocolgamebase.cpp
示例14: update
void Monster::update() {
if (canDie && isDead()) {
return;
}
engine.map->computeFOV(*this);
if (canSee(engine.player->x, engine.player->y)) {
moveCount = TRACKING_TURNS;
}
else {
--moveCount;
}
if (moveCount > 0) {
moveOrAttack(engine.player->x, engine.player->y);
}
}
开发者ID:s4murai,项目名称:dddd,代码行数:18,代码来源:Monster.cpp
示例15: canSee
void Monster::onCreatureAppear(Creature* creature, bool isLogin)
{
Creature::onCreatureAppear(creature, isLogin);
if (mType->info.creatureAppearEvent != -1) {
// onCreatureAppear(self, creature)
LuaScriptInterface* scriptInterface = mType->info.scriptInterface;
if (!scriptInterface->reserveScriptEnv()) {
std::cout << "[Error - Monster::onCreatureAppear] Call stack overflow" << std::endl;
return;
}
ScriptEnvironment* env = scriptInterface->getScriptEnv();
env->setScriptId(mType->info.creatureAppearEvent, scriptInterface);
lua_State* L = scriptInterface->getLuaState();
scriptInterface->pushFunction(mType->info.creatureAppearEvent);
LuaScriptInterface::pushUserdata<Monster>(L, this);
LuaScriptInterface::setMetatable(L, -1, "Monster");
LuaScriptInterface::pushUserdata<Creature>(L, creature);
LuaScriptInterface::setCreatureMetatable(L, -1, creature);
if (scriptInterface->callFunction(2)) {
return;
}
}
if (creature == this) {
//We just spawned lets look around to see who is there.
if (isSummon()) {
isMasterInRange = canSee(getMaster()->getPosition());
}
updateTargetList();
updateIdleStatus();
} else {
onCreatureEnter(creature);
}
}
开发者ID:WibbenZ,项目名称:forgottenserver,代码行数:41,代码来源:monster.cpp
示例16: setAttackedCreature
bool Creature::setAttackedCreature(Creature* creature)
{
if (creature) {
const Position& creaturePos = creature->getPosition();
if (creaturePos.z != getPosition().z || !canSee(creaturePos)) {
attackedCreature = NULL;
return false;
}
attackedCreature = creature;
onAttackedCreature(attackedCreature);
attackedCreature->onAttacked();
} else {
attackedCreature = NULL;
}
for (Creature* summon : summons) {
summon->setAttackedCreature(creature);
}
return true;
}
开发者ID:afsdadsfdsa,项目名称:forgottenserver,代码行数:21,代码来源:creature.cpp
示例17: sendUpdateTile
void ProtocolGameBase::sendUpdateTile(const Tile* tile, const Position& pos)
{
if (!canSee(pos)) {
return;
}
NetworkMessage msg;
msg.addByte(0x69);
msg.addPosition(pos);
if (tile) {
GetTileDescription(tile, msg);
msg.addByte(0x00);
msg.addByte(0xFF);
} else {
msg.addByte(0x01);
msg.addByte(0xFF);
}
writeToOutputBuffer(msg);
}
开发者ID:samuel2498,项目名称:nowy,代码行数:21,代码来源:protocolgamebase.cpp
示例18: canSee
void Monster::onCreatureAppear(const Creature* creature)
{
Creature::onCreatureAppear(creature);
if(creature == this)
{
//We just spawned lets look around to see who is there.
if(isSummon())
isMasterInRange = canSee(getMaster()->getPosition());
setStorage(510, mType->realName); // sistema de shiny nomes 2.0
CreatureEventList spawn = getCreatureEvents(CREATURE_EVENT_SPAWN);
for(CreatureEventList::iterator it = spawn.begin(); it != spawn.end(); ++it)
(*it)->executeOnSpawn(this);
updateTargetList();
updateIdleStatus();
}
else
onCreatureEnter(const_cast<Creature*>(creature));
}
开发者ID:CaosJunior,项目名称:DxP,代码行数:23,代码来源:monster.cpp
示例19: setAttackedCreature
bool Creature::setAttackedCreature(Creature* creature)
{
if(creature){
const Position& creaturePos = creature->getPosition();
if(creaturePos.z != getPosition().z || !canSee(creaturePos)){
attackedCreature = NULL;
return false;
}
}
attackedCreature = creature;
if(attackedCreature){
onAttackedCreature(attackedCreature);
attackedCreature->onAttacked();
}
std::list<Creature*>::iterator cit;
for(cit = summons.begin(); cit != summons.end(); ++cit) {
(*cit)->setAttackedCreature(creature);
}
return true;
}
开发者ID:Ablankzin,项目名称:server,代码行数:24,代码来源:creature.cpp
示例20: canSee
bool Creature::canSee(const Position& pos) const
{
return canSee(getPosition(), pos, Map::maxViewportX, Map::maxViewportY);
}
开发者ID:afsdadsfdsa,项目名称:forgottenserver,代码行数:4,代码来源:creature.cpp
注:本文中的canSee函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论