Skip to content
Snippets Groups Projects
Select Git revision
  • 94bd340624dea9d104d1a32009d93d8d61cee772
  • master default protected
2 results

kolloquiums.js

Blame
  • 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();
    }