Skip to content
Snippets Groups Projects
Select Git revision
  • d0a0fe564e335055d6e81b37c6745c4063ad0b37
  • main default protected
  • dev protected
  • feature/sound
  • v1.0.1
  • v1.0.0
6 results

GameContext.cpp

Blame
  • GameContext.cpp 5.09 KiB
    #include "GameContext.hpp"
    #include "level.hpp"
    #include "room.hpp"
    #include <box2d/b2_math.h>
    #include <unordered_set>
    
    namespace game
    {
    
    GameContext::GameContext(lvl::Level &level, EnemyManager &enemy_manager, BulletManager &bullet_manager,
                             TilesheetManager &tilesheet_manager, ObjectManager &object_manager, Player &player, SDL_Renderer* renderer, Camera &camera)
        : m_level(level), m_bulletManager(bullet_manager), m_enemyManager(enemy_manager), m_objectManager(object_manager),
          m_tilesheetManager(tilesheet_manager), m_current_room(level.getRooms().at(2)),
          m_player(player), m_renderer(renderer), m_camera(camera)
    {
    }
    
    GameContext::~GameContext()
    {
    }
    
    void GameContext::initialize()
    {
        m_tileSize = m_level.getSpritesheet().getTileSize() * m_tilesheetManager.getGameScale();
        this->loadRoom(m_current_room);
    }
    
    void GameContext::changeSzene()
    {
        // SDL Rect for fade out
        SDL_Rect fadeRect = {0, 0, m_camera.getViewportWidth(), m_camera.getViewportHeight()};
        SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_BLEND);
    
         // Fade-Out
        for (int alpha = 0; alpha <= 255; alpha += 15) {
            SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, alpha);
            SDL_RenderFillRect(m_renderer, &fadeRect);
            SDL_RenderPresent(m_renderer);
            SDL_Delay(30);  // Delay for smooth fade-out
        }
    
        float old_room_width = m_current_room.getWidth() * m_tileSize;
        float old_room_height = m_current_room.getHeight() * m_tileSize;
    
        float new_x_pos;
        float new_y_pos;
        //random int between 2 and 4
        int random_next_id = rand() % 2 + 3;
        lvl::Room new_room = m_level.getRooms().at(2);
    
        float new_room_width = new_room.getWidth() * m_tileSize;
        float new_room_height = new_room.getHeight() * m_tileSize;
    
        b2Vec2 player_pos = m_player.getPosition();
        //std::cout << "Player position: " << player_pos.x << " " << player_pos.y << std::endl;
    
        if (player_pos.x < old_room_width / 6)
        {
            //check if there is a door in the left side of the room
    
            new_x_pos = (new_room_width - (new_room_width/7)) / (m_player.getPixelsPerMeterScaled());
            new_y_pos = (new_room_height/2) / (m_player.getPixelsPerMeterScaled());
            m_player.getBody()->SetTransform({new_x_pos, new_y_pos}, 0);
    
            loadRoom(new_room);
    
        } else if (player_pos.x > (old_room_width - (old_room_width / 6)))
        {
            //check if there is a door in the right side of the room