Select Git revision
GameContext.cpp
-
Leon Niklas Lux authoredLeon Niklas Lux authored
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