Skip to content

Commit

Permalink
Scene bug fixed (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
bilalkah authored Dec 18, 2024
1 parent acd69c1 commit 9f2e92d
Show file tree
Hide file tree
Showing 12 changed files with 33 additions and 83 deletions.
2 changes: 1 addition & 1 deletion assets/levels/level2.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{ "type": "soldier", "position": { "x": 8.5, "y": 22.5, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 5.9, "y": 22, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 22.5, "y": 5.5, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 13.5, "y": 2.5, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 13.5, "y": 4.5, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 11.5, "y": 18, "theta": 0 }},
{ "type": "caco_demon", "position": { "x": 18, "y": 6, "theta": 0 }},
{ "type": "cyber_demon", "position": { "x": 13.5, "y": 22.5, "theta": 0 }},
Expand Down
5 changes: 0 additions & 5 deletions src/Core/include/Core/game.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,6 @@ class Game
void Init();
void CheckGameEvent();
void CheckMenuEvent();
void Update();
void Render();
void PrepareEnemies();
void PrepareDynamicObjects();
void PrepareStaticObjects();

std::unique_ptr<IRenderer> renderer_;
std::unique_ptr<Menu> menu_;
Expand Down
78 changes: 13 additions & 65 deletions src/Core/src/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,11 @@ void Game::Init() {

scene_ = SceneLoader::GetInstance().Load("level1.json", player_);
renderer_->SetScene(scene_);
camera_->SetScene(scene_);

camera_->SetPositionPtr(player_->GetPositionPtr());
NavigationManager::GetInstance().SetPositionPtr(player_->GetPositionPtr());
SingleRayCasterService::GetInstance().SetDestinationPtr(
player_->GetPositionPtr());

// PrepareEnemies();
// PrepareDynamicObjects();
// PrepareStaticObjects();
}

void Game::CheckMenuEvent() {
Expand Down Expand Up @@ -155,26 +150,36 @@ void Game::Run() {
TimeManager::GetInstance().CalculateDeltaTime();
scene_->Update(TimeManager::GetInstance().GetDeltaTime());
renderer_->RenderScene();

// Check if player is dead
if (!player_->IsAlive()) {
renderer_result_ =
std::make_unique<RendererResult>(renderer_context_, 10);
}
if (scene_->GetNumberOfAliveEnemies() == 0) {
if (scene_->GetNextScene() != "") {
*scene_ = *SceneLoader::GetInstance().Load(
scene_->GetNextScene(), player_);
[this]() {
static double time_pass = 0;
time_pass += TimeManager::GetInstance().GetDeltaTime();
if (time_pass >= 2.0) {
const auto next = scene_->GetNextScene();
scene_ = SceneLoader::GetInstance().Load(next, player_);
renderer_->SetScene(scene_);
time_pass = 0;
}
}();
}
else {
renderer_result_ =
std::make_unique<RendererResult>(renderer_context_, 11);
}
}

if (renderer_result_) {
[this]() {
static double time_pass = 0;
time_pass += TimeManager::GetInstance().GetDeltaTime();
if (time_pass >= 1.0) {
if (time_pass >= 2.0) {
is_running_ = false;
is_result_ = true;
}
Expand All @@ -197,61 +202,4 @@ void Game::Run() {
}
}

void Game::PrepareEnemies() {
auto caco_demon = EnemyFactory::CreateEnemy(
"caco_demon",
CharacterConfig(Position2D({13.5, 2.5}, 1.50), 0.8, 0.4, 0.4, 0.8));

auto soldier = EnemyFactory::CreateEnemy(
"soldier",
CharacterConfig(Position2D({9, 7}, 1.50), 0.8, 0.4, 0.3, 0.6));

auto soldier_2 = EnemyFactory::CreateEnemy(
"soldier",
CharacterConfig(Position2D({9, 8}, 1.50), 0.8, 0.4, 0.3, 0.6));

auto cyber_demon = EnemyFactory::CreateEnemy(
"cyber_demon",
CharacterConfig(Position2D({23.0, 4}, 1.50), 0.8, 0.4, 0.5, 1.0));

auto cyber_demon_2 = EnemyFactory::CreateEnemy(
"cyber_demon",
CharacterConfig(Position2D({20.0, 4}, 1.50), 0.8, 0.4, 0.5, 1.0));

scene_->AddObject(caco_demon);
scene_->AddObject(soldier);
scene_->AddObject(soldier_2);
scene_->AddObject(cyber_demon);
scene_->AddObject(cyber_demon_2);
}

void Game::PrepareDynamicObjects() {
const auto animation_green_light = LoopedAnimation(
TextureManager::GetInstance().GetTextureCollection("green_light"), 0.1);
const auto animation_red_light = LoopedAnimation(
TextureManager::GetInstance().GetTextureCollection("red_light"), 0.1);

scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(12.1, 8.15),
std::make_unique<LoopedAnimation>(animation_red_light), 0.2, 0.9));
scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(10.9, 8.15),
std::make_unique<LoopedAnimation>(animation_red_light), 0.2, 0.9));

scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(9.9, 10.9),
std::make_unique<LoopedAnimation>(animation_green_light), 0.2, 0.9));
scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(9.9, 13.10),
std::make_unique<LoopedAnimation>(animation_green_light), 0.2, 0.9));
scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(12.1, 13.1),
std::make_unique<LoopedAnimation>(animation_green_light), 0.2, 0.9));
scene_->AddObject(std::make_shared<DynamicObject>(
vector2d(12.1, 10.9),
std::make_unique<LoopedAnimation>(animation_green_light), 0.2, 0.9));
}

void Game::PrepareStaticObjects() {}

} // namespace wolfenstein
3 changes: 2 additions & 1 deletion src/Core/src/scene_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ std::shared_ptr<Scene> SceneLoader::Load(std::string json_path,
PrepareDynamicObjects(*scene, level_data["dynamicObjects"]);
PrepareStaticObjects(*scene, level_data["staticObjects"]);

InitManagers(scene);
scene->SetNextScene(level_data["next_level"].get<std::string>());
InitManagers(scene);
TimeManager::GetInstance().InitClock();
return scene;
}
Expand All @@ -73,6 +73,7 @@ void SceneLoader::PreparePlayer(Scene& scene, nlohmann::json& player_data,
Position2D({player_data["position"]["x"].get<double>(),
player_data["position"]["y"].get<double>()},
player_data["position"]["theta"].get<double>()));
player->IncreaseHealth(100);
scene.SetPlayer(player);
}

Expand Down
4 changes: 2 additions & 2 deletions src/Graphics/include/Graphics/renderer_3d.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ class Renderer3D : public IRenderer
private:
void RenderBackground();
void RenderWalls(RenderQueue& render_queue);
void RenderIfRayHit(const int horizontal_slice, const Ray& ray,
void RenderIfRayHit(const int& horizontal_slice, const Ray& ray,
RenderQueue& render_queue);
void RenderIfRayHitNot(const int horizontal_slice,
void RenderIfRayHitNot(const int& horizontal_slice,
RenderQueue& render_queue);
void RenderObjects(RenderQueue& render_queue);
int CalculateHorizontalSlice(const double& angle);
Expand Down
1 change: 1 addition & 0 deletions src/Graphics/include/Graphics/renderer_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class RendererContext
SDL_Window* GetWindow() const;
RenderConfig GetConfig() const;
const Camera2D& GetCamera() const;
Camera2D& GetCamera();

private:
SDL_Renderer* renderer_;
Expand Down
10 changes: 5 additions & 5 deletions src/Graphics/src/renderer_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ void Renderer3D::RenderWalls(RenderQueue& render_queue) {
};
}

void Renderer3D::RenderIfRayHit(const int horizontal_slice, const Ray& ray,
void Renderer3D::RenderIfRayHit(const int& horizontal_slice, const Ray& ray,
RenderQueue& render_queue) {
const auto& camera_ptr = context_->GetCamera();
const auto distance = ray.perpendicular_distance *
Expand All @@ -69,7 +69,7 @@ void Renderer3D::RenderIfRayHit(const int horizontal_slice, const Ray& ray,
render_queue.push({ray.wall_id, src_rect, dest_rect, distance});
}

void Renderer3D::RenderIfRayHitNot(const int horizontal_slice,
void Renderer3D::RenderIfRayHitNot(const int& horizontal_slice,
RenderQueue& render_queue) {
const auto config_ = context_->GetConfig();
const auto [line_height, draw_start, draw_end] =
Expand Down Expand Up @@ -249,12 +249,12 @@ void Renderer3D::RenderHUD() {
std::cerr << "Failed to create texture: " << SDL_GetError()
<< std::endl;
}
SDL_FreeSurface(
textSurface); // Free the surface after creating the texture

SDL_Rect rect = {0, 0, textSurface->w,
textSurface->h}; // Position and size
SDL_RenderCopy(context_->GetRenderer(), textTexture, nullptr, &rect);

SDL_FreeSurface(
textSurface); // Free the surface after creating the texture
SDL_DestroyTexture(textTexture);

// Ammo Bottom Right
Expand Down
5 changes: 5 additions & 0 deletions src/Graphics/src/renderer_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ const Camera2D& RendererContext::GetCamera() const {
return camera_ptr;
}

Camera2D& RendererContext::GetCamera() {
return camera_ptr;
}

IRenderer::IRenderer(std::shared_ptr<RendererContext> context)
: context_(context) {}

Expand All @@ -83,6 +87,7 @@ void IRenderer::ClearScreen() {

void IRenderer::SetScene(const std::shared_ptr<Scene>& scene_ptr) {
scene_ = scene_ptr;
context_->GetCamera().SetScene(scene_ptr);
}

std::shared_ptr<RendererContext> IRenderer::GetContext() const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class NavigationManager
NavigationManager& operator=(const NavigationManager&) = delete;
~NavigationManager();

void InitManager(std::shared_ptr<Scene> scene);
void InitManager(const std::shared_ptr<Scene>& scene);
vector2d FindPath(Position2D start, Position2D end, std::string id);
vector2d FindPathToPlayer(Position2D start, std::string id);
std::vector<vector2d> GetPath(std::string id);
Expand Down
2 changes: 1 addition & 1 deletion src/NavigationManager/src/navigation_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ NavigationManager::~NavigationManager() {
delete instance_;
}

void NavigationManager::InitManager(std::shared_ptr<Scene> scene) {
void NavigationManager::InitManager(const std::shared_ptr<Scene>& scene) {
scene_ = scene;
if (initialized_) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class ShootingManager
ShootingManager& operator=(const ShootingManager&) = delete;
~ShootingManager();

void InitManager(std::shared_ptr<Scene> scene);
void InitManager(const std::shared_ptr<Scene>& scene);
void PlayerShoot(const Weapon& weapon);
void EnemyShoot(const SimpleWeapon& weapon);

Expand Down
2 changes: 1 addition & 1 deletion src/ShootingManager/src/shooting_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ShootingManager::~ShootingManager() {
delete instance_;
}

void ShootingManager::InitManager(std::shared_ptr<Scene> scene) {
void ShootingManager::InitManager(const std::shared_ptr<Scene>& scene) {
scene_ = scene;
}

Expand Down

0 comments on commit 9f2e92d

Please sign in to comment.