Ejemplo n.º 1
0
void sdlEnemyAff(const sdlMap *sdMap)
{
	//affichage enemies
	int i,iSprite;
	double x,y;
	Map *map = getSdlMap(sdMap);
	for(i=getEnsEnemyNb(getMapEnemys(map)) - 1;i>=0;i--)
	{
		Enemy *e = getMapEnemys(map)->tab[i];
		//position
		Coord pos = getEnemyPosition(e);
		x = pos.x;
		y = pos.y;

		//affichage du sprite
		switch (getEnemyType(e)){
		case 'C':
			iSprite = getSpriteFromTimer(sdMap->EnemyClassic, getEnemyBaseMoveTimer(e), getEnemyMoveTimer(e));
			sdlApplySurface(sdMap->EnemyClassic->sprites[iSprite], getSdlMapEcran(sdMap), x, y);
			break;
		case 'F':
			iSprite = getSpriteFromTimer(sdMap->EnemyFly, getEnemyBaseMoveTimer(e), getEnemyMoveTimer(e));
			sdlApplySurface(sdMap->EnemyFly->sprites[iSprite], getSdlMapEcran(sdMap), x, y);
			break;
		case 'B':
			iSprite = getSpriteFromTimer(sdMap->EnemyBoss, getEnemyBaseMoveTimer(e), getEnemyMoveTimer(e));
			sdlApplySurface(sdMap->EnemyBoss->sprites[iSprite], getSdlMapEcran(sdMap), x, y);
			break;
		}

		//Barre de vie
		if (getEnemyHP(e) == getEnemyMaxHp(e)) 
		{
			sdlApplySurface(sdMap->Life->sprites[5], getSdlMapEcran(sdMap), x, y);
		} else if(getEnemyHP(e) >= getEnemyMaxHp(e)*0.8 && getEnemyHP(e) < getEnemyMaxHp(e)){
			sdlApplySurface(sdMap->Life->sprites[4], getSdlMapEcran(sdMap), x, y);
		} else if(getEnemyHP(e) >= getEnemyMaxHp(e)*0.6 && getEnemyHP(e) < getEnemyMaxHp(e)*0.8){
			sdlApplySurface(sdMap->Life->sprites[3], getSdlMapEcran(sdMap), x, y);
		} else if(getEnemyHP(e) >= getEnemyMaxHp(e)*0.4 && getEnemyHP(e) < getEnemyMaxHp(e)*0.6){
			sdlApplySurface(sdMap->Life->sprites[2], getSdlMapEcran(sdMap), x, y);
		} else if(getEnemyHP(e) >= getEnemyMaxHp(e)*0.2 && getEnemyHP(e) < getEnemyMaxHp(e)*0.4){
			sdlApplySurface(sdMap->Life->sprites[1], getSdlMapEcran(sdMap), x, y);
		} else if(getEnemyHP(e) >= 0 && getEnemyHP(e) < getEnemyHP(e)*0.2){
			sdlApplySurface(sdMap->Life->sprites[0], getSdlMapEcran(sdMap), x, y);
		}
	}
}
Ejemplo n.º 2
0
/// <summary>
/// Enemy shoot handler
/// </summary>
/// <param name="shoot">Which type of shot it is.</param>
void Enemy::shoot(int shoot)
{
	// SHOOT -1 = undefined (no shooting)
	// SHOOT 0 = undefined (no shooting)
	// SHOOT 3  = SPECIAL ATTACK
	// SHOOT 1 = Normal attack which differ depending on the enemy

	// Check if shooting is of.
	if (shoot != -1 && shoot != 0)
	{

		// Check if its a regular enemy
		if (getEnemyType() == Enemy::EnemyType::REGULAR)
		{
			// Gets a bullet and set the appropriate data, then push to the bulletlist
			std::unique_ptr<Bullet> b = getBulletFactory().requestObject(Bullet::Type::standardShot);
			b->setOwner(this->getType());
			b->sprite->setPosition(this->sprite->getPosition().x, this->sprite->getPosition().y - 10);
			getBullets().push_back(std::move(b));

		}

		// Check if its a Chubby enemy
		else if (getEnemyType() == Enemy::EnemyType::CHUBBY)
		{
			// Retrieve 3 bullets and defines a start position for the bullet.
			std::list<std::unique_ptr<Bullet>> bat = getBulletFactory().requestBatch(3, Bullet::Type::standardShot);
			int startX = (this->sprite->getPosition().x) - (this->sprite->getGlobalBounds().width / 2) + 10;

			// Iterate through the bullet request , set properties and push back to bullet list
			for (auto& i : bat)
			{
				std::unique_ptr<Bullet> bs = std::move(i);
				bs->setOwner(this->getType());
				bs->sprite->setPosition(startX, this->sprite->getPosition().y - 10);
				getBullets().push_back(std::move(bs));
				startX += this->sprite->getGlobalBounds().width / 4;
			}

		}

		// Check if its a BOSS enemy
		else if (getEnemyType() == Enemy::EnemyType::BOSS)
		{

			// Gets a bullet and set the appropriate data, then push to the bulletlist
			std::list<std::unique_ptr<Bullet>> bat = getBulletFactory().requestBatch(10, Bullet::Type::standardShot);
			int startX = (this->sprite->getPosition().x) - (this->sprite->getGlobalBounds().width / 2);

			// Iterate through the bullet request , set properties and push back to bullet list
			for (auto& i : bat)
			{
				std::unique_ptr<Bullet> bs = std::move(i);
				bs->setOwner(this->getType());
				bs->sprite->setPosition(startX, this->sprite->getPosition().y - 10);
				getBullets().push_back(std::move(bs));
				startX += this->sprite->getGlobalBounds().width / 10;
			}

		}

		// Check if its a DEATHSTAR enemy
		else if (getEnemyType() == Enemy::EnemyType::DEATHSTAR)
		{

			if (shoot == 3 || shoot == 5) // Special attack
			{
				std::unique_ptr<Bullet> b = getBulletFactory().requestObject(Bullet::Type::standardShot);
				b->setOwner(this->getType());

				// Rotational Lazor (Lol)
				if (shoot == 5)
				{
					secondRot += 0.004f * timeStep.asMilliseconds();
					b->setRotation(secondRot, sf::Vector2f(350.f, 350.0f));
					b->sprite->setFillColor(sf::Color::Red);
					b->sprite->setPosition(this->sprite->getPosition().x, this->sprite->getPosition().y);
				}
				else
				{
					b->setSpeed(sf::Vector2f(0.0f, 350.0f));
					b->sprite->setFillColor(sf::Color::Green);
					b->sprite->setPosition(this->sprite->getPosition().x, this->sprite->getPosition().y + this->sprite->getRadius());
				}
				getBullets().push_back(std::move(b));


			}

			// Circular shoot pattern
			if (shoot == 4)
			{
				for (float i = 0; i < 360; i += 2)
				{
					std::unique_ptr<Bullet> b = getBulletFactory().requestObject(Bullet::Type::standardShot);
					b->setOwner(this->getType());
					b->setRotation(i + secondRot, sf::Vector2f(150, 150));
					b->sprite->setPosition(this->sprite->getPosition().x, this->sprite->getPosition().y);
					getBullets().push_back(std::move(b));

				}

				// randomize 2nd degree rotation
				secondRot++;
			}
		}
	}
}