EnemyManager::EnemyManager(char* filename, Ogre::SceneManager* _inMgr, Blocks* block_ent)
{
	vData.clear();
	vEnemy.clear();
	ReadXmlEnemyData(filename);

	for (int i = 0; i < vData.size(); i++) {
		Ogre::Vector3 startPos = Ogre::Vector3(vData[i].x, vData[i].y, vData[i].z);
		Ogre::Vector3 pos = block_ent->absToRealPos(startPos);
		Enemy* enemy = new Enemy(_inMgr, Ogre::Vector3(pos.x, pos.y-25, pos.z), startPos);
		vEnemy.push_back(enemy);
		enemy->Initialize();
		enemy->InitCmdVector(vData[i].vCmd);
	}
}
Exemple #2
0
//=============================================================================================================
void Game::AddEnemy(int type, int height, int width, int track, int speed)
{
	if( height > 3 || height < 1 )
		return;

	DummyFramework::CSprite9*	sprite;

	D3DXVECTOR2		position;
	Enemy*			enemy;
	float			h = (float)height;
	float			d = GameVariables::PlayFieldHeight;
	float			start = (GameVariables::ScreenHeight - d) * 0.5f;
	float			tw;
	int			cnt;

	// elöször meg kell tudni, hogy melyik grafika lesz
	switch( type )
	{
	case 0:
		sprite = &atlas1["regular"];
		break;

	case 1:
		sprite = &atlas1["worm"];
		break;

	case 2:
		sprite = &atlas1["bomb"];
		break;

	case 3:
		sprite = &atlas1["island"];
		break;

		/*
	case 4:
		sprite = &atlas1["elite"];
		break;
		*/

	case 5:
		sprite = &atlas1["razor"];
		break;

	default:
		break;
	}

	// aztán kiszámolni a helyzetét
	float yspacing = (d - 3.0f * sprite->Size.y) / 4.0f;
	float xspacing = 20;

	if( track == 0 )
	{
		position.y = start + yspacing + sprite->Size.y * 0.5f;
		yspacing = (4.0f - h) * yspacing + (3.0f - h) * sprite->Size.y;
	}
	else if( track == 1 )
	{
		float center = start + d * 0.5f;
		position.y = center - (h - 1) * 0.5f * (sprite->Size.y + yspacing);
	}
	else if( track == 2 )
	{
		position.y = GameVariables::ScreenHeight - start - yspacing - sprite->Size.y * 0.5f;
		yspacing = -((5 - h) * sprite->Size.y + (4 - h) * yspacing);
	}

	// és létrehozni a megfelelö származtatott objektumot
	switch( type )
	{
	case 0:
		for( int i = 0; i < height; ++i )
		{
			position.x = GameVariables::ScreenWidth + sprite->Size.x;

			for( int j = 0; j < width; ++j )
			{
				enemy = new Enemy();

				enemy->shoot.connect(this, &Game::enemy_shoot1);
				enemy->explode.connect(this, &Game::enemy_explode);
				enemy->dead.connect(this, &Game::enemy_dead);

				enemy->Initialize(*game);
				enemy->Image = sprite;
				enemy->Hurt = &atlas1["hurt"];
				enemy->Speed = GameVariables::CorrelateW((float)speed);
				enemy->SetPosition(position);

				enemies.insert(enemy);
				position.x += (sprite->Size.x + xspacing);
			}

			position.y += (sprite->Size.y + yspacing);
		}
		break;

	case 1:
		position.x = GameVariables::ScreenWidth + sprite->Size.x;

		if( height > 1 )
		{
			// egyik
			enemy = new Worm(width);
			((Worm*)enemy)->Direction = 1.0f;

			enemy->explode.connect(this, &Game::enemy_explode);
			enemy->dead.connect(this, &Game::enemy_dead);

			enemy->Initialize(*game);
			enemy->Image = sprite;
			enemy->Hurt = &atlas1["hurt"];
			enemy->Speed = GameVariables::CorrelateH((float)speed);
			enemy->SetPosition(position);

			enemies.insert(enemy);

			// másik
			enemy = new Worm(width);
			((Worm*)enemy)->Direction = -1.0f;

			enemy->explode.connect(this, &Game::enemy_explode);
			enemy->dead.connect(this, &Game::enemy_dead);

			enemy->Initialize(*game);
			enemy->Image = sprite;
			enemy->Hurt = &atlas1["hurt"];
			enemy->Speed = GameVariables::CorrelateH((float)speed);
			enemy->SetPosition(position);

			enemies.insert(enemy);
		}
		else
		{
			enemy = new Worm(width);
			((Worm*)enemy)->Direction = ((track == 0) ? 1.0f : -1.0f);

			enemy->explode.connect(this, &Game::enemy_explode);
			enemy->dead.connect(this, &Game::enemy_dead);

			enemy->Initialize(*game);
			enemy->Image = sprite;
			enemy->Hurt = &atlas1["hurt"];
			enemy->Speed = GameVariables::CorrelateH((float)speed);
			enemy->SetPosition(position);

			enemies.insert(enemy);
		}

		break;

	case 2:
		tw = width * sprite->Size.x + (width - 1) * xspacing;

		for( int i = 0; i < height; ++i )
		{
			if( track == 0 )
				cnt = (width - (i % 2));
			else if( track == 1 )
				cnt = (height == 3 ? (width - 1 + (i % 2)) : width);
			else if( track == 2 )
				cnt = ((i + height) % 2 ? width : width - 1);

			position.x = GameVariables::ScreenWidth + sprite->Size.x
				+ (tw - (cnt * sprite->Size.x + (cnt - 1) * xspacing)) * 0.5f;

			for( int j = 0; j < cnt; ++j )
			{
				enemy = new Bomb();
				((Bomb*)enemy)->Highlight = &atlas1["highlight"];

				enemy->explode.connect(this, &Game::enemy_explode);
				enemy->dead.connect(this, &Game::enemy_dead);

				enemy->Initialize(*game);
				enemy->Image = sprite;
				enemy->Hurt = &atlas1["hurt"];
				enemy->Speed = GameVariables::CorrelateW((float)speed);
				enemy->SetPosition(position);

				enemies.insert(enemy);
				position.x += (sprite->Size.x + xspacing);
			}

			position.y += (sprite->Size.y + yspacing);
		}
		break;

	case 3:
		for( int i = 0; i < height; ++i )
		{
			position.x = GameVariables::ScreenWidth + sprite->Size.x;

			for( int j = 0; j < width; ++j )
			{
				enemy = new Island();

				enemy->Initialize(*game);
				enemy->Image = sprite;
				enemy->Speed = GameVariables::CorrelateW((float)speed);
				enemy->SetPosition(position);

				enemies.insert(enemy);
				position.x += (sprite->Size.x + xspacing);
			}

			position.y += (sprite->Size.y + yspacing);
		}
		break;

	case 5:
		position.x = GameVariables::ScreenWidth + sprite->Size.x;
		position.y = start + yspacing + sprite->Size.y * 0.5f;

		enemy = new Razor();

		enemy->shoot.connect(this, &Game::enemy_shoot2);
		enemy->explode.connect(this, &Game::enemy_explode);
		enemy->dead.connect(this, &Game::enemy_dead);

		enemy->Initialize(*game);
		enemy->Image = sprite;
		enemy->Hurt = &atlas1["hurt"];
		enemy->Speed = GameVariables::CorrelateW((float)speed);
		enemy->SetPosition(position);

		enemies.insert(enemy);

		// 2 razornál több már szemétség lenne
		if( width + height > 2 )
		{
			// picit messzebröl induljon, hogy láthato legyen hogy az kettö...
			position.x = GameVariables::ScreenWidth + sprite->Size.x * 3;
			position.y = GameVariables::ScreenHeight - start - yspacing - sprite->Size.y * 0.5f;

			enemy = new Razor();

			enemy->shoot.connect(this, &Game::enemy_shoot2);
			enemy->explode.connect(this, &Game::enemy_explode);
			enemy->dead.connect(this, &Game::enemy_dead);

			enemy->Initialize(*game);
			enemy->Image = sprite;
			enemy->Hurt = &atlas1["hurt"];
			enemy->Speed = GameVariables::CorrelateW((float)speed);
			enemy->SetPosition(position);

			enemies.insert(enemy);
		}

		break;

	default:
		break;
	}
}