Select Git revision
kolloquiums.js
-
Nick Anton Christoph Kleine-Tebbe authoredNick Anton Christoph Kleine-Tebbe authored
EnemyManager.cpp 1.78 KiB
#include "EnemyManager.hpp"
EnemyManager::EnemyManager(b2World *world, BulletManager &bulletManager, TilesheetManager &tilesheetManager,
lvl::Level &level)
: m_world(world), m_bulletManager(bulletManager), m_tilesheetManager(tilesheetManager)
{
}
EnemyManager::~EnemyManager()
{
for (Enemy *enemy : m_enemies)
{
delete enemy;
}
m_enemies.clear();
}
void EnemyManager::addEnemy(const b2Vec2 &position, const std::vector<int32_t> &spriteIDs, int health, int damage)
{
Enemy *newEnemy = new Enemy(m_world, position, b2Vec2(16.0f, 16.0f), 1.0f, m_tilesheetManager.getGameScale(), 1.0f,
m_bulletManager, spriteIDs, health, damage);
m_enemies.emplace_back(newEnemy);
}
void EnemyManager::randomEnemyShoot(const b2Vec2 &playerPosition)
{
if (m_enemies.empty())
{
return;
}
int random = rand() % m_enemies.size(); // get random number between 0 and size of enemies vector
bool successful = m_enemies[random]->shoot(playerPosition, m_bulletManager);
// further logic can be added here
}
void EnemyManager::update(std::vector<b2Body *> enemiesToDestroy)
{
for (b2Body *toBeDeleted : enemiesToDestroy)
{
for (Enemy *enemy : m_enemies)
{
if (enemy->getBody() == toBeDeleted)
{
delete enemy;
m_enemies.erase(std::remove(m_enemies.begin(), m_enemies.end(), enemy), m_enemies.end());
break;
}
}
}
}
void EnemyManager::render(const Camera &camera) const
{
for (Enemy *enemy : m_enemies)
{
enemy->render(m_tilesheetManager, camera);
}
}
void EnemyManager::cleanup()
{
for (Enemy *enemy : m_enemies)
{
delete enemy;
}
m_enemies.clear();
}