• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ canSee函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了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;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ canUndo函数代码示例发布时间:2022-05-30
下一篇:
C++ canRead函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap