From 69157ba38a5fee849d2069d78052a6fcd948f82a Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:31:15 -0400 Subject: [PATCH 01/13] Create code to render Player --- Array-Jumper/header/Player/PlayerModel.h | 26 ++++++++++ Array-Jumper/header/Player/PlayerView.h | 35 ++++++++++++++ Array-Jumper/source/Player/PlayerModel.cpp | 22 +++++++++ Array-Jumper/source/Player/PlayerView.cpp | 55 ++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 Array-Jumper/header/Player/PlayerModel.h create mode 100644 Array-Jumper/header/Player/PlayerView.h create mode 100644 Array-Jumper/source/Player/PlayerModel.cpp create mode 100644 Array-Jumper/source/Player/PlayerView.cpp diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h new file mode 100644 index 00000000..43014b1b --- /dev/null +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -0,0 +1,26 @@ +#pragma once +namespace Player +{ + enum class PlayerState + { + ALIVE, + DEAD + }; + + class PlayerModel + { + public: + + int getPosition(); + void setPosition(int player_position); + + PlayerState getPlayerState(); + void setPlayerState(PlayerState state); + private: + int current_position; + PlayerState player_state; + + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h new file mode 100644 index 00000000..83a2539c --- /dev/null +++ b/Array-Jumper/header/Player/PlayerView.h @@ -0,0 +1,35 @@ +#pragma once +#include "../../header/UI/UIElement/ImageView.h" + +namespace Player +{ + class PlayerView + { + public: + PlayerView(); + ~PlayerView(); + + void initialize(); + void update(); + void render(); + + + private: + UI::UIElement::ImageView* player_image; + sf::RenderWindow* game_window; + + float player_height; + float player_width; + + void initializePlayerImage(); + void drawPlayer(); + void loadImage(); + void calculatePlayerDimension(); + void updatePlayerPosition(); + + sf::Vector2f calculatePlayerPosition(); + + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp new file mode 100644 index 00000000..2e346512 --- /dev/null +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -0,0 +1,22 @@ +#include "../../header/Player/PlayerModel.h" + + +namespace Player { + + int PlayerModel::getPosition() + { + return current_position; + } + void PlayerModel::setPosition(int player_position) + { + current_position = player_position; + } + PlayerState PlayerModel::getPlayerState() + { + return player_state; + } + void PlayerModel::setPlayerState(PlayerState state) + { + player_state = state; + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp new file mode 100644 index 00000000..a3b8435a --- /dev/null +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -0,0 +1,55 @@ +#include "../../header/Player/PlayerView.h" +#include "../../header/Global/Config.h" +#include "../../header/Global/ServiceLocator.h" +namespace Player +{ + using namespace Global; + + Player::PlayerView::PlayerView() + { + game_window = nullptr; + player_image = new UI::UIElement::ImageView(); + } + PlayerView::~PlayerView() + { + } + void PlayerView::initialize() + { + game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + loadImage(); + } + void PlayerView::update() + { + updatePlayerPosition(); + } + void PlayerView::render() + { + drawPlayer(); + } + void PlayerView::initializePlayerImage() + { + player_image->initialize(Config::character_texture_path, player_width, player_height, sf::Vector2f(0, 0)); + } + void PlayerView::drawPlayer() + { + player_image->render(); + } + void PlayerView::loadImage() + { + calculatePlayerDimension(); + initializePlayerImage(); + } + void PlayerView::calculatePlayerDimension() + { + player_width = 1000.f; + player_height = 1000.f; + } + void PlayerView::updatePlayerPosition() + { + player_image->setPosition(calculatePlayerPosition()); + } + sf::Vector2f PlayerView::calculatePlayerPosition() + { + return sf::Vector2f(0,0); + } +} \ No newline at end of file From e14f0c446da3edd0768ff6d1e006814b217545bb Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:06:21 -0400 Subject: [PATCH 02/13] Draw the Player on Screen --- Array-Jumper/Array-Jumper.vcxproj | 8 ++++ Array-Jumper/Array-Jumper.vcxproj.filters | 8 ++++ Array-Jumper/header/Global/ServiceLocator.h | 3 ++ Array-Jumper/header/Player/PlayerController.h | 27 +++++++++++++ Array-Jumper/header/Player/PlayerService.h | 20 ++++++++++ Array-Jumper/header/Player/PlayerView.h | 5 ++- Array-Jumper/source/Global/ServiceLocator.cpp | 19 +++++++++ .../source/Player/PlayerController.cpp | 39 +++++++++++++++++++ Array-Jumper/source/Player/PlayerService.cpp | 25 ++++++++++++ Array-Jumper/source/Player/PlayerView.cpp | 13 ++++++- .../UI/MainMenu/MainMenuUIController.cpp | 1 + 11 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 Array-Jumper/header/Player/PlayerController.h create mode 100644 Array-Jumper/header/Player/PlayerService.h create mode 100644 Array-Jumper/source/Player/PlayerController.cpp create mode 100644 Array-Jumper/source/Player/PlayerService.cpp diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 658ea835..58d93879 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -137,6 +137,10 @@ + + + + @@ -154,6 +158,10 @@ + + + + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index dff4a580..2db32309 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -44,6 +44,10 @@ + + + + @@ -74,6 +78,10 @@ + + + + diff --git a/Array-Jumper/header/Global/ServiceLocator.h b/Array-Jumper/header/Global/ServiceLocator.h index 7e9ef35a..f3e053a6 100644 --- a/Array-Jumper/header/Global/ServiceLocator.h +++ b/Array-Jumper/header/Global/ServiceLocator.h @@ -3,6 +3,7 @@ #include "../../header/Event/EventService.h" #include "../../header/UI/UIService.h" #include "../../header/Sound/SoundService.h" +#include "../../header/Player/PlayerService.h" namespace Global { @@ -13,6 +14,7 @@ namespace Global Event::EventService* event_service; Sound::SoundService* sound_service; UI::UIService* ui_service; + Player::PlayerService* player_service; ~ServiceLocator(); @@ -31,5 +33,6 @@ namespace Global Event::EventService* getEventService(); Sound::SoundService* getSoundService(); UI::UIService* getUIService(); + Player::PlayerService* getPlayerService(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h new file mode 100644 index 00000000..ad0e03bc --- /dev/null +++ b/Array-Jumper/header/Player/PlayerController.h @@ -0,0 +1,27 @@ +#pragma once +namespace Player +{ + class PlayerModel; + class PlayerView; + enum class PlayerState; + + class PlayerController + { + public: + PlayerController(); + ~ PlayerController(); + + void initialize(); + void update(); + void render(); + + PlayerState getPlayerState(); + void setPlayerState(PlayerState state); + + private: + PlayerModel* player_model; + PlayerView* player_view; + + + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h new file mode 100644 index 00000000..acaaecde --- /dev/null +++ b/Array-Jumper/header/Player/PlayerService.h @@ -0,0 +1,20 @@ +#pragma once +namespace Player +{ + class PlayerController; + class PlayerService + { + public: + PlayerService(); + ~PlayerService(); + + void initialize(); + void update(); + void render(); + + private: + PlayerController* player_conroller; + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h index 83a2539c..5b55b3ef 100644 --- a/Array-Jumper/header/Player/PlayerView.h +++ b/Array-Jumper/header/Player/PlayerView.h @@ -3,10 +3,11 @@ namespace Player { + class PlayerController; class PlayerView { public: - PlayerView(); + PlayerView(PlayerController* controller); ~PlayerView(); void initialize(); @@ -18,6 +19,8 @@ namespace Player UI::UIElement::ImageView* player_image; sf::RenderWindow* game_window; + PlayerController* player_controller; + float player_height; float player_width; diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 5aa28494..42acd7ba 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -9,6 +9,7 @@ namespace Global using namespace Sound; using namespace UI; using namespace Main; + using namespace Player; ServiceLocator::ServiceLocator() { @@ -16,6 +17,7 @@ namespace Global event_service = nullptr; sound_service = nullptr; ui_service = nullptr; + player_service = nullptr; createServices(); } @@ -28,6 +30,7 @@ namespace Global event_service = new EventService(); sound_service = new SoundService(); ui_service = new UIService(); + player_service = new PlayerService(); } void ServiceLocator::initialize() @@ -36,6 +39,7 @@ namespace Global event_service->initialize(); sound_service->initialize(); ui_service->initialize(); + player_service->initialize(); } void ServiceLocator::update() @@ -43,12 +47,22 @@ namespace Global graphic_service->update(); event_service->update(); ui_service->update(); + if (GameService::getGameState() == GameState::GAMEPLAY) + { + player_service->render(); + + } } void ServiceLocator::render() { graphic_service->render(); ui_service->render(); + if (GameService::getGameState() == GameState::GAMEPLAY) + { + player_service->render(); + + } } void ServiceLocator::clearAllServices() @@ -57,6 +71,7 @@ namespace Global delete(event_service); delete(sound_service); delete(ui_service); + delete(player_service); } ServiceLocator* ServiceLocator::getInstance() @@ -72,4 +87,8 @@ namespace Global SoundService* ServiceLocator::getSoundService() { return sound_service; } UIService* ServiceLocator::getUIService() { return ui_service; } + Player::PlayerService* ServiceLocator::getPlayerService() + { + return player_service; + } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp new file mode 100644 index 00000000..7681c4d8 --- /dev/null +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -0,0 +1,39 @@ +#include "../../header/Player/PlayerController.h" +#include "../../header/Player/PlayerModel.h" +#include "../../header/Player/PlayerView.h" + +namespace Player +{ + Player::PlayerController::PlayerController() + { + player_model = new PlayerModel(); + player_view = new PlayerView(this); + } + Player::PlayerController::~PlayerController() + { + delete(player_model); + delete(player_view); + } + void PlayerController::initialize() + { + player_view->initialize(); + + } + void PlayerController::update() + { + player_view->update(); + + } + void PlayerController::render() + { + player_view->render(); + } + PlayerState PlayerController::getPlayerState() + { + return player_model->getPlayerState(); + } + void PlayerController::setPlayerState(PlayerState state) + { + player_model->setPlayerState(state); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp new file mode 100644 index 00000000..aee3bc68 --- /dev/null +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -0,0 +1,25 @@ +#include "../../header/Player/PlayerService.h" +#include "../../header/Player/PlayerController.h" +namespace Player +{ + Player::PlayerService::PlayerService() + { + player_conroller = new PlayerController(); + } + PlayerService::~PlayerService() + { + delete(player_conroller); + } + void PlayerService::initialize() + { + player_conroller->initialize(); + } + void PlayerService::update() + { + player_conroller->update(); + } + void PlayerService::render() + { + player_conroller->render(); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index a3b8435a..70e6acea 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -1,12 +1,15 @@ #include "../../header/Player/PlayerView.h" #include "../../header/Global/Config.h" #include "../../header/Global/ServiceLocator.h" +#include "../../header/Player/PlayerController.h" +#include "../../header/Player/PlayerModel.h" namespace Player { using namespace Global; - Player::PlayerView::PlayerView() + Player::PlayerView::PlayerView(PlayerController* controller) { + player_controller = controller; game_window = nullptr; player_image = new UI::UIElement::ImageView(); } @@ -24,7 +27,13 @@ namespace Player } void PlayerView::render() { - drawPlayer(); + switch (player_controller->getPlayerState()) + { + case PlayerState::ALIVE: + drawPlayer(); + default: + break; + } } void PlayerView::initializePlayerImage() { diff --git a/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp index b3c74893..7a572427 100644 --- a/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp +++ b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp @@ -75,6 +75,7 @@ namespace UI void MainMenuUIController::playButtonCallback() { ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::BUTTON_CLICK); + GameService::setGameState(GameState::GAMEPLAY); } void MainMenuUIController::instructionsButtonCallback() From f1d48e6462e9b1b3d7cf003a4991969096c93ce2 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:43:00 -0400 Subject: [PATCH 03/13] Draw Background Image --- Array-Jumper/Array-Jumper.vcxproj | 8 +++ Array-Jumper/Array-Jumper.vcxproj.filters | 8 +++ Array-Jumper/header/Global/ServiceLocator.h | 3 ++ Array-Jumper/header/Level/LevelController.h | 20 +++++++ Array-Jumper/header/Level/LevelModel.h | 15 ++++++ Array-Jumper/header/Level/LevelService.h | 19 +++++++ Array-Jumper/header/Level/LevelView.h | 35 ++++++++++++ Array-Jumper/source/Global/ServiceLocator.cpp | 14 ++++- Array-Jumper/source/Level/LevelController.cpp | 29 ++++++++++ Array-Jumper/source/Level/LevelModel.cpp | 10 ++++ Array-Jumper/source/Level/LevelService.cpp | 25 +++++++++ Array-Jumper/source/Level/LevelView.cpp | 53 +++++++++++++++++++ 12 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 Array-Jumper/header/Level/LevelController.h create mode 100644 Array-Jumper/header/Level/LevelModel.h create mode 100644 Array-Jumper/header/Level/LevelService.h create mode 100644 Array-Jumper/header/Level/LevelView.h create mode 100644 Array-Jumper/source/Level/LevelController.cpp create mode 100644 Array-Jumper/source/Level/LevelModel.cpp create mode 100644 Array-Jumper/source/Level/LevelService.cpp create mode 100644 Array-Jumper/source/Level/LevelView.cpp diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 58d93879..652afe6b 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -137,6 +137,10 @@ + + + + @@ -158,6 +162,10 @@ + + + + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index 2db32309..7c648ee9 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -48,6 +48,10 @@ + + + + @@ -82,6 +86,10 @@ + + + + diff --git a/Array-Jumper/header/Global/ServiceLocator.h b/Array-Jumper/header/Global/ServiceLocator.h index f3e053a6..118cb896 100644 --- a/Array-Jumper/header/Global/ServiceLocator.h +++ b/Array-Jumper/header/Global/ServiceLocator.h @@ -4,6 +4,7 @@ #include "../../header/UI/UIService.h" #include "../../header/Sound/SoundService.h" #include "../../header/Player/PlayerService.h" +#include "../../header/Level/LevelService.h" namespace Global { @@ -15,6 +16,7 @@ namespace Global Sound::SoundService* sound_service; UI::UIService* ui_service; Player::PlayerService* player_service; + Level::LevelService* level_service; ~ServiceLocator(); @@ -34,5 +36,6 @@ namespace Global Sound::SoundService* getSoundService(); UI::UIService* getUIService(); Player::PlayerService* getPlayerService(); + Level::LevelService* getLevelService(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h new file mode 100644 index 00000000..698c391f --- /dev/null +++ b/Array-Jumper/header/Level/LevelController.h @@ -0,0 +1,20 @@ +#pragma once +namespace Level +{ + class LevelModel; + class LevelView; + class LevelController + { + public: + LevelController(); + ~LevelController(); + + void initialize(); + void update(); + void render(); + + private: + LevelModel* level_model; + LevelView* level_view; + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h new file mode 100644 index 00000000..6f914585 --- /dev/null +++ b/Array-Jumper/header/Level/LevelModel.h @@ -0,0 +1,15 @@ +#pragma once +namespace Level +{ + class LevelModel + { + public: + LevelModel(); + ~LevelModel(); + + private: + + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h new file mode 100644 index 00000000..319b8fbe --- /dev/null +++ b/Array-Jumper/header/Level/LevelService.h @@ -0,0 +1,19 @@ +#pragma once +namespace Level +{ + class LevelController; + class LevelService + { + public: + LevelService(); + ~LevelService(); + + void initialize(); + void update(); + void render(); + + private: + LevelController* level_controller; + }; + +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h new file mode 100644 index 00000000..7562cba1 --- /dev/null +++ b/Array-Jumper/header/Level/LevelView.h @@ -0,0 +1,35 @@ +#pragma once +#include "../../header/UI/UIElement/ImageView.h" +namespace Level +{ + class LevelController; + class LevelView + { + public: + LevelView(LevelController* controller); + ~LevelView(); + + void initilaize(); + void update(); + void render(); + + + + + + + private: + LevelController* level_controller; + UI::UIElement::ImageView* background_image; + sf::RenderWindow* game_window; + + const float background_alpha = 110.f; + + void createImage(); + void initilizeImage(); + void updateImage(); + void drawImage(); + void deleteImage(); + }; + +} \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 42acd7ba..0ff20b89 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -10,6 +10,7 @@ namespace Global using namespace UI; using namespace Main; using namespace Player; + using namespace Level; ServiceLocator::ServiceLocator() { @@ -17,6 +18,7 @@ namespace Global event_service = nullptr; sound_service = nullptr; ui_service = nullptr; + level_service = nullptr; player_service = nullptr; createServices(); @@ -30,6 +32,7 @@ namespace Global event_service = new EventService(); sound_service = new SoundService(); ui_service = new UIService(); + level_service = new LevelService(); player_service = new PlayerService(); } @@ -39,6 +42,7 @@ namespace Global event_service->initialize(); sound_service->initialize(); ui_service->initialize(); + level_service->initialize(); player_service->initialize(); } @@ -49,7 +53,8 @@ namespace Global ui_service->update(); if (GameService::getGameState() == GameState::GAMEPLAY) { - player_service->render(); + level_service->update(); + player_service->update(); } } @@ -60,6 +65,7 @@ namespace Global ui_service->render(); if (GameService::getGameState() == GameState::GAMEPLAY) { + level_service->render(); player_service->render(); } @@ -71,6 +77,7 @@ namespace Global delete(event_service); delete(sound_service); delete(ui_service); + delete(level_service); delete(player_service); } @@ -87,8 +94,13 @@ namespace Global SoundService* ServiceLocator::getSoundService() { return sound_service; } UIService* ServiceLocator::getUIService() { return ui_service; } + Level::LevelService* ServiceLocator::getLevelService() + { + return level_service; + } Player::PlayerService* ServiceLocator::getPlayerService() { return player_service; } + } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp new file mode 100644 index 00000000..9f019c47 --- /dev/null +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -0,0 +1,29 @@ +#include "../../header/Level/LevelController.h" +#include "../../header/Level/LevelModel.h" +#include "../../header/Level/LevelView.h" +namespace Level +{ + Level::LevelController::LevelController() + { + level_model = new LevelModel(); + level_view = new LevelView(this); + } + LevelController::~LevelController() + { + delete(level_model); + delete(level_view); + + } + void LevelController::initialize() + { + level_view->initilaize(); + } + void LevelController::update() + { + level_view->update(); + } + void LevelController::render() + { + level_view->render(); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp new file mode 100644 index 00000000..ac85569b --- /dev/null +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -0,0 +1,10 @@ +#include "../../header/Level/LevelModel.h" +namespace Level +{ + Level::LevelModel::LevelModel() + { + } + LevelModel::~LevelModel() + { + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp new file mode 100644 index 00000000..9dfada3c --- /dev/null +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -0,0 +1,25 @@ +#include "../../header/Level/LevelService.h" +#include "../../header/Level/LevelController.h" +namespace Level +{ + Level::LevelService::LevelService() + { + level_controller = new LevelController(); + } + LevelService::~LevelService() + { + delete(level_controller); + } + void LevelService::initialize() + { + level_controller->initialize(); + } + void LevelService::update() + { + level_controller->update(); + } + void LevelService::render() + { + level_controller->render(); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp new file mode 100644 index 00000000..4530819a --- /dev/null +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -0,0 +1,53 @@ +#include "../../header/Level/LevelView.h" +#include "../../header/Level/LevelController.h" +#include "../../header/Global/Config.h" +#include "../../header/Global/ServiceLocator.h" +namespace Level +{ + using namespace Global; + + Level::LevelView::LevelView(LevelController* controller) + { + level_controller = controller; + game_window = nullptr; + createImage(); + } + LevelView::~LevelView() + { + deleteImage(); + } + void LevelView::initilaize() + { + game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + initilizeImage(); + } + void LevelView::update() + { + updateImage(); + } + void LevelView::render() + { + drawImage(); + } + void LevelView::createImage() + { + background_image = new UI::UIElement::ImageView(); + } + void LevelView::initilizeImage() + { + background_image->initialize(Config::array_jumper_bg_texture_path, game_window->getSize().x, game_window->getSize().y, sf::Vector2f(0, 0)); + background_image->setImageAlpha(background_alpha); + } + void LevelView::updateImage() + { + background_image->update(); + } + void LevelView::drawImage() + { + background_image->render(); + } + void LevelView::deleteImage() + { + delete(background_image); + } +} \ No newline at end of file From 2479dbe28c24df82d9406bcabb0322e1e671afa0 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:00:37 -0400 Subject: [PATCH 04/13] Create Data for Level --- Array-Jumper/Array-Jumper.vcxproj | 4 ++- Array-Jumper/Array-Jumper.vcxproj.filters | 1 + Array-Jumper/header/Level/BlockType.h | 11 ++++++++ Array-Jumper/header/Level/LevelController.h | 3 +++ Array-Jumper/header/Level/LevelData.h | 26 +++++++++++++++++++ Array-Jumper/header/Level/LevelModel.h | 16 +++++++++++- Array-Jumper/source/Level/LevelController.cpp | 4 +++ Array-Jumper/source/Level/LevelModel.cpp | 5 ++++ 8 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 Array-Jumper/header/Level/BlockType.h create mode 100644 Array-Jumper/header/Level/LevelData.h diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 652afe6b..ada9f8bf 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -1,4 +1,4 @@ - + @@ -162,7 +162,9 @@ + + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index 7c648ee9..3d6e2cc0 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -90,6 +90,7 @@ + diff --git a/Array-Jumper/header/Level/BlockType.h b/Array-Jumper/header/Level/BlockType.h new file mode 100644 index 00000000..8f7e9db6 --- /dev/null +++ b/Array-Jumper/header/Level/BlockType.h @@ -0,0 +1,11 @@ +#pragma once + +enum class BlockType +{ + OBSTACLE_ONE = -1, + OBSTACLE_TWO = -2, + TARGET = 0, + ONE = 1, + TWO = 2, + THREE = 3, +}; \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index 698c391f..54ce9d23 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -1,4 +1,5 @@ #pragma once +#include "BlockType.h" namespace Level { class LevelModel; @@ -13,6 +14,8 @@ namespace Level void update(); void render(); + BlockType getCurrentBoxValue(int currentPosion); + private: LevelModel* level_model; LevelView* level_view; diff --git a/Array-Jumper/header/Level/LevelData.h b/Array-Jumper/header/Level/LevelData.h new file mode 100644 index 00000000..1f33d8a7 --- /dev/null +++ b/Array-Jumper/header/Level/LevelData.h @@ -0,0 +1,26 @@ +#pragma once +#include "../../header/Level/BlockType.h" + +namespace Level +{ + struct LevelData + { + static const int number_of_box = 10; + BlockType level_boxes[number_of_box] = { + BlockType::ONE, + BlockType::TWO, + BlockType::OBSTACLE_ONE, + BlockType::TWO, + BlockType::THREE, + BlockType::ONE, + BlockType::OBSTACLE_TWO, + BlockType::TWO, + BlockType::ONE, + BlockType::TARGET + }; + + + + }; +} + diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index 6f914585..512e8aaf 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -1,14 +1,28 @@ #pragma once +#include "../../header/Level/LevelData.h" namespace Level { + struct BoxDimension + { + float box_width; + float box_height; + + float box_spacing; + + float box_spacing_percentage = 0.3f; + float bottom_offset = 200.f; + + }; class LevelModel { public: LevelModel(); ~LevelModel(); - private: + BlockType getCurrentBoxValue(int currentPosion); + private: + LevelData current_level_data; }; diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp index 9f019c47..effd5ed7 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -26,4 +26,8 @@ namespace Level { level_view->render(); } + BlockType LevelController::getCurrentBoxValue(int currentPosion) + { + return level_model->getCurrentBoxValue(currentPosion); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp index ac85569b..9f317616 100644 --- a/Array-Jumper/source/Level/LevelModel.cpp +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -1,4 +1,5 @@ #include "../../header/Level/LevelModel.h" + namespace Level { Level::LevelModel::LevelModel() @@ -7,4 +8,8 @@ namespace Level LevelModel::~LevelModel() { } + BlockType LevelModel::getCurrentBoxValue(int currentPosion) + { + return current_level_data.level_boxes[currentPosion]; + } } \ No newline at end of file From 85d1b9358733bdbbc7365cb9f5a2f465c333515f Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:30:22 -0400 Subject: [PATCH 05/13] Draw a Box with Overlay --- Array-Jumper/header/Level/LevelModel.h | 4 +- Array-Jumper/header/Level/LevelView.h | 18 ++++- Array-Jumper/source/Global/ServiceLocator.cpp | 6 +- Array-Jumper/source/Level/LevelView.cpp | 80 ++++++++++++++++++- 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index 512e8aaf..393a3b97 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -4,8 +4,8 @@ namespace Level { struct BoxDimension { - float box_width; - float box_height; + float box_width = 300.f; + float box_height = 300.f; float box_spacing; diff --git a/Array-Jumper/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h index 7562cba1..3a9f3532 100644 --- a/Array-Jumper/header/Level/LevelView.h +++ b/Array-Jumper/header/Level/LevelView.h @@ -1,5 +1,6 @@ #pragma once #include "../../header/UI/UIElement/ImageView.h" +#include "LevelModel.h" namespace Level { class LevelController; @@ -13,18 +14,31 @@ namespace Level void update(); void render(); - - + void calcuateBoxDimension(); + UI::UIElement::ImageView* getBoxImage(BlockType type); + + void drawBox(sf::Vector2f position); + void drawBoxValue(sf::Vector2f position, BlockType type); private: LevelController* level_controller; UI::UIElement::ImageView* background_image; + UI::UIElement::ImageView* box_image; sf::RenderWindow* game_window; const float background_alpha = 110.f; + BoxDimension box_dimension; + + UI::UIElement::ImageView* target_overlay_image; + UI::UIElement::ImageView* letter_one_overlay_image; + UI::UIElement::ImageView* letter_two_overlay_image; + UI::UIElement::ImageView* letter_three_overlay_image; + UI::UIElement::ImageView* obstacle_one_overlay_image; + UI::UIElement::ImageView* obstacle_two_overlay_image; + void createImage(); void initilizeImage(); void updateImage(); diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 0ff20b89..9f1e2f57 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -43,7 +43,7 @@ namespace Global sound_service->initialize(); ui_service->initialize(); level_service->initialize(); - player_service->initialize(); + //player_service->initialize(); } void ServiceLocator::update() @@ -54,7 +54,7 @@ namespace Global if (GameService::getGameState() == GameState::GAMEPLAY) { level_service->update(); - player_service->update(); + //player_service->update(); } } @@ -66,7 +66,7 @@ namespace Global if (GameService::getGameState() == GameState::GAMEPLAY) { level_service->render(); - player_service->render(); + //player_service->render(); } } diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp index 4530819a..5ac6c5aa 100644 --- a/Array-Jumper/source/Level/LevelView.cpp +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -5,6 +5,7 @@ namespace Level { using namespace Global; + using namespace UI::UIElement; Level::LevelView::LevelView(LevelController* controller) { @@ -29,25 +30,102 @@ namespace Level { drawImage(); } + void LevelView::calcuateBoxDimension() + { + if (!game_window) return; + + box_dimension.box_width = 300.f; + box_dimension.box_height = 300.f; + } + ImageView* LevelView::getBoxImage(BlockType type) + { + switch (type) + { + case BlockType::OBSTACLE_ONE: + return obstacle_one_overlay_image; + break; + case BlockType::OBSTACLE_TWO: + return obstacle_two_overlay_image; + break; + case BlockType::TARGET: + return target_overlay_image; + break; + case BlockType::ONE: + return letter_one_overlay_image; + break; + case BlockType::TWO: + return letter_two_overlay_image; + break; + case BlockType::THREE: + return letter_three_overlay_image; + break; + } + } + void LevelView::drawBox(sf::Vector2f position) + { + box_image->setPosition(position); + box_image->render(); + } + void LevelView::drawBoxValue(sf::Vector2f position, BlockType type) + { + ImageView* image = getBoxImage(type); + image->setPosition(position); + image->render(); + } void LevelView::createImage() { - background_image = new UI::UIElement::ImageView(); + background_image = new ImageView(); + box_image = new ImageView(); + target_overlay_image = new ImageView(); + letter_one_overlay_image = new ImageView(); + letter_two_overlay_image = new ImageView(); + letter_three_overlay_image = new ImageView(); + obstacle_one_overlay_image = new ImageView(); + obstacle_two_overlay_image = new ImageView(); + + } void LevelView::initilizeImage() { background_image->initialize(Config::array_jumper_bg_texture_path, game_window->getSize().x, game_window->getSize().y, sf::Vector2f(0, 0)); background_image->setImageAlpha(background_alpha); + + box_image->initialize(Config::box_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + //target_overlay_image->initialize(Config::target_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + letter_one_overlay_image->initialize(Config::letter_one_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + letter_two_overlay_image->initialize(Config::letter_two_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + letter_three_overlay_image->initialize(Config::letter_three_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + obstacle_one_overlay_image->initialize(Config::obstacle_01_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); + obstacle_two_overlay_image->initialize(Config::obstacle_02_texture_path, box_dimension.box_width, box_dimension.box_height, sf::Vector2f(0, 0)); } void LevelView::updateImage() { background_image->update(); + box_image->update(); + target_overlay_image->update(); + letter_one_overlay_image->update(); + letter_two_overlay_image->update(); + letter_three_overlay_image->update(); + obstacle_one_overlay_image->update(); + obstacle_two_overlay_image->update(); } void LevelView::drawImage() { background_image->render(); + drawBox(sf::Vector2f(0, 0)); + BlockType blockTypeToDraw = level_controller->getCurrentBoxValue(0); + drawBoxValue(sf::Vector2f(0, 0), blockTypeToDraw); + } void LevelView::deleteImage() { delete(background_image); + delete(box_image); + delete(target_overlay_image); + delete(letter_one_overlay_image); + delete(letter_two_overlay_image); + delete(letter_three_overlay_image); + delete(obstacle_one_overlay_image); + delete(obstacle_two_overlay_image); } } \ No newline at end of file From 81801486b8cc79fd6a5dc05bdd495c6c3f74af74 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:10:26 -0400 Subject: [PATCH 06/13] Draw all boxes using Arrays --- Array-Jumper/header/Level/LevelModel.h | 4 +-- Array-Jumper/header/Level/LevelView.h | 3 ++ Array-Jumper/source/Level/LevelView.cpp | 45 +++++++++++++++++++++---- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index 393a3b97..512e8aaf 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -4,8 +4,8 @@ namespace Level { struct BoxDimension { - float box_width = 300.f; - float box_height = 300.f; + float box_width; + float box_height; float box_spacing; diff --git a/Array-Jumper/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h index 3a9f3532..03aa3fb6 100644 --- a/Array-Jumper/header/Level/LevelView.h +++ b/Array-Jumper/header/Level/LevelView.h @@ -14,7 +14,10 @@ namespace Level void update(); void render(); + void calculateBoxWidthHeightDimension(); + void calculateBoxSpacing(); void calcuateBoxDimension(); + sf::Vector2f calculateBoxPosition(int index); UI::UIElement::ImageView* getBoxImage(BlockType type); void drawBox(sf::Vector2f position); diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp index 5ac6c5aa..393a6a96 100644 --- a/Array-Jumper/source/Level/LevelView.cpp +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -2,6 +2,7 @@ #include "../../header/Level/LevelController.h" #include "../../header/Global/Config.h" #include "../../header/Global/ServiceLocator.h" +#include namespace Level { using namespace Global; @@ -20,6 +21,7 @@ namespace Level void LevelView::initilaize() { game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + calcuateBoxDimension(); initilizeImage(); } void LevelView::update() @@ -30,12 +32,38 @@ namespace Level { drawImage(); } + void LevelView::calculateBoxWidthHeightDimension() + { + float screenWidth = static_cast(game_window->getSize().x); + int numBoxes = LevelData::number_of_box; + + //Each Box has a Gap on it's left, 1 extra gap for last block's right side + int numGaps = numBoxes + 1; + + //Total space consumed by all gaps + float totalSpaceByGaps = box_dimension.box_spacing_percentage * static_cast(numGaps); + + //Total space consumed by boxes and gaps + float totalSpace = numBoxes + totalSpaceByGaps; + + box_dimension.box_width = screenWidth / (totalSpace); + box_dimension.box_height = box_dimension.box_width; + } + void LevelView::calculateBoxSpacing() + { + box_dimension.box_spacing = box_dimension.box_spacing_percentage * box_dimension.box_width; + } void LevelView::calcuateBoxDimension() { if (!game_window) return; - - box_dimension.box_width = 300.f; - box_dimension.box_height = 300.f; + calculateBoxWidthHeightDimension(); + calculateBoxSpacing(); + } + sf::Vector2f LevelView::calculateBoxPosition(int index) + { + float xPosition = box_dimension.box_spacing + static_cast(index) * (box_dimension.box_width + box_dimension.box_spacing); + float yPosition = static_cast(game_window->getSize().y) - box_dimension.box_height - box_dimension.bottom_offset; + return sf::Vector2f(xPosition, yPosition); } ImageView* LevelView::getBoxImage(BlockType type) { @@ -112,9 +140,14 @@ namespace Level void LevelView::drawImage() { background_image->render(); - drawBox(sf::Vector2f(0, 0)); - BlockType blockTypeToDraw = level_controller->getCurrentBoxValue(0); - drawBoxValue(sf::Vector2f(0, 0), blockTypeToDraw); + + for (int i = 0; i < LevelData::number_of_box; i++) + { + sf::Vector2f positon = calculateBoxPosition(i); + BlockType blockTypeToDraw = level_controller->getCurrentBoxValue(i); + drawBox(positon); + drawBoxValue(positon, blockTypeToDraw); + } } void LevelView::deleteImage() From 779165f75c7bd945acc27c85db436c12734a1ab1 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Mon, 4 Nov 2024 22:04:55 -0500 Subject: [PATCH 07/13] Draw player on box --- Array-Jumper/header/Level/LevelController.h | 2 ++ Array-Jumper/header/Level/LevelService.h | 3 +++ Array-Jumper/header/Level/LevelView.h | 2 ++ Array-Jumper/header/Player/PlayerView.h | 5 +++-- Array-Jumper/source/Global/ServiceLocator.cpp | 6 +++--- Array-Jumper/source/Level/LevelController.cpp | 5 ++++- Array-Jumper/source/Level/LevelService.cpp | 5 +++++ Array-Jumper/source/Level/LevelView.cpp | 4 ++++ Array-Jumper/source/Player/PlayerView.cpp | 12 +++++++++--- 9 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index 54ce9d23..c6b953a3 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -1,5 +1,6 @@ #pragma once #include "BlockType.h" +#include "../../header/Level/LevelModel.h" namespace Level { class LevelModel; @@ -15,6 +16,7 @@ namespace Level void render(); BlockType getCurrentBoxValue(int currentPosion); + BoxDimension getBoxDimension(); private: LevelModel* level_model; diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h index 319b8fbe..c3607a90 100644 --- a/Array-Jumper/header/Level/LevelService.h +++ b/Array-Jumper/header/Level/LevelService.h @@ -1,6 +1,7 @@ #pragma once namespace Level { + struct BoxDimension; class LevelController; class LevelService { @@ -12,6 +13,8 @@ namespace Level void update(); void render(); + BoxDimension getBoxDimension(); + private: LevelController* level_controller; }; diff --git a/Array-Jumper/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h index 03aa3fb6..d2149b2f 100644 --- a/Array-Jumper/header/Level/LevelView.h +++ b/Array-Jumper/header/Level/LevelView.h @@ -23,6 +23,8 @@ namespace Level void drawBox(sf::Vector2f position); void drawBoxValue(sf::Vector2f position, BlockType type); + BoxDimension getBoxDimension(); + private: diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h index 5b55b3ef..ba9077a3 100644 --- a/Array-Jumper/header/Player/PlayerView.h +++ b/Array-Jumper/header/Player/PlayerView.h @@ -1,8 +1,10 @@ #pragma once #include "../../header/UI/UIElement/ImageView.h" +#include "../../header/Level/LevelModel.h" namespace Player { + using namespace Level; class PlayerController; class PlayerView { @@ -14,6 +16,7 @@ namespace Player void update(); void render(); + BoxDimension current_box_dimensions; private: UI::UIElement::ImageView* player_image; @@ -33,6 +36,4 @@ namespace Player sf::Vector2f calculatePlayerPosition(); }; - - } \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 9f1e2f57..0ff20b89 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -43,7 +43,7 @@ namespace Global sound_service->initialize(); ui_service->initialize(); level_service->initialize(); - //player_service->initialize(); + player_service->initialize(); } void ServiceLocator::update() @@ -54,7 +54,7 @@ namespace Global if (GameService::getGameState() == GameState::GAMEPLAY) { level_service->update(); - //player_service->update(); + player_service->update(); } } @@ -66,7 +66,7 @@ namespace Global if (GameService::getGameState() == GameState::GAMEPLAY) { level_service->render(); - //player_service->render(); + player_service->render(); } } diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp index effd5ed7..0d8a54e5 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -1,5 +1,4 @@ #include "../../header/Level/LevelController.h" -#include "../../header/Level/LevelModel.h" #include "../../header/Level/LevelView.h" namespace Level { @@ -30,4 +29,8 @@ namespace Level { return level_model->getCurrentBoxValue(currentPosion); } + BoxDimension LevelController::getBoxDimension() + { + return level_view->getBoxDimension(); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp index 9dfada3c..b40208e7 100644 --- a/Array-Jumper/source/Level/LevelService.cpp +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -1,5 +1,6 @@ #include "../../header/Level/LevelService.h" #include "../../header/Level/LevelController.h" +#include "../../header/Level/LevelModel.h" namespace Level { Level::LevelService::LevelService() @@ -22,4 +23,8 @@ namespace Level { level_controller->render(); } + BoxDimension LevelService::getBoxDimension() + { + return level_controller->getBoxDimension(); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp index 393a6a96..19f116a0 100644 --- a/Array-Jumper/source/Level/LevelView.cpp +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -100,6 +100,10 @@ namespace Level image->setPosition(position); image->render(); } + BoxDimension LevelView::getBoxDimension() + { + return box_dimension; + } void LevelView::createImage() { background_image = new ImageView(); diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index 70e6acea..7d863e5a 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -3,6 +3,8 @@ #include "../../header/Global/ServiceLocator.h" #include "../../header/Player/PlayerController.h" #include "../../header/Player/PlayerModel.h" +#include "../../header/Level/LevelModel.h" + namespace Player { using namespace Global; @@ -35,6 +37,7 @@ namespace Player break; } } + void PlayerView::initializePlayerImage() { player_image->initialize(Config::character_texture_path, player_width, player_height, sf::Vector2f(0, 0)); @@ -50,8 +53,9 @@ namespace Player } void PlayerView::calculatePlayerDimension() { - player_width = 1000.f; - player_height = 1000.f; + current_box_dimensions = ServiceLocator::getInstance()->getLevelService()->getBoxDimension(); + player_width = current_box_dimensions.box_width; + player_height = current_box_dimensions.box_height; } void PlayerView::updatePlayerPosition() { @@ -59,6 +63,8 @@ namespace Player } sf::Vector2f PlayerView::calculatePlayerPosition() { - return sf::Vector2f(0,0); + float xPosition = (current_box_dimensions.box_width + current_box_dimensions.box_spacing); + float yPosition = static_cast(game_window->getSize().y) - current_box_dimensions.box_height - current_box_dimensions.bottom_offset - player_height; + return sf::Vector2f(xPosition, yPosition); } } \ No newline at end of file From d452daa342374b8560180673e054b72b5b63ff10 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:06:45 -0500 Subject: [PATCH 08/13] Implement Player Movement --- Array-Jumper/Array-Jumper.vcxproj | 1 + Array-Jumper/Array-Jumper.vcxproj.filters | 2 + Array-Jumper/header/Player/Movement.h | 9 +++ Array-Jumper/header/Player/PlayerController.h | 9 +++ .../source/Player/PlayerController.cpp | 72 +++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 Array-Jumper/header/Player/Movement.h diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index ada9f8bf..1144d70f 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -168,6 +168,7 @@ + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index 3d6e2cc0..b1031fa9 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -91,6 +91,8 @@ + + diff --git a/Array-Jumper/header/Player/Movement.h b/Array-Jumper/header/Player/Movement.h new file mode 100644 index 00000000..4c7239ca --- /dev/null +++ b/Array-Jumper/header/Player/Movement.h @@ -0,0 +1,9 @@ +#pragma once +namespace Player +{ + enum class MovementDirection + { + FORWARD, + BACKWARD + }; +} diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index ad0e03bc..a5ed7a7a 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -3,7 +3,9 @@ namespace Player { class PlayerModel; class PlayerView; + class EventService; enum class PlayerState; + enum class MovementDirection; class PlayerController { @@ -18,9 +20,16 @@ namespace Player PlayerState getPlayerState(); void setPlayerState(PlayerState state); + + void movePlayer(MovementDirection direction); + bool isPositionValid(int targetPosition); + + void readInput(); + private: PlayerModel* player_model; PlayerView* player_view; + Event::EventService* event_service; }; diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 7681c4d8..6fc19575 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -1,9 +1,16 @@ #include "../../header/Player/PlayerController.h" #include "../../header/Player/PlayerModel.h" #include "../../header/Player/PlayerView.h" +#include "../../header/Player/Movement.h" +#include "../../header/Level/LevelData.h" +#include "../../header/Global/ServiceLocator.h" +#include "../../header/Global/Config.h" namespace Player { + using namespace Level; + using namespace Global; + using namespace Sound; Player::PlayerController::PlayerController() { player_model = new PlayerModel(); @@ -16,7 +23,9 @@ namespace Player } void PlayerController::initialize() { + player_view->initialize(); + event_service = ServiceLocator::getInstance()->getEventService(); } void PlayerController::update() @@ -36,4 +45,67 @@ namespace Player { player_model->setPlayerState(state); } +<<<<<<< Updated upstream +======= + int PlayerController::getCurrentPosition() + { + return player_model->getPosition(); + } + + void PlayerController::movePlayer(MovementDirection direction) + { + int steps, targetPosition; + + switch (direction) + { + case Player::MovementDirection::FORWARD: + steps = 1; + + break; + case Player::MovementDirection::BACKWARD: + steps = -1; + break; + default: + steps = 0; + break; + } + + targetPosition = player_model->getPosition() + steps; + + if (!isPositionValid(targetPosition)) + { + return; + } + + player_model->setPosition(targetPosition); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); + } + + bool PlayerController::isPositionValid(int targetPosition) + { + if (targetPosition >= 0 && targetPosition < Level::LevelData::number_of_box) + { + return true; + } + else + { + return false; + } + } + + void PlayerController::readInput() + { + if (event_service->pressedLeftArrowKey() || event_service->pressedAKey()) + { + movePlayer(MovementDirection::BACKWARD); + } + else if (event_service->pressedRightArrowKey() || event_service->pressedDKey()) + { + movePlayer(MovementDirection::FORWARD); + } + + } + + +>>>>>>> Stashed changes } \ No newline at end of file From a29707b916ac271e040a96d543eb22602a793e3c Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:12:42 -0500 Subject: [PATCH 09/13] Implement Player Movement --- Array-Jumper/header/Player/PlayerController.h | 4 +++- .../source/Player/PlayerController.cpp | 20 +++++++++---------- Array-Jumper/source/Player/PlayerView.cpp | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index a5ed7a7a..323bd70d 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -1,4 +1,5 @@ #pragma once +#include "../../header/Event/EventService.h" namespace Player { class PlayerModel; @@ -25,7 +26,8 @@ namespace Player bool isPositionValid(int targetPosition); void readInput(); - + + int getCurrentPosition(); private: PlayerModel* player_model; PlayerView* player_view; diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 6fc19575..d410c6f6 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -5,6 +5,7 @@ #include "../../header/Level/LevelData.h" #include "../../header/Global/ServiceLocator.h" #include "../../header/Global/Config.h" +#include "../../header/Sound/SoundService.h" namespace Player { @@ -23,10 +24,10 @@ namespace Player } void PlayerController::initialize() { - + player_view->initialize(); event_service = ServiceLocator::getInstance()->getEventService(); - + } void PlayerController::update() { @@ -45,8 +46,7 @@ namespace Player { player_model->setPlayerState(state); } -<<<<<<< Updated upstream -======= + int PlayerController::getCurrentPosition() { return player_model->getPosition(); @@ -78,7 +78,7 @@ namespace Player } player_model->setPosition(targetPosition); - ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); } bool PlayerController::isPositionValid(int targetPosition) @@ -93,7 +93,7 @@ namespace Player } } - void PlayerController::readInput() + void PlayerController::readInput() { if (event_service->pressedLeftArrowKey() || event_service->pressedAKey()) { @@ -103,9 +103,7 @@ namespace Player { movePlayer(MovementDirection::FORWARD); } - - } - ->>>>>>> Stashed changes -} \ No newline at end of file + } + +} diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index 7d863e5a..93a0921e 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -63,7 +63,7 @@ namespace Player } sf::Vector2f PlayerView::calculatePlayerPosition() { - float xPosition = (current_box_dimensions.box_width + current_box_dimensions.box_spacing); + float xPosition = current_box_dimensions.box_spacing + static_cast(player_controller->getCurrentPosition()) * (current_box_dimensions.box_width + current_box_dimensions.box_spacing); float yPosition = static_cast(game_window->getSize().y) - current_box_dimensions.box_height - current_box_dimensions.bottom_offset - player_height; return sf::Vector2f(xPosition, yPosition); } From 7176cc2bc4bcd39e370dce79fb8fe731c677b7c9 Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Tue, 5 Nov 2024 13:32:01 -0500 Subject: [PATCH 10/13] Implement Player Jump --- Array-Jumper/header/Level/LevelController.h | 2 +- Array-Jumper/header/Level/LevelModel.h | 2 +- Array-Jumper/header/Level/LevelService.h | 3 ++ Array-Jumper/header/Player/PlayerController.h | 2 + Array-Jumper/source/Level/LevelController.cpp | 4 +- Array-Jumper/source/Level/LevelModel.cpp | 4 +- Array-Jumper/source/Level/LevelService.cpp | 4 ++ .../source/Player/PlayerController.cpp | 46 ++++++++++++++++++- 8 files changed, 59 insertions(+), 8 deletions(-) diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index c6b953a3..00a9c2fa 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -15,7 +15,7 @@ namespace Level void update(); void render(); - BlockType getCurrentBoxValue(int currentPosion); + BlockType getCurrentBoxValue(int currenPosition); BoxDimension getBoxDimension(); private: diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index 512e8aaf..d96906e7 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -19,7 +19,7 @@ namespace Level LevelModel(); ~LevelModel(); - BlockType getCurrentBoxValue(int currentPosion); + BlockType getCurrentBoxValue(int currentPosition); private: LevelData current_level_data; diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h index c3607a90..54361051 100644 --- a/Array-Jumper/header/Level/LevelService.h +++ b/Array-Jumper/header/Level/LevelService.h @@ -1,8 +1,10 @@ #pragma once +#include "BlockType.h" namespace Level { struct BoxDimension; class LevelController; + class BoxType; class LevelService { public: @@ -14,6 +16,7 @@ namespace Level void render(); BoxDimension getBoxDimension(); + BlockType getCurrentBoxValue(int currentPosition); private: LevelController* level_controller; diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 323bd70d..25f02f84 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -23,11 +23,13 @@ namespace Player void movePlayer(MovementDirection direction); + void jump(MovementDirection direction); bool isPositionValid(int targetPosition); void readInput(); int getCurrentPosition(); + private: PlayerModel* player_model; PlayerView* player_view; diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp index 0d8a54e5..e42a1c7d 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -25,9 +25,9 @@ namespace Level { level_view->render(); } - BlockType LevelController::getCurrentBoxValue(int currentPosion) + BlockType LevelController::getCurrentBoxValue(int currentPosition) { - return level_model->getCurrentBoxValue(currentPosion); + return level_model->getCurrentBoxValue(currentPosition); } BoxDimension LevelController::getBoxDimension() { diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp index 9f317616..e41a3ecd 100644 --- a/Array-Jumper/source/Level/LevelModel.cpp +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -8,8 +8,8 @@ namespace Level LevelModel::~LevelModel() { } - BlockType LevelModel::getCurrentBoxValue(int currentPosion) + BlockType LevelModel::getCurrentBoxValue(int currentPosition) { - return current_level_data.level_boxes[currentPosion]; + return current_level_data.level_boxes[currentPosition]; } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp index b40208e7..ca592795 100644 --- a/Array-Jumper/source/Level/LevelService.cpp +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -27,4 +27,8 @@ namespace Level { return level_controller->getBoxDimension(); } + BlockType LevelService::getCurrentBoxValue(int currentPosition) + { + return level_controller->getCurrentBoxValue(currentPosition); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index d410c6f6..0ca9a5ac 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -6,6 +6,8 @@ #include "../../header/Global/ServiceLocator.h" #include "../../header/Global/Config.h" #include "../../header/Sound/SoundService.h" +#include "../../header/Level/BlockType.h" +#include namespace Player { @@ -31,6 +33,7 @@ namespace Player } void PlayerController::update() { + readInput(); player_view->update(); } @@ -81,6 +84,31 @@ namespace Player ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); } + void PlayerController::jump(MovementDirection direction) + { + int currentPosition = player_model->getPosition(); + BlockType box_value = ServiceLocator::getInstance()->getLevelService()->getCurrentBoxValue(currentPosition); + int steps, targetPosition; + switch (direction) + { + case Player::MovementDirection::FORWARD: + steps = static_cast(box_value); + break; + case Player::MovementDirection::BACKWARD: + steps = -static_cast(box_value); + break; + default: + steps = 0; + break; + } + targetPosition = currentPosition + steps; + if (isPositionValid(targetPosition)) + { + player_model->setPosition(targetPosition); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::JUMP); + } + } + bool PlayerController::isPositionValid(int targetPosition) { if (targetPosition >= 0 && targetPosition < Level::LevelData::number_of_box) @@ -97,11 +125,25 @@ namespace Player { if (event_service->pressedLeftArrowKey() || event_service->pressedAKey()) { - movePlayer(MovementDirection::BACKWARD); + if (event_service->heldSpaceKey()) + { + jump(MovementDirection::BACKWARD); + } + else + { + movePlayer(MovementDirection::BACKWARD); + } } else if (event_service->pressedRightArrowKey() || event_service->pressedDKey()) { - movePlayer(MovementDirection::FORWARD); + if (event_service->heldSpaceKey()) + { + jump(MovementDirection::FORWARD); + } + else + { + movePlayer(MovementDirection::FORWARD); + } } } From a4531d4a149339f3ce04f685b794ab2512a16b8d Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:39:06 -0500 Subject: [PATCH 11/13] Implement Player Collision with Obstacle --- Array-Jumper/Array-Jumper.vcxproj | 5 ++ Array-Jumper/Array-Jumper.vcxproj.filters | 5 ++ .../header/GamePlay/GamePlayController.cpp | 54 +++++++++++++++++++ .../header/GamePlay/GamePlayController.h | 24 +++++++++ .../header/GamePlay/GamePlayService.h | 24 +++++++++ Array-Jumper/header/Global/ServiceLocator.h | 3 ++ Array-Jumper/header/Player/PlayerController.h | 2 +- Array-Jumper/header/Player/PlayerModel.h | 2 + Array-Jumper/header/Player/PlayerService.h | 3 ++ .../source/GamePlay/GamePlayConroller.cpp | 4 ++ .../source/GamePlay/GamePlayService.cpp | 28 ++++++++++ Array-Jumper/source/Global/ServiceLocator.cpp | 11 ++++ .../source/Player/PlayerController.cpp | 5 ++ Array-Jumper/source/Player/PlayerModel.cpp | 5 ++ Array-Jumper/source/Player/PlayerService.cpp | 8 +++ 15 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 Array-Jumper/header/GamePlay/GamePlayController.cpp create mode 100644 Array-Jumper/header/GamePlay/GamePlayController.h create mode 100644 Array-Jumper/header/GamePlay/GamePlayService.h create mode 100644 Array-Jumper/source/GamePlay/GamePlayConroller.cpp create mode 100644 Array-Jumper/source/GamePlay/GamePlayService.cpp diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 1144d70f..a0c420fe 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -133,6 +133,9 @@ + + + @@ -160,6 +163,8 @@ + + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index b1031fa9..c725a1a2 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -52,6 +52,9 @@ + + + @@ -93,6 +96,8 @@ + + diff --git a/Array-Jumper/header/GamePlay/GamePlayController.cpp b/Array-Jumper/header/GamePlay/GamePlayController.cpp new file mode 100644 index 00000000..6240dd9e --- /dev/null +++ b/Array-Jumper/header/GamePlay/GamePlayController.cpp @@ -0,0 +1,54 @@ +#include "GamePlayController.h" +#include "../../header/Global/ServiceLocator.h" +#include "../../header/Sound/SoundService.h" +#include "../../header/Level/LevelService.h" + +using namespace Global; +using namespace Sound; +using namespace Level; + + +GamePlay::GamePlayController::GamePlayController() +{ +} + +GamePlay::GamePlayController::~GamePlayController() +{ +} + +void GamePlay::GamePlayController::initialize() +{ +} + +void GamePlay::GamePlayController::update() +{ + onPositionChanged(ServiceLocator::getInstance()->getPlayerService()->getCurrentPosition()); +} + +void GamePlay::GamePlayController::render() +{ +} + +void GamePlay::GamePlayController::processObstacle() +{ + ServiceLocator::getInstance()->getPlayerService()->takeDamage(); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::DEATH); +} + +bool GamePlay::GamePlayController::isCollidingWithObstacle(BlockType value) +{ + if (value == BlockType::OBSTACLE_ONE || value == BlockType::OBSTACLE_TWO) + { + return true; + } + return false; +} + +void GamePlay::GamePlayController::onPositionChanged(int position) +{ + BlockType block = ServiceLocator::getInstance()->getLevelService()->getCurrentBoxValue(position); + if (isCollidingWithObstacle(block)) + { + processObstacle(); + } +} diff --git a/Array-Jumper/header/GamePlay/GamePlayController.h b/Array-Jumper/header/GamePlay/GamePlayController.h new file mode 100644 index 00000000..fda625be --- /dev/null +++ b/Array-Jumper/header/GamePlay/GamePlayController.h @@ -0,0 +1,24 @@ +#pragma once +#include "../../header/Level/BlockType.h" + +namespace GamePlay +{ + + class GamePlayController + { + public: + GamePlayController(); + ~GamePlayController(); + + void initialize(); + void update(); + void render(); + + private: + void processObstacle(); + bool isCollidingWithObstacle(BlockType value); + void onPositionChanged(int position); + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/GamePlay/GamePlayService.h b/Array-Jumper/header/GamePlay/GamePlayService.h new file mode 100644 index 00000000..177b4ba3 --- /dev/null +++ b/Array-Jumper/header/GamePlay/GamePlayService.h @@ -0,0 +1,24 @@ +#pragma once +namespace GamePlay +{ + class GamePlayController; + class GamePlayService + { + public: + GamePlayService(); + ~GamePlayService(); + + + void initialize(); + void update(); + void render(); + + + + private: + GamePlayController* m_gamePlayController; + }; + + + +} \ No newline at end of file diff --git a/Array-Jumper/header/Global/ServiceLocator.h b/Array-Jumper/header/Global/ServiceLocator.h index 118cb896..bc76eeae 100644 --- a/Array-Jumper/header/Global/ServiceLocator.h +++ b/Array-Jumper/header/Global/ServiceLocator.h @@ -5,6 +5,7 @@ #include "../../header/Sound/SoundService.h" #include "../../header/Player/PlayerService.h" #include "../../header/Level/LevelService.h" +#include "../../header/GamePlay/GamePlayService.h" namespace Global { @@ -17,6 +18,7 @@ namespace Global UI::UIService* ui_service; Player::PlayerService* player_service; Level::LevelService* level_service; + GamePlay::GamePlayService* game_play_service; ~ServiceLocator(); @@ -37,5 +39,6 @@ namespace Global UI::UIService* getUIService(); Player::PlayerService* getPlayerService(); Level::LevelService* getLevelService(); + GamePlay::GamePlayService* getGamePlayService(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 25f02f84..9b2cda3e 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -29,7 +29,7 @@ namespace Player void readInput(); int getCurrentPosition(); - + void takeDamage(); private: PlayerModel* player_model; PlayerView* player_view; diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index 43014b1b..714307bc 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -16,6 +16,8 @@ namespace Player PlayerState getPlayerState(); void setPlayerState(PlayerState state); + + void resetPlayer(); private: int current_position; PlayerState player_state; diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index acaaecde..96741d5a 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -12,6 +12,9 @@ namespace Player void update(); void render(); + void takeDamage(); + int getCurrentPosition(); + private: PlayerController* player_conroller; }; diff --git a/Array-Jumper/source/GamePlay/GamePlayConroller.cpp b/Array-Jumper/source/GamePlay/GamePlayConroller.cpp new file mode 100644 index 00000000..7dc07add --- /dev/null +++ b/Array-Jumper/source/GamePlay/GamePlayConroller.cpp @@ -0,0 +1,4 @@ +namespace GamePlay +{ + +} \ No newline at end of file diff --git a/Array-Jumper/source/GamePlay/GamePlayService.cpp b/Array-Jumper/source/GamePlay/GamePlayService.cpp new file mode 100644 index 00000000..0fdeba79 --- /dev/null +++ b/Array-Jumper/source/GamePlay/GamePlayService.cpp @@ -0,0 +1,28 @@ +#include "../../header/GamePlay/GamePlayService.h" +#include "../../header/GamePlay/GamePlayController.h" +#include "../../header/Global/ServiceLocator.h" +namespace GamePlay +{ + using namespace Global; + GamePlay::GamePlayService::GamePlayService() + { + m_gamePlayController = new GamePlayController(); + } + GamePlayService::~GamePlayService() + { + delete m_gamePlayController; + } + void GamePlayService::initialize() + { + m_gamePlayController->initialize(); + } + void GamePlayService::update() + { + m_gamePlayController->update(); + } + void GamePlayService::render() + { + m_gamePlayController->render(); + } + +} \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 0ff20b89..23454332 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -11,6 +11,7 @@ namespace Global using namespace Main; using namespace Player; using namespace Level; + using namespace GamePlay; ServiceLocator::ServiceLocator() { @@ -20,6 +21,7 @@ namespace Global ui_service = nullptr; level_service = nullptr; player_service = nullptr; + game_play_service = nullptr; createServices(); } @@ -34,6 +36,7 @@ namespace Global ui_service = new UIService(); level_service = new LevelService(); player_service = new PlayerService(); + game_play_service = new GamePlayService(); } void ServiceLocator::initialize() @@ -44,6 +47,7 @@ namespace Global ui_service->initialize(); level_service->initialize(); player_service->initialize(); + game_play_service->initialize(); } void ServiceLocator::update() @@ -55,6 +59,7 @@ namespace Global { level_service->update(); player_service->update(); + game_play_service->update(); } } @@ -67,6 +72,7 @@ namespace Global { level_service->render(); player_service->render(); + game_play_service->render(); } } @@ -79,6 +85,7 @@ namespace Global delete(ui_service); delete(level_service); delete(player_service); + delete(game_play_service); } ServiceLocator* ServiceLocator::getInstance() @@ -98,6 +105,10 @@ namespace Global { return level_service; } + GamePlay::GamePlayService* ServiceLocator::getGamePlayService() + { + return game_play_service; + } Player::PlayerService* ServiceLocator::getPlayerService() { return player_service; diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 0ca9a5ac..5027fcee 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -55,6 +55,11 @@ namespace Player return player_model->getPosition(); } + void PlayerController::takeDamage() + { + player_model->resetPlayer(); + } + void PlayerController::movePlayer(MovementDirection direction) { int steps, targetPosition; diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index 2e346512..ac622a22 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -19,4 +19,9 @@ namespace Player { { player_state = state; } + void PlayerModel::resetPlayer() + { + current_position = 0; + player_state = PlayerState::ALIVE; + } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index aee3bc68..17affcaf 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -22,4 +22,12 @@ namespace Player { player_conroller->render(); } + void PlayerService::takeDamage() + { + player_conroller->takeDamage(); + } + int PlayerService::getCurrentPosition() + { + return player_conroller->getCurrentPosition(); + } } \ No newline at end of file From 0c871a6d46c8313522d644d19def4749afd1b74f Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:50:36 -0500 Subject: [PATCH 12/13] Implement Winning Logic --- Array-Jumper/Array-Jumper.vcxproj | 3 +-- Array-Jumper/Array-Jumper.vcxproj.filters | 3 +-- .../header/GamePlay/GamePlayController.h | 2 ++ Array-Jumper/header/Player/PlayerService.h | 1 + .../source/GamePlay/GamePlayConroller.cpp | 4 ---- .../GamePlay/GamePlayController.cpp | 24 ++++++++++++++++++- Array-Jumper/source/Player/PlayerService.cpp | 4 ++++ 7 files changed, 32 insertions(+), 9 deletions(-) delete mode 100644 Array-Jumper/source/GamePlay/GamePlayConroller.cpp rename Array-Jumper/{header => source}/GamePlay/GamePlayController.cpp (67%) diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index a0c420fe..b0338137 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -133,8 +133,7 @@ - - + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index c725a1a2..cb27f139 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -52,9 +52,8 @@ - - + diff --git a/Array-Jumper/header/GamePlay/GamePlayController.h b/Array-Jumper/header/GamePlay/GamePlayController.h index fda625be..257bf3d8 100644 --- a/Array-Jumper/header/GamePlay/GamePlayController.h +++ b/Array-Jumper/header/GamePlay/GamePlayController.h @@ -18,6 +18,8 @@ namespace GamePlay void processObstacle(); bool isCollidingWithObstacle(BlockType value); void onPositionChanged(int position); + bool isEndBlock(BlockType value); + void processEndBlock(); }; diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index 96741d5a..f72d18e1 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -14,6 +14,7 @@ namespace Player void takeDamage(); int getCurrentPosition(); + void levelComplete(); private: PlayerController* player_conroller; diff --git a/Array-Jumper/source/GamePlay/GamePlayConroller.cpp b/Array-Jumper/source/GamePlay/GamePlayConroller.cpp deleted file mode 100644 index 7dc07add..00000000 --- a/Array-Jumper/source/GamePlay/GamePlayConroller.cpp +++ /dev/null @@ -1,4 +0,0 @@ -namespace GamePlay -{ - -} \ No newline at end of file diff --git a/Array-Jumper/header/GamePlay/GamePlayController.cpp b/Array-Jumper/source/GamePlay/GamePlayController.cpp similarity index 67% rename from Array-Jumper/header/GamePlay/GamePlayController.cpp rename to Array-Jumper/source/GamePlay/GamePlayController.cpp index 6240dd9e..36a5670f 100644 --- a/Array-Jumper/header/GamePlay/GamePlayController.cpp +++ b/Array-Jumper/source/GamePlay/GamePlayController.cpp @@ -1,11 +1,13 @@ -#include "GamePlayController.h" +#include "../../header/GamePlay/GamePlayController.h" #include "../../header/Global/ServiceLocator.h" #include "../../header/Sound/SoundService.h" #include "../../header/Level/LevelService.h" +#include "../../header/Main/GameService.h" using namespace Global; using namespace Sound; using namespace Level; +using namespace Main; GamePlay::GamePlayController::GamePlayController() @@ -51,4 +53,24 @@ void GamePlay::GamePlayController::onPositionChanged(int position) { processObstacle(); } + if (isEndBlock(block)) + { + processEndBlock(); + } +} + +bool GamePlay::GamePlayController::isEndBlock(BlockType value) +{ + if (value == BlockType::TARGET) + { + return true; + } + return false; +} + +void GamePlay::GamePlayController::processEndBlock() +{ + GameService::setGameState(GameState::CREDITS); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::LEVEL_COMPLETE); + ServiceLocator::getInstance()->getPlayerService()->levelComplete(); } diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index 17affcaf..c27c80f8 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -30,4 +30,8 @@ namespace Player { return player_conroller->getCurrentPosition(); } + void PlayerService::levelComplete() + { + player_conroller->takeDamage(); + } } \ No newline at end of file From 2d4f36dca97de6834af5ef1cfb173b9ad112989d Mon Sep 17 00:00:00 2001 From: Akashkapoor <150754201+akashkapoordev@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:51:59 -0500 Subject: [PATCH 13/13] Implement Multiple Lives for Player --- Array-Jumper/Array-Jumper.vcxproj | 2 + Array-Jumper/Array-Jumper.vcxproj.filters | 2 + .../header/GamePlay/GamePlayController.h | 3 ++ .../header/GamePlay/GamePlayService.h | 3 +- Array-Jumper/header/Player/PlayerController.h | 3 ++ Array-Jumper/header/Player/PlayerModel.h | 10 +++- Array-Jumper/header/Player/PlayerService.h | 3 ++ .../header/UI/GamePlay/GameplayUIController.h | 30 ++++++++++++ Array-Jumper/header/UI/UIService.h | 3 ++ .../source/GamePlay/GamePlayController.cpp | 11 +++++ .../source/GamePlay/GamePlayService.cpp | 5 ++ .../source/Player/PlayerController.cpp | 24 +++++++++- Array-Jumper/source/Player/PlayerModel.cpp | 21 +++++++- Array-Jumper/source/Player/PlayerService.cpp | 9 ++++ .../UI/GamePlay/GameplayUIController.cpp | 48 +++++++++++++++++++ Array-Jumper/source/UI/UIService.cpp | 12 +++++ 16 files changed, 185 insertions(+), 4 deletions(-) create mode 100644 Array-Jumper/header/UI/GamePlay/GameplayUIController.h create mode 100644 Array-Jumper/source/UI/GamePlay/GameplayUIController.cpp diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index b0338137..89a151b9 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -151,6 +151,7 @@ + @@ -181,6 +182,7 @@ + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index cb27f139..b0fe95f1 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -54,6 +54,7 @@ + @@ -97,6 +98,7 @@ + diff --git a/Array-Jumper/header/GamePlay/GamePlayController.h b/Array-Jumper/header/GamePlay/GamePlayController.h index 257bf3d8..0ae19118 100644 --- a/Array-Jumper/header/GamePlay/GamePlayController.h +++ b/Array-Jumper/header/GamePlay/GamePlayController.h @@ -13,6 +13,8 @@ namespace GamePlay void initialize(); void update(); void render(); + void onDeath(); + private: void processObstacle(); @@ -20,6 +22,7 @@ namespace GamePlay void onPositionChanged(int position); bool isEndBlock(BlockType value); void processEndBlock(); + void gameOver(); }; diff --git a/Array-Jumper/header/GamePlay/GamePlayService.h b/Array-Jumper/header/GamePlay/GamePlayService.h index 177b4ba3..f994bd36 100644 --- a/Array-Jumper/header/GamePlay/GamePlayService.h +++ b/Array-Jumper/header/GamePlay/GamePlayService.h @@ -13,7 +13,8 @@ namespace GamePlay void update(); void render(); - + void onDeath(); + private: GamePlayController* m_gamePlayController; diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 9b2cda3e..4cc1ce28 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -30,6 +30,9 @@ namespace Player int getCurrentPosition(); void takeDamage(); + + int getCurrentLives(); + void onDeath(); private: PlayerModel* player_model; PlayerView* player_view; diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index 714307bc..86c69152 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -10,16 +10,24 @@ namespace Player class PlayerModel { public: + + void initialize(); + void update(); + int current_lives; int getPosition(); void setPosition(int player_position); PlayerState getPlayerState(); void setPlayerState(PlayerState state); - void resetPlayer(); + + int getCurrentLives(); + void decrementLife(); + void resetPositon(); private: int current_position; + const int max_lives = 3; PlayerState player_state; }; diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index f72d18e1..ec9a18cd 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -16,6 +16,9 @@ namespace Player int getCurrentPosition(); void levelComplete(); + int getCurrentLives(); + void onDeath(); + private: PlayerController* player_conroller; }; diff --git a/Array-Jumper/header/UI/GamePlay/GameplayUIController.h b/Array-Jumper/header/UI/GamePlay/GameplayUIController.h new file mode 100644 index 00000000..b3762a1a --- /dev/null +++ b/Array-Jumper/header/UI/GamePlay/GameplayUIController.h @@ -0,0 +1,30 @@ +#pragma once +#include "../../header/UI/UIElement/TextView.h" +namespace GamePlayUI +{ + class GameplayUIController + { + public: + GameplayUIController(); + ~ GameplayUIController(); + + void initialize(); + void update(); + void render(); + + private: + float font_size = 55; + + const float top_offset = 100.f; + const float left_offset = 100.f; + const float right_offset = 250.f; + + UI::UIElement::TextView* m_liveTextView; + void createLiveTextView(); + void initializeLiveTextView(); + void updateLiveTextView(); + + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/UI/UIService.h b/Array-Jumper/header/UI/UIService.h index 8db7e889..568b641e 100644 --- a/Array-Jumper/header/UI/UIService.h +++ b/Array-Jumper/header/UI/UIService.h @@ -5,9 +5,11 @@ #include "../../header/UI/MainMenu/MainMenuUIController.h" #include "../../header/UI/Instructions/InstructionsUIController.h" #include "../../header/UI/Credits/CreditsScreenUIController.h" +#include "../../header/UI/GamePlay/GameplayUIController.h" namespace UI { + class UIService { @@ -16,6 +18,7 @@ namespace UI MainMenu::MainMenuUIController* main_menu_ui_controller; Credits::CreditsScreenUIController* credits_screen_ui_controller; Instructions::InstructionsUIController* instructions_ui_controller; + GamePlayUI::GameplayUIController* gameplay_ui_controller; void createControllers(); diff --git a/Array-Jumper/source/GamePlay/GamePlayController.cpp b/Array-Jumper/source/GamePlay/GamePlayController.cpp index 36a5670f..3d3e8a97 100644 --- a/Array-Jumper/source/GamePlay/GamePlayController.cpp +++ b/Array-Jumper/source/GamePlay/GamePlayController.cpp @@ -74,3 +74,14 @@ void GamePlay::GamePlayController::processEndBlock() ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::LEVEL_COMPLETE); ServiceLocator::getInstance()->getPlayerService()->levelComplete(); } + +void GamePlay::GamePlayController::gameOver() +{ + GameService::setGameState(GameState::CREDITS); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::DEATH); +} + +void GamePlay::GamePlayController::onDeath() +{ + gameOver(); +} diff --git a/Array-Jumper/source/GamePlay/GamePlayService.cpp b/Array-Jumper/source/GamePlay/GamePlayService.cpp index 0fdeba79..182343df 100644 --- a/Array-Jumper/source/GamePlay/GamePlayService.cpp +++ b/Array-Jumper/source/GamePlay/GamePlayService.cpp @@ -25,4 +25,9 @@ namespace GamePlay m_gamePlayController->render(); } + void GamePlayService::onDeath() + { + m_gamePlayController->onDeath(); + } + } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 5027fcee..c1b9a015 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -7,6 +7,7 @@ #include "../../header/Global/Config.h" #include "../../header/Sound/SoundService.h" #include "../../header/Level/BlockType.h" +#include "../../header/GamePlay/GamePlayService.h" #include namespace Player @@ -26,7 +27,7 @@ namespace Player } void PlayerController::initialize() { - + player_model->initialize(); player_view->initialize(); event_service = ServiceLocator::getInstance()->getEventService(); @@ -57,6 +58,27 @@ namespace Player void PlayerController::takeDamage() { + player_model->decrementLife(); + + if (player_model->getCurrentLives() <= 0) + { + onDeath(); + } + else + { + player_model->resetPositon(); + + } + } + + int PlayerController::getCurrentLives() + { + return player_model->getCurrentLives(); + } + + void PlayerController::onDeath() + { + ServiceLocator::getInstance()->getGamePlayService()->onDeath(); player_model->resetPlayer(); } diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index ac622a22..b4562136 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -2,7 +2,13 @@ namespace Player { - + void PlayerModel::initialize() + { + current_lives = max_lives; + } + void PlayerModel::update() + { + } int PlayerModel::getPosition() { return current_position; @@ -23,5 +29,18 @@ namespace Player { { current_position = 0; player_state = PlayerState::ALIVE; + current_lives = max_lives; + } + int PlayerModel::getCurrentLives() + { + return current_lives; + } + void PlayerModel::decrementLife() + { + current_lives--; + } + void PlayerModel::resetPositon() + { + current_position = 0; } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index c27c80f8..cb44f3e8 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -34,4 +34,13 @@ namespace Player { player_conroller->takeDamage(); } + int PlayerService::getCurrentLives() + { + return player_conroller->getCurrentLives(); + } + void PlayerService::onDeath() + { + + player_conroller->onDeath(); + } } \ No newline at end of file diff --git a/Array-Jumper/source/UI/GamePlay/GameplayUIController.cpp b/Array-Jumper/source/UI/GamePlay/GameplayUIController.cpp new file mode 100644 index 00000000..6fabae1a --- /dev/null +++ b/Array-Jumper/source/UI/GamePlay/GameplayUIController.cpp @@ -0,0 +1,48 @@ +#include "../../header/UI/GamePlay/GameplayUIController.h" +#include "../../header/Global/ServiceLocator.h" + +namespace GamePlayUI +{ + using namespace Global; + using namespace UI::UIElement; + GameplayUIController::GameplayUIController() + { + m_liveTextView = nullptr; + createLiveTextView(); + } + GameplayUIController::~GameplayUIController() + { + delete(m_liveTextView); + } + void GameplayUIController::initialize() + { + initializeLiveTextView(); + } + void GameplayUIController::update() + { + updateLiveTextView(); + } + void GameplayUIController::render() + { + m_liveTextView->render(); + } + void GameplayUIController::createLiveTextView() + { + m_liveTextView = new UI::UIElement::TextView(); + } + void GameplayUIController::initializeLiveTextView() + { + float window_width = ServiceLocator::getInstance()->getGraphicService()->getGameWindow()->getSize().x; + float x_position = window_width - right_offset; + float y_position = top_offset; + m_liveTextView->initialize("0", sf::Vector2f(x_position, y_position), UI::UIElement::FontType::BUBBLE_BOBBLE, font_size, sf::Color::White); + } + void GameplayUIController::updateLiveTextView() + { + int lives = ServiceLocator::getInstance()->getPlayerService()->getCurrentLives(); + std::string life_count_string = "LIFE: " + std::to_string(lives); + + m_liveTextView->setText(life_count_string); + m_liveTextView->update(); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/UI/UIService.cpp b/Array-Jumper/source/UI/UIService.cpp index 0623d796..2f9f53a2 100644 --- a/Array-Jumper/source/UI/UIService.cpp +++ b/Array-Jumper/source/UI/UIService.cpp @@ -15,6 +15,7 @@ namespace UI using namespace Instructions; using namespace Global; using namespace UIElement; + using namespace GamePlayUI; UIService::UIService() { @@ -22,6 +23,7 @@ namespace UI main_menu_ui_controller = nullptr; credits_screen_ui_controller = nullptr; instructions_ui_controller = nullptr; + gameplay_ui_controller = nullptr; createControllers(); } @@ -37,6 +39,7 @@ namespace UI main_menu_ui_controller = new MainMenuUIController(); credits_screen_ui_controller = new CreditsScreenUIController(); instructions_ui_controller = new InstructionsUIController(); + gameplay_ui_controller = new GameplayUIController(); } void UIService::initialize() @@ -51,6 +54,7 @@ namespace UI main_menu_ui_controller->initialize(); credits_screen_ui_controller->initialize(); instructions_ui_controller->initialize(); + gameplay_ui_controller->initialize(); } void UIService::initializeUIElements() @@ -74,7 +78,11 @@ namespace UI case GameState::CREDITS: credits_screen_ui_controller->update(); break; + case GameState::GAMEPLAY: + gameplay_ui_controller->update(); + break; } + } void UIService::render() @@ -93,6 +101,9 @@ namespace UI case GameState::CREDITS: credits_screen_ui_controller->render(); break; + case GameState::GAMEPLAY: + gameplay_ui_controller->render(); + break; } } @@ -107,5 +118,6 @@ namespace UI delete(main_menu_ui_controller); delete(credits_screen_ui_controller); delete(instructions_ui_controller); + delete(gameplay_ui_controller); } } \ No newline at end of file