当前位置: 首页>>代码示例>>C++>>正文


C++ GameScene::getEntity方法代码示例

本文整理汇总了C++中GameScene::getEntity方法的典型用法代码示例。如果您正苦于以下问题:C++ GameScene::getEntity方法的具体用法?C++ GameScene::getEntity怎么用?C++ GameScene::getEntity使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GameScene的用法示例。


在下文中一共展示了GameScene::getEntity方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: tile

vector2d<int> Unit::availableTile(Entity* target) {
	GameScene* scene = (GameScene*) (Game::getInstance().currentScene);
	vector2d<int> tile(-1, -1);
	vector<vector2d<int>>* candidates;

	candidates = target->getSurroundingTiles();
	for(int i = 0; i < candidates->size(); i++) {
		if(scene->getEntity(candidates->at(i).X, candidates->at(i).Y) ) {
			candidates->erase(candidates->begin() + i);
			i--;
		}		
	}
	
	float lowest = FLT_MAX;
	for(int i = 0; i < candidates->size(); i++) {
		float distance = candidates->at(i).getDistanceFrom(vector2d<int>(tileX, tileY) );
		if(distance < lowest ) {
			tile = candidates->at(i);
			lowest = distance;
		}
	}

	delete candidates;
	return tile;
}
开发者ID:MegaR,项目名称:ARiseofWar,代码行数:25,代码来源:Unit.cpp

示例2: addDistanceTiles

void Unit::addDistanceTiles(int x, int y, int distance) {
	Game* game = &Game::getInstance();
	GameScene* scene = (GameScene*)game->currentScene;

	if(distance < 0) return;
	if(x < 0 || x > MAPSIZE-1) {
		return;
	}
	if(y < 0 || y > MAPSIZE-1) {
		return;
	}

	if(!scene->tilesystem.tiles[x][y]->walkable) {
		return;
	}

	Entity* entity = scene->getEntity(x,y);
	if( entity != NULL && entity != this ) {
		return;
	}

	bool alreadyThere = false;
	for(int i = 0; i < distanceTiles.size(); i++) {
		if(distanceTiles.at(i)->getPosition().X == x*10 
			&& distanceTiles.at(i)->getPosition().Z == y*10) {
				alreadyThere = true;
		}
	}

	bool inAttackRange = false;
	for(int i = 0; i < scene->entities.size(); i++) {
		if(scene->entities.at(i)->player == 0) continue;
		if(scene->entities.at(i)->inAttackRange(x, y, attackDistance) ) {
			inAttackRange = true;
		}
	}

	if(!inAttackRange && hasMoved) return;

	if(!alreadyThere) {
		IAnimatedMesh* model = game->sceneManager->getMesh("res/tileDistance.3ds");
		ISceneNode* node = game->sceneManager->addMeshSceneNode(model);
		node->setMaterialFlag(EMF_LIGHTING, false);
		node->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL);
		if(inAttackRange) {
			node->setMaterialTexture( 0, game->videoDriver->getTexture("res/tileDistanceRed.png") );
		} else {
			node->setMaterialTexture( 0, game->videoDriver->getTexture("res/tileDistanceBlue.png") );
		}
		node->setPosition(vector3d<f32>(x*10, 0, y*10) );
		node->setID(0);
		distanceTiles.push_back(node);
	}

	addDistanceTiles(x-1, y, distance-1);
	addDistanceTiles(x+1, y, distance-1);
	addDistanceTiles(x, y-1, distance-1);
	addDistanceTiles(x, y+1, distance-1);
}
开发者ID:MegaR,项目名称:ARiseofWar,代码行数:59,代码来源:Unit.cpp

示例3: createUnit

void SiegeWorkshop::createUnit(){
	Game* game = &Game::getInstance();
	GameScene* scene = (GameScene*)game->currentScene;
	std::vector<vector2d<int>> *list;
	
	list = this->getSurroundingTiles();
	for(int i = 0; i < list->size(); i++) {
		TileGrass* tile = dynamic_cast<TileGrass*>(scene->tilesystem.tiles[list->at(i).X][list->at(i).Y]);

		if( scene->getEntity(list->at(i).X, list->at(i).Y) || !tile) {
			list->erase(list->begin()+i);
			i--;
		}
	}
	if(list->size() > 0){
		((GameScene*)game->currentScene)->entities.push_back(new UnitCatapult(list->at(0).X,list->at(0).Y, player, scene ));
		delete list;
	}
}
开发者ID:MegaR,项目名称:ARiseofWar,代码行数:19,代码来源:SiegeWorkshop.cpp


注:本文中的GameScene::getEntity方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。