From b0b9c3ddfa0e4042ede5b9b388d08ef21a649565 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Tue, 26 Nov 2024 06:20:00 +0530 Subject: [PATCH 01/14] Creating Player Model --- Array-Jumper/Array-Jumper.vcxproj | 4 ++ Array-Jumper/header/Player/PlayerModel.h | 25 +++++++++ Array-Jumper/header/Player/PlayerView.h | 35 ++++++++++++ Array-Jumper/source/Player/PlayerModel.cpp | 24 ++++++++ Array-Jumper/source/Player/PlayerView.cpp | 64 ++++++++++++++++++++++ 5 files changed, 152 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/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 658ea835..2cc9dc75 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -137,6 +137,8 @@ + + @@ -154,6 +156,8 @@ + + diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h new file mode 100644 index 00000000..119ec9ac --- /dev/null +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -0,0 +1,25 @@ +#pragma once + +namespace Player +{ + enum class PlayerState + { + ALIVE, + DEAD + }; + + class PlayerModel + { + private: + + PlayerState player_state; + int current_position; + + public: + PlayerState getPlayerState(); + void setPlayerState(PlayerState new_player_state); + + int getCurrentPosition(); + void setCurrentPosition(int new_position); + }; +} diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h new file mode 100644 index 00000000..7d68e9c4 --- /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 + { + private: + sf::RenderWindow* game_window; + UI::UIElement::ImageView* player_image; + + float player_height; + float player_width; + + void initializePlayerImage(); //Initialize player_image + void drawPlayer(); //Called every frame to render the sprite on the screen + void loadPlayer(); //Loads the information needed to render the player + void calculatePlayerDimensions(); //Calculate the size of image + void updatePlayerPosition(); //Updates the Player Sprite's position on each frame + sf::Vector2f calulcatePlayerPosition(); + public: + PlayerView(); + ~PlayerView(); + + void initialize(); + void update(); + void render(); + + + }; + + + + +} \ 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..366ac51c --- /dev/null +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -0,0 +1,24 @@ +#include "../../header/Player/PlayerModel.h" + +namespace Player +{ + PlayerState PlayerModel::getPlayerState() + { + return player_state; + } + + void PlayerModel::setPlayerState(PlayerState new_player_state) + { + player_state = new_player_state; + } + + int PlayerModel::getCurrentPosition() + { + return current_position; + } + + void PlayerModel::setCurrentPosition(int new_position) + { + current_position = new_position; + } +} \ 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..ac681528 --- /dev/null +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -0,0 +1,64 @@ +#include "../../header/Player/PlayerView.h" + +namespace Player +{ + + void PlayerView::calculatePlayerDimensions() + { + player_height = 1000.0f; + player_width = 1000.0f; + + } + + void PlayerView::initializePlayerImage() + { + player_image->initialize(Config::character_texture_path, + player_width, + player_height, + sf::Vector2f(0, 0)); + } + void PlayerView::loadPlayer() + { + calculatePlayerDimensions(); + initializePlayerImage(); + } + void PlayerView::initialize() + { + game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + loadPlayer(); + } + sf::Vector2f PlayerView::calulcatePlayerPosition() + { + return sf::Vector2f(0, 0); + } + PlayerView::PlayerView() + { + game_window = nullptr; + player_image = new ImageView(); + } + void PlayerView::updatePlayerPosition() + { + player_image->setPosition(calulcatePlayerPosition()); + } + void PlayerView::drawPlayer() + { + player_image->render(); + } + + PlayerView::~PlayerView() {} + + void PlayerView::initialize() + { + //Yet to Implement + } + + void PlayerView::update() + { + //Yet to implement + } + + void PlayerView::render() + { + //Yet to implement + } +} \ No newline at end of file From adbd690f6c2d2adf63c5fcf7e0d46ad2ccc2692a Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Tue, 26 Nov 2024 06:45:27 +0530 Subject: [PATCH 02/14] Creating Player Model2 --- Array-Jumper/header/Player/PlayerView.h | 1 + Array-Jumper/source/Player/PlayerView.cpp | 38 ++++++++++++----------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h index 7d68e9c4..780fc035 100644 --- a/Array-Jumper/header/Player/PlayerView.h +++ b/Array-Jumper/header/Player/PlayerView.h @@ -1,5 +1,6 @@ #pragma once #include "../../header/UI/UIElement/ImageView.h" +using namespace UI::UIElement; namespace Player { diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index ac681528..c0dd88f2 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -1,21 +1,29 @@ #include "../../header/Player/PlayerView.h" - +#include "../../header/Global/Config.h" +#include "../../header/Global/ServiceLocator.h" +using namespace Global; namespace Player { - void PlayerView::calculatePlayerDimensions() + PlayerView::PlayerView() { - player_height = 1000.0f; - player_width = 1000.0f; - + game_window = nullptr; + player_image = new ImageView(); } + void PlayerView::calculatePlayerDimensions() + { + player_height = 1000.f; + player_width = 1000.f; + + } void PlayerView::initializePlayerImage() { player_image->initialize(Config::character_texture_path, - player_width, - player_height, - sf::Vector2f(0, 0)); + player_width, + player_height, + sf::Vector2f(0, 0)); + } void PlayerView::loadPlayer() { @@ -31,11 +39,6 @@ namespace Player { return sf::Vector2f(0, 0); } - PlayerView::PlayerView() - { - game_window = nullptr; - player_image = new ImageView(); - } void PlayerView::updatePlayerPosition() { player_image->setPosition(calulcatePlayerPosition()); @@ -44,13 +47,12 @@ namespace Player { player_image->render(); } - + + + PlayerView::~PlayerView() {} - void PlayerView::initialize() - { - //Yet to Implement - } + void PlayerView::update() { From af4efac5cec08488d1cf8bf3686c4b9f509fc6ff Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Fri, 29 Nov 2024 06:59:56 +0530 Subject: [PATCH 03/14] changescommited --- Array-Jumper/Array-Jumper.vcxproj | 6 +- Array-Jumper/Array-Jumper.vcxproj.filters | 8 ++ Array-Jumper/header/Global/ServiceLocator.h | 3 + Array-Jumper/header/Player/PlayerController.h | 34 ++++++++ Array-Jumper/header/Player/PlayerModel.h | 25 ++++-- Array-Jumper/header/Player/PlayerService.h | 31 +++++++ Array-Jumper/header/Player/PlayerView.h | 33 ++++--- Array-Jumper/source/Global/ServiceLocator.cpp | 15 ++++ .../source/Player/PlayerController.cpp | 61 +++++++++++++ Array-Jumper/source/Player/PlayerModel.cpp | 19 ++-- Array-Jumper/source/Player/PlayerService.cpp | 36 ++++++++ Array-Jumper/source/Player/PlayerView.cpp | 87 ++++++++++++++----- .../UI/MainMenu/MainMenuUIController.cpp | 1 + 13 files changed, 306 insertions(+), 53 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 2cc9dc75..83719c24 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -110,7 +110,7 @@ Console true $(SolutionDir)sfml\lib;%(AdditionalLibraryDirectories) - sfml-system-d.lib;sfml-graphics-d.lib;sfml-window-d.lib;sfml-audio-d.lib;sfml-network-d.lib;%(AdditionalDependencies) + opengl32.lib;sfml-system-d.lib;sfml-graphics-d.lib;sfml-window-d.lib;sfml-audio-d.lib;sfml-network-d.lib;%(AdditionalDependencies) @@ -137,7 +137,9 @@ + + @@ -156,7 +158,9 @@ + + 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..c86a9fd2 100644 --- a/Array-Jumper/header/Global/ServiceLocator.h +++ b/Array-Jumper/header/Global/ServiceLocator.h @@ -3,6 +3,8 @@ #include "../../header/Event/EventService.h" #include "../../header/UI/UIService.h" #include "../../header/Sound/SoundService.h" +#include "../../header/Player/PlayerService.h" + namespace Global { @@ -13,6 +15,7 @@ namespace Global Event::EventService* event_service; Sound::SoundService* sound_service; UI::UIService* ui_service; + Player::PlayerService* player_service; ~ServiceLocator(); diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h new file mode 100644 index 00000000..81f13e1b --- /dev/null +++ b/Array-Jumper/header/Player/PlayerController.h @@ -0,0 +1,34 @@ +#pragma once + + namespace Player +{ + class PlayerModel; + class PlayerView; + enum class PlayerState; + class PlayerController + { + private: + + + PlayerModel* player_model; + PlayerView* player_view; + void destory(); + + public: + PlayerController(); + ~PlayerController(); + + + void initialize(); + void update(); + void render(); + + PlayerState getPlayerState(); + void setPlayerState(PlayerState newPlayerState); + + + + }; + +} + diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index 119ec9ac..4875133e 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -1,25 +1,34 @@ -#pragma once +#pragma once +#include "../../header/UI/UIElement/ImageView.h" namespace Player { + enum class PlayerState { ALIVE, DEAD }; - class PlayerModel { - private: + public: - PlayerState player_state; - int current_position; + PlayerState playerState; + int currentPosition; - public: PlayerState getPlayerState(); - void setPlayerState(PlayerState new_player_state); + + void setPlayerState(PlayerState newPlayerState); int getCurrentPosition(); - void setCurrentPosition(int new_position); + + void setCurrentPosition(int newPosition); + + void initialize(); + void update(); + void render(); + + }; + } diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h new file mode 100644 index 00000000..d24f9a5a --- /dev/null +++ b/Array-Jumper/header/Player/PlayerService.h @@ -0,0 +1,31 @@ +#pragma once +namespace Player +{ + class PlayerController; + + class PlayerService { + + private: + + PlayerController* player_controller; + + void destroy(); + + public: + PlayerService(); + ~PlayerService(); + + void initialize(); + void update(); + void render(); + + + + + + + + }; + + +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h index 780fc035..4ada4756 100644 --- a/Array-Jumper/header/Player/PlayerView.h +++ b/Array-Jumper/header/Player/PlayerView.h @@ -1,26 +1,31 @@ + #pragma once -#include "../../header/UI/UIElement/ImageView.h" -using namespace UI::UIElement; +#include "../../header/UI/UIElement/ImageView.h" +#include "../../header/Player/PlayerController.h" + namespace Player { class PlayerView { + private: - sf::RenderWindow* game_window; UI::UIElement::ImageView* player_image; + sf::RenderWindow* gameWindow; + PlayerController* player_controller; + float playerHeight; + float playerWidth; + + void initializePlayerImage(); + void drawPlayer(); + void loadPlayer(); + void calculatePlayerDimensions(); + void updatePlayerPosition(); + + sf::Vector2f calculatePlayerPosition(); - float player_height; - float player_width; - - void initializePlayerImage(); //Initialize player_image - void drawPlayer(); //Called every frame to render the sprite on the screen - void loadPlayer(); //Loads the information needed to render the player - void calculatePlayerDimensions(); //Calculate the size of image - void updatePlayerPosition(); //Updates the Player Sprite's position on each frame - sf::Vector2f calulcatePlayerPosition(); public: - PlayerView(); + PlayerView(PlayerController* controller); ~PlayerView(); void initialize(); @@ -28,9 +33,9 @@ namespace Player void render(); - }; + }; } \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 5aa28494..a9878611 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -1,6 +1,7 @@ #include "../../header/Global/ServiceLocator.h" #include "../../header/Main/GameService.h" #include "../../header/Event/EventService.h" +#include "../../header/Player/PlayerService.h" namespace Global { @@ -9,6 +10,7 @@ namespace Global using namespace Sound; using namespace UI; using namespace Main; + using namespace Player; ServiceLocator::ServiceLocator() { @@ -16,6 +18,7 @@ namespace Global event_service = nullptr; sound_service = nullptr; ui_service = nullptr; + player_service = nullptr; createServices(); } @@ -36,6 +39,10 @@ namespace Global event_service->initialize(); sound_service->initialize(); ui_service->initialize(); + if (GameService::getGameState() == GameState::GAMEPLAY) + { + player_service->update(); + } } void ServiceLocator::update() @@ -43,12 +50,20 @@ namespace Global graphic_service->update(); event_service->update(); ui_service->update(); + if (GameService::getGameState() == GameState::GAMEPLAY) + { + player_service->update(); + } } void ServiceLocator::render() { graphic_service->render(); ui_service->render(); + if (GameService::getGameState() == GameState::GAMEPLAY) + { + player_service->render(); + } } void ServiceLocator::clearAllServices() diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp new file mode 100644 index 00000000..000ed1ac --- /dev/null +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -0,0 +1,61 @@ +#include "../../header/Player/PlayerController.h" +#include "../../header/Player/PlayerView.h" +#include "../../header/Player/PlayerModel.h" + +namespace Player { + + PlayerController::PlayerController() + { + player_model = new PlayerModel(); + player_view = new PlayerView(this); + + } + + + + void PlayerController::destory() + { + delete (player_model); + delete (player_view); + } + + PlayerController::~PlayerController() + { + destory(); + } + + void PlayerController::initialize() + { + player_model->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 newPlayerState) + { + player_model->setPlayerState(newPlayerState); + } + + + + + + + + + +} diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index 366ac51c..8fcfac46 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -2,23 +2,26 @@ namespace Player { - PlayerState PlayerModel::getPlayerState() + + PlayerState Player::PlayerModel::getPlayerState() { - return player_state; + return PlayerState(); } - void PlayerModel::setPlayerState(PlayerState new_player_state) + void PlayerModel::setPlayerState(PlayerState newPlayerState) { - player_state = new_player_state; + playerState = newPlayerState; + } int PlayerModel::getCurrentPosition() { - return current_position; + return 0; } - void PlayerModel::setCurrentPosition(int new_position) + void PlayerModel::setCurrentPosition(int newPosition) { - current_position = new_position; + currentPosition = newPosition; } -} \ 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..989d11bf --- /dev/null +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -0,0 +1,36 @@ +#include "../../header/Player/PlayerService.h" +#include "../../header/Player/PlayerController.h" + +namespace Player +{ + + + PlayerService::PlayerService() { player_controller = new PlayerController(); } + + void PlayerService::destroy() + { + delete (player_controller); + } + PlayerService::~PlayerService() + { + destroy(); + } + + + void PlayerService::initialize() + { + player_controller->initialize(); + } + + void PlayerService::update() + { + player_controller->update(); + } + + void PlayerService::render() + { + player_controller->render(); + } + + +} diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index c0dd88f2..6775eb48 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -1,66 +1,109 @@ #include "../../header/Player/PlayerView.h" #include "../../header/Global/Config.h" #include "../../header/Global/ServiceLocator.h" +#include "../../header/Player/PlayerModel.h" + + + using namespace Global; + +enum class PlayerState; namespace Player { - PlayerView::PlayerView() + + + PlayerView::PlayerView(PlayerController* controller) { - game_window = nullptr; - player_image = new ImageView(); + player_controller = controller; + gameWindow = nullptr; } + PlayerView::~PlayerView() + + { + + } + + + + + + + + + void PlayerView::calculatePlayerDimensions() { - player_height = 1000.f; - player_width = 1000.f; + playerWidth = 1000.0f; + playerHeight = 1000.0f; + } + + + void PlayerView::initializePlayerImage() { + player_image->initialize(Config::character_texture_path, - player_width, - player_height, - sf::Vector2f(0, 0)); + playerWidth, + playerHeight, + sf::Vector2f(0, 0)); } + void PlayerView::loadPlayer() { calculatePlayerDimensions(); initializePlayerImage(); + + + } + void PlayerView::initialize() { - game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); loadPlayer(); + } - sf::Vector2f PlayerView::calulcatePlayerPosition() + + sf::Vector2f PlayerView::calculatePlayerPosition() { return sf::Vector2f(0, 0); } + void PlayerView::updatePlayerPosition() { - player_image->setPosition(calulcatePlayerPosition()); + player_image->setPosition(calculatePlayerPosition()); + + + } + void PlayerView::update() + { + updatePlayerPosition(); + } void PlayerView::drawPlayer() { player_image->render(); - } - - PlayerView::~PlayerView() {} - - - - void PlayerView::update() - { - //Yet to implement } + void PlayerView::render() { - //Yet to implement + switch (player_controller->getPlayerState()) + { + case Player::PlayerState::ALIVE: // Fully qualify PlayerState with namespace + drawPlayer(); + break; + + } } -} \ No newline at end of file + + + +} 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 d81a72e2a517ba9669efe151a8cc12ec6d57334f Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Mon, 2 Dec 2024 05:47:35 +0530 Subject: [PATCH 04/14] Done with background --- Array-Jumper/Array-Jumper.vcxproj | 8 ++ Array-Jumper/Array-Jumper.vcxproj.filters | 8 ++ Array-Jumper/header/Global/ServiceLocator.h | 5 + Array-Jumper/header/Level/LevelController.h | 23 +++++ Array-Jumper/header/Level/LevelModel.h | 8 ++ Array-Jumper/header/Level/LevelService.h | 21 ++++ Array-Jumper/header/Level/LevelView.h | 31 ++++++ Array-Jumper/header/Player/PlayerController.h | 53 +++++------ Array-Jumper/header/Player/PlayerModel.h | 33 +++---- Array-Jumper/header/Player/PlayerService.h | 16 +--- Array-Jumper/header/Player/PlayerView.h | 29 +++--- Array-Jumper/source/Global/ServiceLocator.cpp | 30 ++++-- Array-Jumper/source/Level/LevelController.cpp | 36 +++++++ Array-Jumper/source/Level/LevelModel.cpp | 0 Array-Jumper/source/Level/LevelService.cpp | 32 +++++++ Array-Jumper/source/Level/LevelView.cpp | 65 +++++++++++++ .../source/Player/PlayerController.cpp | 37 +++----- Array-Jumper/source/Player/PlayerModel.cpp | 25 +++-- Array-Jumper/source/Player/PlayerService.cpp | 16 +--- Array-Jumper/source/Player/PlayerView.cpp | 95 +++++++------------ .../UI/MainMenu/MainMenuUIController.cpp | 1 + 21 files changed, 380 insertions(+), 192 deletions(-) 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 83719c24..6c144039 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..e9cce31e 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 c86a9fd2..8a30a882 100644 --- a/Array-Jumper/header/Global/ServiceLocator.h +++ b/Array-Jumper/header/Global/ServiceLocator.h @@ -4,6 +4,8 @@ #include "../../header/UI/UIService.h" #include "../../header/Sound/SoundService.h" #include "../../header/Player/PlayerService.h" +#include "../../header/Level/LevelService.h" + namespace Global @@ -16,6 +18,7 @@ namespace Global Sound::SoundService* sound_service; UI::UIService* ui_service; Player::PlayerService* player_service; + Level::LevelService* level_service; ~ServiceLocator(); @@ -34,5 +37,7 @@ namespace Global Event::EventService* getEventService(); Sound::SoundService* getSoundService(); UI::UIService* getUIService(); + 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..5d5ef328 --- /dev/null +++ b/Array-Jumper/header/Level/LevelController.h @@ -0,0 +1,23 @@ +#pragma once +#include "LevelModel.h" +namespace Level +{ + class LevelView; + class LevelModel; + class LevelController + { + private: + LevelView* level_view; + LevelModel* level_model; + + + public : + LevelController(); + ~LevelController(); + + void initialize(); + void update(); + void render(); + + }; +} diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h new file mode 100644 index 00000000..c911891b --- /dev/null +++ b/Array-Jumper/header/Level/LevelModel.h @@ -0,0 +1,8 @@ +#pragma once +namespace Level +{ + class LevelModel + { + //... + }; +} diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h new file mode 100644 index 00000000..2b44636e --- /dev/null +++ b/Array-Jumper/header/Level/LevelService.h @@ -0,0 +1,21 @@ +#pragma once + +namespace Level +{ + class LevelController; + + class LevelService + { + private: + LevelController* level_controller; + + void destroy(); + public: + LevelService(); + ~LevelService(); + + void intialize(); + void update(); + void render(); + }; +} \ 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..50571c9b --- /dev/null +++ b/Array-Jumper/header/Level/LevelView.h @@ -0,0 +1,31 @@ +#pragma once +#include "LevelController.h" +#include "../../header/UI/UIElement/ImageView.h" + +namespace Level +{ + class LevelView + { + private: + + sf::RenderWindow* game_window; + LevelController* level_controller; + + UI::UIElement::ImageView* background_image; + const float background_alpha = 110.f; + + void createImages(); + void initializeImages(); + void updateImages(); + void drawLevel(); + void deleteImages(); + + public: + LevelView(LevelController* controller); + ~LevelView(); + + void initialize(); + void update(); + void render(); + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 81f13e1b..432b217c 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -1,34 +1,27 @@ #pragma once - namespace Player +namespace Player { - class PlayerModel; - class PlayerView; - enum class PlayerState; - class PlayerController - { - private: - - - PlayerModel* player_model; - PlayerView* player_view; - void destory(); - - public: - PlayerController(); - ~PlayerController(); - - - void initialize(); - void update(); - void render(); - - PlayerState getPlayerState(); - void setPlayerState(PlayerState newPlayerState); - - - + class PlayerView; + class PlayerModel; + enum class PlayerState; + class PlayerController + { + private: + PlayerModel* player_model; + PlayerView* player_view; + + void destroy(); + + public: + PlayerController(); + ~PlayerController(); + + void initialize(); + void update(); + void render(); + + PlayerState getPlayerState(); + void setPlayerState(PlayerState new_player_state); }; - -} - +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index 4875133e..a5f863df 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -1,34 +1,35 @@ - #pragma once -#include "../../header/UI/UIElement/ImageView.h" + + namespace Player { - enum class PlayerState { ALIVE, DEAD }; + class PlayerModel { - public: - - PlayerState playerState; - int currentPosition; + private: - PlayerState getPlayerState(); - - void setPlayerState(PlayerState newPlayerState); + - int getCurrentPosition(); + PlayerState player_state; + int current_position; + - void setCurrentPosition(int newPosition); + public: void initialize(); - void update(); - void render(); + PlayerState getPlayerState(); + void setPlayerState(PlayerState new_player_state); + void resetPlayer(); + void resetPosition(); + int getCurrentPosition(); + void setCurrentPosition(int new_position); + }; - -} +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index d24f9a5a..f50caab6 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -1,12 +1,11 @@ #pragma once + namespace Player { class PlayerController; - - class PlayerService { - + class PlayerService + { private: - PlayerController* player_controller; void destroy(); @@ -18,14 +17,5 @@ namespace Player void initialize(); void update(); void render(); - - - - - - - }; - - } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerView.h b/Array-Jumper/header/Player/PlayerView.h index 4ada4756..3545e498 100644 --- a/Array-Jumper/header/Player/PlayerView.h +++ b/Array-Jumper/header/Player/PlayerView.h @@ -1,28 +1,28 @@ - #pragma once -#include "../../header/UI/UIElement/ImageView.h" -#include "../../header/Player/PlayerController.h" +#include "../../header/Level/LevelModel.h" +#include "../../header/UI/UIElement/ImageView.h" + namespace Player { - + class PlayerController; class PlayerView { - private: - UI::UIElement::ImageView* player_image; - sf::RenderWindow* gameWindow; + sf::RenderWindow* game_window; PlayerController* player_controller; - float playerHeight; - float playerWidth; + UI::UIElement::ImageView* player_image; + + float player_height; + float player_width; + void initializePlayerImage(); void drawPlayer(); void loadPlayer(); - void calculatePlayerDimensions(); + void calculatePlayerDimensions(); void updatePlayerPosition(); - - sf::Vector2f calculatePlayerPosition(); + sf::Vector2f calulcatePlayerPosition(); public: PlayerView(PlayerController* controller); @@ -32,10 +32,5 @@ namespace Player void update(); void render(); - - - - }; - } \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index a9878611..f75812f0 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -1,7 +1,7 @@ #include "../../header/Global/ServiceLocator.h" #include "../../header/Main/GameService.h" #include "../../header/Event/EventService.h" -#include "../../header/Player/PlayerService.h" +#include "../../header/Level/LevelService.h" namespace Global { @@ -11,15 +11,18 @@ namespace Global using namespace UI; using namespace Main; using namespace Player; - + using namespace Level; + ServiceLocator::ServiceLocator() { graphic_service = nullptr; event_service = nullptr; sound_service = nullptr; ui_service = nullptr; + level_service = nullptr; + player_service = nullptr; - + createServices(); } @@ -30,7 +33,11 @@ namespace Global graphic_service = new GraphicService(); event_service = new EventService(); sound_service = new SoundService(); + + player_service = new PlayerService(); + ui_service = new UIService(); + level_service = new LevelService(); } void ServiceLocator::initialize() @@ -38,11 +45,10 @@ namespace Global graphic_service->initialize(); event_service->initialize(); sound_service->initialize(); + level_service->intialize(); + player_service->initialize(); + ui_service->initialize(); - if (GameService::getGameState() == GameState::GAMEPLAY) - { - player_service->update(); - } } void ServiceLocator::update() @@ -52,6 +58,7 @@ namespace Global ui_service->update(); if (GameService::getGameState() == GameState::GAMEPLAY) { + level_service->update(); player_service->update(); } } @@ -62,6 +69,7 @@ namespace Global ui_service->render(); if (GameService::getGameState() == GameState::GAMEPLAY) { + level_service->render(); player_service->render(); } } @@ -71,6 +79,10 @@ namespace Global delete(graphic_service); delete(event_service); delete(sound_service); + + delete(player_service); + delete(level_service); + delete(ui_service); } @@ -87,4 +99,8 @@ namespace Global SoundService* ServiceLocator::getSoundService() { return sound_service; } UIService* ServiceLocator::getUIService() { return ui_service; } + + LevelService* ServiceLocator::getLevelService() { return level_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..29673c7f --- /dev/null +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -0,0 +1,36 @@ +#include "../../header/Level/LevelController.h" +#include "../../header/Level/LevelView.h" +#include "../../header/Level/LevelModel.h" +namespace Level +{ + + + + + LevelController::LevelController() + { + level_view = new LevelView(this); + level_model = new LevelModel(); + } + + LevelController::~LevelController() + { + delete(level_view); delete(level_model); + } + + void LevelController::initialize() + { + level_view->initialize(); + } + + void LevelController::update() + { + level_view->update(); + } + + void LevelController::render() + { + level_view->render(); + } + +} diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp new file mode 100644 index 00000000..e69de29b diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp new file mode 100644 index 00000000..d3131cd5 --- /dev/null +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -0,0 +1,32 @@ +#include "../../header/Level/LevelService.h" +#include "../../header/Level/LevelController.h" + +namespace Level +{ + LevelService::LevelService() + { + level_controller = new LevelController(); + } + + LevelService::~LevelService() { destroy(); } + + void LevelService::intialize() + { + level_controller->initialize(); + } + + void LevelService::update() + { + level_controller->update(); + } + + void LevelService::render() + { + level_controller->render(); + } + + void LevelService::destroy() + { + delete(level_controller); + } +} diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp new file mode 100644 index 00000000..85859fd8 --- /dev/null +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -0,0 +1,65 @@ +#include "../../header/Level/LevelView.h" +#include "../../header/Global/ServiceLocator.h" +#include "../../header/Global/Config.h" + +namespace Level +{ + using namespace Global; + using namespace UI::UIElement; + using namespace Level; + + LevelView::LevelView(LevelController* controller) + { + game_window = nullptr; + level_controller = controller; + createImages(); + } + + LevelView::~LevelView() + { + deleteImages(); + } + + void LevelView::initialize() + { + game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + initializeImages(); + } + + void LevelView::update() + { + updateImages(); + } + + void LevelView::render() + { + drawLevel(); + } + + void LevelView::createImages() + { + background_image = new ImageView(); + } + + void LevelView::initializeImages() + { + 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::updateImages() + { + background_image->update(); + } + + void LevelView::drawLevel() + { + background_image->render(); + } + + void LevelView::deleteImages() + { + delete(background_image); + } + +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 000ed1ac..c7c2ba58 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -2,27 +2,15 @@ #include "../../header/Player/PlayerView.h" #include "../../header/Player/PlayerModel.h" -namespace Player { - +namespace Player +{ PlayerController::PlayerController() { player_model = new PlayerModel(); player_view = new PlayerView(this); - } - - - void PlayerController::destory() - { - delete (player_model); - delete (player_view); - } - - PlayerController::~PlayerController() - { - destory(); - } + PlayerController::~PlayerController() { destroy(); } void PlayerController::initialize() { @@ -45,17 +33,14 @@ namespace Player { return player_model->getPlayerState(); } - void PlayerController::setPlayerState(PlayerState newPlayerState) + void PlayerController::setPlayerState(PlayerState new_player_state) { - player_model->setPlayerState(newPlayerState); + player_model->setPlayerState(new_player_state); } - - - - - - - - -} + void PlayerController::destroy() + { + delete(player_model); + delete(player_view); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index 8fcfac46..b3bc8bf3 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -2,26 +2,31 @@ namespace Player { + void Player::PlayerModel::initialize() { /* Not Implemented */ } - PlayerState Player::PlayerModel::getPlayerState() + PlayerState PlayerModel::getPlayerState() { - return PlayerState(); + return player_state; } - void PlayerModel::setPlayerState(PlayerState newPlayerState) + void PlayerModel::setPlayerState(PlayerState new_player_state) { - playerState = newPlayerState; - + player_state = new_player_state; } - int PlayerModel::getCurrentPosition() + void PlayerModel::resetPlayer() { - return 0; + current_position = 0; + player_state = PlayerState::ALIVE; + } - void PlayerModel::setCurrentPosition(int newPosition) + void PlayerModel::resetPosition() { - currentPosition = newPosition; + current_position = 0; } -} + int PlayerModel::getCurrentPosition() { return current_position; } + void PlayerModel::setCurrentPosition(int new_position) { current_position = new_position; } + +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index 989d11bf..eaf0aa9d 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -3,19 +3,9 @@ namespace Player { - - PlayerService::PlayerService() { player_controller = new PlayerController(); } - void PlayerService::destroy() - { - delete (player_controller); - } - PlayerService::~PlayerService() - { - destroy(); - } - + PlayerService::~PlayerService() { destroy(); } void PlayerService::initialize() { @@ -32,5 +22,5 @@ namespace Player player_controller->render(); } - -} + void PlayerService::destroy() { delete(player_controller); } +} \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index 6775eb48..6b445fd4 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -1,109 +1,84 @@ #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" -using namespace Global; - -enum class PlayerState; namespace Player { - - + using namespace Global; + using namespace Level; + using namespace UI::UIElement; PlayerView::PlayerView(PlayerController* controller) { player_controller = controller; - gameWindow = nullptr; + player_image = new ImageView(); + game_window = nullptr; } - PlayerView::~PlayerView() + PlayerView::~PlayerView() {} + void PlayerView::initialize() { - + game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + loadPlayer(); } - - - - - - - - - void PlayerView::calculatePlayerDimensions() + void PlayerView::update() { - playerWidth = 1000.0f; - playerHeight = 1000.0f; - - + updatePlayerPosition(); } - - - void PlayerView::initializePlayerImage() + void PlayerView::render() { - - player_image->initialize(Config::character_texture_path, - playerWidth, - playerHeight, - sf::Vector2f(0, 0)); - + switch (player_controller->getPlayerState()) + { + case PlayerState::ALIVE: + drawPlayer(); + break; + } } void PlayerView::loadPlayer() { calculatePlayerDimensions(); initializePlayerImage(); - - - } - void PlayerView::initialize() + void PlayerView::initializePlayerImage() { - ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); - loadPlayer(); + player_image->initialize(Config::character_texture_path, + player_width, + player_height, + sf::Vector2f(0, 0)); } - sf::Vector2f PlayerView::calculatePlayerPosition() + void PlayerView::calculatePlayerDimensions() { - return sf::Vector2f(0, 0); + + player_height = 1000.0f; + player_width = 1000.0f; } void PlayerView::updatePlayerPosition() { - player_image->setPosition(calculatePlayerPosition()); - - + player_image->setPosition(calulcatePlayerPosition()); } - void PlayerView::update() - { - updatePlayerPosition(); - } - void PlayerView::drawPlayer() + sf::Vector2f PlayerView::calulcatePlayerPosition() { - player_image->render(); - - + + return sf::Vector2f(0, 0); } - void PlayerView::render() + void PlayerView::drawPlayer() { - switch (player_controller->getPlayerState()) - { - case Player::PlayerState::ALIVE: // Fully qualify PlayerState with namespace - drawPlayer(); - break; - - } + player_image->render(); } - - -} +} \ No newline at end of file diff --git a/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp index 7a572427..1e753735 100644 --- a/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp +++ b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp @@ -78,6 +78,7 @@ namespace UI GameService::setGameState(GameState::GAMEPLAY); } + void MainMenuUIController::instructionsButtonCallback() { ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::BUTTON_CLICK); From 718d4762bb079335718688e2caadfa5ad6e493d9 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Wed, 4 Dec 2024 06:34:04 +0530 Subject: [PATCH 05/14] Create Data for Level --- Array-Jumper/header/Level/BlockType.h | 13 +++++++++++++ Array-Jumper/header/Level/LevelData.h | 23 +++++++++++++++++++++++ Array-Jumper/header/Level/LevelModel.h | 24 ++++++++++++++++++++++-- Array-Jumper/source/Level/LevelModel.cpp | 12 ++++++++++++ 4 files changed, 70 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/header/Level/BlockType.h b/Array-Jumper/header/Level/BlockType.h new file mode 100644 index 00000000..50343ebf --- /dev/null +++ b/Array-Jumper/header/Level/BlockType.h @@ -0,0 +1,13 @@ +#pragma once +namespace Level +{ + enum 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/LevelData.h b/Array-Jumper/header/Level/LevelData.h new file mode 100644 index 00000000..b5406b2f --- /dev/null +++ b/Array-Jumper/header/Level/LevelData.h @@ -0,0 +1,23 @@ +#pragma once +#include "BlockType.h" + +namespace Level +{ + + struct LevelData + { + static const int NUMBER_OF_BOXES = 10; + + BlockType level_boxes[NUMBER_OF_BOXES] = { + BlockType::ONE, + BlockType::TWO, + BlockType::OBSTACLE_ONE, + BlockType::TWO, + BlockType::THREE, + BlockType::ONE, + BlockType::OBSTACLE_TWO, + BlockType::TWO, + BlockType::ONE, + BlockType::TARGET }; + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index c911891b..271ded1d 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -1,8 +1,28 @@ #pragma once +#include "LevelData.h" + namespace Level { + + struct BoxDimensions + { + float box_width; + float box_height; + float box_spacing; + + float box_spacing_percentage = 0.3f; + float bottom_offset = 200.f; + }; + class LevelModel { - //... + private: + LevelData current_level_data; + + public: + LevelModel(); + ~LevelModel(); + + BlockType getCurrentBoxValue(int currentPosition); }; -} +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp index e69de29b..13244e39 100644 --- a/Array-Jumper/source/Level/LevelModel.cpp +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -0,0 +1,12 @@ +#include "../../header/Level/LevelModel.h" + +namespace Level +{ + LevelModel::LevelModel() {} + LevelModel::~LevelModel() {} + + BlockType LevelModel::getCurrentBoxValue(int currentPosition) + { + return current_level_data.level_boxes[currentPosition]; + } +} \ No newline at end of file From 6ed33a1304165a703f829d5cc3b96ee2bf75a2f8 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Wed, 4 Dec 2024 07:07:28 +0530 Subject: [PATCH 06/14] Draw a Box with Overlay --- Array-Jumper/Array-Jumper.vcxproj | 2 + Array-Jumper/Array-Jumper.vcxproj.filters | 2 + Array-Jumper/header/Level/LevelController.h | 11 ++- Array-Jumper/header/Level/LevelView.h | 22 +++++ Array-Jumper/source/Global/ServiceLocator.cpp | 6 +- Array-Jumper/source/Level/LevelController.cpp | 5 ++ Array-Jumper/source/Level/LevelView.cpp | 84 +++++++++++++++++++ 7 files changed, 126 insertions(+), 6 deletions(-) diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 6c144039..79aae201 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -162,7 +162,9 @@ + + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index e9cce31e..7cfa11fd 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -90,6 +90,8 @@ + + diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index 5d5ef328..16f83bb3 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -1,17 +1,18 @@ #pragma once #include "LevelModel.h" + namespace Level { class LevelView; class LevelModel; + class LevelController { private: LevelView* level_view; LevelModel* level_model; - - public : + public: LevelController(); ~LevelController(); @@ -19,5 +20,9 @@ namespace Level void update(); void render(); + BlockType getCurrentBoxValue(int currentPosition); + + + }; -} +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h index 50571c9b..e48619cc 100644 --- a/Array-Jumper/header/Level/LevelView.h +++ b/Array-Jumper/header/Level/LevelView.h @@ -1,4 +1,6 @@ #pragma once +#include "LevelModel.h" +#include "LevelData.h" #include "LevelController.h" #include "../../header/UI/UIElement/ImageView.h" @@ -14,12 +16,29 @@ namespace Level UI::UIElement::ImageView* background_image; const float background_alpha = 110.f; + UI::UIElement::ImageView* box_image; + 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; + + BoxDimensions box_dimensions; + void createImages(); void initializeImages(); void updateImages(); void drawLevel(); + void drawBox(sf::Vector2f position); + void drawBoxValue(sf::Vector2f position, BlockType box_value); void deleteImages(); + void calculateBoxDimensions(); + sf::Vector2f calculateBoxPosition(int index); + void calculateBoxWidthHeight(); + void calculateBoxSpacing(); + UI::UIElement::ImageView* getBoxOverlayImage(BlockType block_type); public: LevelView(LevelController* controller); ~LevelView(); @@ -27,5 +46,8 @@ namespace Level void initialize(); void update(); void render(); + + BoxDimensions getBoxDimensions(); + }; } \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index f75812f0..c3d0d1ab 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -20,8 +20,8 @@ namespace Global sound_service = nullptr; ui_service = nullptr; level_service = nullptr; - - player_service = nullptr; + player_service = nullptr; + createServices(); } @@ -70,7 +70,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 29673c7f..c58a895c 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -33,4 +33,9 @@ namespace Level level_view->render(); } + BlockType LevelController::getCurrentBoxValue(int currentPosition) + { + return level_model->getCurrentBoxValue(currentPosition); + } + } diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp index 85859fd8..3603b5e7 100644 --- a/Array-Jumper/source/Level/LevelView.cpp +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -29,6 +29,7 @@ namespace Level void LevelView::update() { updateImages(); + } void LevelView::render() @@ -39,27 +40,110 @@ namespace Level void LevelView::createImages() { 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::initializeImages() { 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_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + target_overlay_image->initialize(Config::target_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + letter_one_overlay_image->initialize(Config::letter_one_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + letter_two_overlay_image->initialize(Config::letter_two_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + letter_three_overlay_image->initialize(Config::letter_three_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + obstacle_one_overlay_image->initialize(Config::obstacle_01_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); + obstacle_two_overlay_image->initialize(Config::obstacle_02_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); } void LevelView::updateImages() { 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::drawLevel() { background_image->render(); + drawBox(sf::Vector2f(0, 0)); + BlockType blockTypeToDraw = level_controller->getCurrentBoxValue(0); + drawBoxValue(sf::Vector2f(0, 0), blockTypeToDraw); + + } + + void LevelView::drawBox(sf::Vector2f position) + { + box_image->setPosition(position); + box_image->render(); + } + + void LevelView::drawBoxValue(sf::Vector2f position, BlockType box_value) + { + ImageView* image = getBoxOverlayImage(box_value); + image->setPosition(position); + image->render(); } + void LevelView::calculateBoxDimensions() + { + + if (!game_window) return; + + box_dimensions.box_width = 300.f; + box_dimensions.box_height = 300.f; + } + ImageView* LevelView::getBoxOverlayImage(BlockType block_type) + { + switch (block_type) + { + case BlockType::OBSTACLE_ONE: + return obstacle_one_overlay_image; + + case BlockType::OBSTACLE_TWO: + return obstacle_two_overlay_image; + + case BlockType::ONE: + return letter_one_overlay_image; + + case BlockType::TWO: + return letter_two_overlay_image; + + case BlockType::THREE: + return letter_three_overlay_image; + + case BlockType::TARGET: + return target_overlay_image; + } + return nullptr; + } + + + void LevelView::deleteImages() { 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 90d1faf437e5ee9bc9276164a72571ad6d1fbdc1 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Sat, 7 Dec 2024 13:05:55 +0530 Subject: [PATCH 07/14] Done with Level --- Array-Jumper/assets/textures/target.png | Bin 0 -> 211853 bytes Array-Jumper/header/Level/BlockType.h | 13 +++- Array-Jumper/header/Level/LevelController.h | 4 +- Array-Jumper/header/Level/LevelModel.h | 1 + Array-Jumper/header/Level/LevelService.h | 5 ++ Array-Jumper/header/Level/LevelView.h | 1 - Array-Jumper/header/Player/PlayerController.h | 3 + Array-Jumper/header/Player/PlayerModel.h | 6 -- Array-Jumper/header/Player/PlayerView.h | 3 +- Array-Jumper/source/Global/ServiceLocator.cpp | 4 +- Array-Jumper/source/Level/LevelController.cpp | 18 ++--- Array-Jumper/source/Level/LevelService.cpp | 12 +++- Array-Jumper/source/Level/LevelView.cpp | 68 +++++++++++++++--- .../source/Player/PlayerController.cpp | 16 +++++ Array-Jumper/source/Player/PlayerModel.cpp | 19 +++-- Array-Jumper/source/Player/PlayerService.cpp | 2 + Array-Jumper/source/Player/PlayerView.cpp | 11 +-- 17 files changed, 135 insertions(+), 51 deletions(-) create mode 100644 Array-Jumper/assets/textures/target.png diff --git a/Array-Jumper/assets/textures/target.png b/Array-Jumper/assets/textures/target.png new file mode 100644 index 0000000000000000000000000000000000000000..9362ec2436a8d2ab4a210d60b30f9f4ee4c6e0fb GIT binary patch literal 211853 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�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

IF%&oAmPuB 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 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 c58a895c..5b8c1049 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -1,22 +1,19 @@ #include "../../header/Level/LevelController.h" #include "../../header/Level/LevelView.h" #include "../../header/Level/LevelModel.h" +#include "../../header/Level/LevelData.h" +#include "../../header/Main/GameService.h" + namespace Level { - - - LevelController::LevelController() { level_view = new LevelView(this); level_model = new LevelModel(); } - LevelController::~LevelController() - { - delete(level_view); delete(level_model); - } + LevelController::~LevelController() {} void LevelController::initialize() { @@ -33,9 +30,14 @@ namespace Level level_view->render(); } + BoxDimensions LevelController::getBoxDimensions() + { + return level_view->getBoxDimensions(); + } + BlockType LevelController::getCurrentBoxValue(int currentPosition) { return level_model->getCurrentBoxValue(currentPosition); } -} +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp index d3131cd5..a4c60f0b 100644 --- a/Array-Jumper/source/Level/LevelService.cpp +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -25,8 +25,18 @@ namespace Level level_controller->render(); } + BoxDimensions LevelService::getBoxDimensions() + { + return level_controller->getBoxDimensions(); + } + + BlockType LevelService::getCurrentBoxValue(int currentPosition) + { + return level_controller->getCurrentBoxValue(currentPosition); + } + void LevelService::destroy() { delete(level_controller); } -} +} \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelView.cpp b/Array-Jumper/source/Level/LevelView.cpp index 3603b5e7..4072925f 100644 --- a/Array-Jumper/source/Level/LevelView.cpp +++ b/Array-Jumper/source/Level/LevelView.cpp @@ -1,4 +1,6 @@ #include "../../header/Level/LevelView.h" +#include "../../header/Level/LevelModel.h" +#include "../../header/Level/LevelData.h" #include "../../header/Global/ServiceLocator.h" #include "../../header/Global/Config.h" @@ -23,13 +25,13 @@ namespace Level void LevelView::initialize() { game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow(); + calculateBoxDimensions(); initializeImages(); } void LevelView::update() { updateImages(); - } void LevelView::render() @@ -37,6 +39,11 @@ namespace Level drawLevel(); } + BoxDimensions LevelView::getBoxDimensions() + { + return box_dimensions; + } + void LevelView::createImages() { background_image = new ImageView(); @@ -55,6 +62,7 @@ namespace Level 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_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); target_overlay_image->initialize(Config::target_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); letter_one_overlay_image->initialize(Config::letter_one_texture_path, box_dimensions.box_width, box_dimensions.box_height, sf::Vector2f(0, 0)); @@ -80,10 +88,16 @@ namespace Level void LevelView::drawLevel() { 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_BOXES; ++i) + { + sf::Vector2f position = calculateBoxPosition(i); + BlockType blockTypeToDraw = level_controller->getCurrentBoxValue(i); + + + drawBox(position); + drawBoxValue(position, blockTypeToDraw); + } } void LevelView::drawBox(sf::Vector2f position) @@ -99,14 +113,48 @@ namespace Level image->render(); } + + void LevelView::calculateBoxDimensions() { - if (!game_window) return; - - box_dimensions.box_width = 300.f; - box_dimensions.box_height = 300.f; + + calculateBoxWidthHeight(); + calculateBoxSpacing(); + + } + + + void LevelView::calculateBoxWidthHeight() + { + float screenWidth = static_cast(game_window->getSize().x); + int numBoxes = LevelData::NUMBER_OF_BOXES; + + //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_dimensions.box_spacing_percentage * static_cast(numGaps); + + //Total space consumed by boxes and gaps + float totalSpace = numBoxes + totalSpaceByGaps; + + box_dimensions.box_width = screenWidth / (totalSpace); + box_dimensions.box_height = box_dimensions.box_width; + } + + void LevelView::calculateBoxSpacing() + { + box_dimensions.box_spacing = box_dimensions.box_spacing_percentage * box_dimensions.box_width; + } + + sf::Vector2f LevelView::calculateBoxPosition(int index) + { + float xPosition = box_dimensions.box_spacing + static_cast(index) * (box_dimensions.box_width + box_dimensions.box_spacing); + float yPosition = static_cast(game_window->getSize().y) - box_dimensions.box_height - box_dimensions.bottom_offset; + return sf::Vector2f(xPosition, yPosition); } + ImageView* LevelView::getBoxOverlayImage(BlockType block_type) { switch (block_type) @@ -132,8 +180,6 @@ namespace Level return nullptr; } - - void LevelView::deleteImages() { delete(background_image); diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index c7c2ba58..4b24ae96 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -2,6 +2,8 @@ #include "../../header/Player/PlayerView.h" #include "../../header/Player/PlayerModel.h" + + namespace Player { PlayerController::PlayerController() @@ -16,6 +18,8 @@ namespace Player { player_model->initialize(); player_view->initialize(); + + resetPlayer(); } void PlayerController::update() @@ -38,9 +42,21 @@ namespace Player player_model->setPlayerState(new_player_state); } + int PlayerController::getCurrentPosition() + { + return player_model->getCurrentPosition(); + } + + void PlayerController::destroy() { delete(player_model); delete(player_view); } + + void PlayerController::resetPlayer() + { + player_model->setCurrentPosition(0); + player_model->setPlayerState(PlayerState::ALIVE); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index b3bc8bf3..182209fb 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -2,7 +2,10 @@ namespace Player { - void Player::PlayerModel::initialize() { /* Not Implemented */ } + void Player::PlayerModel::initialize() + { + //Yet to implement + } PlayerState PlayerModel::getPlayerState() { @@ -14,19 +17,13 @@ namespace Player player_state = new_player_state; } - void PlayerModel::resetPlayer() + int PlayerModel::getCurrentPosition() { - current_position = 0; - player_state = PlayerState::ALIVE; - + return current_position; } - void PlayerModel::resetPosition() + void PlayerModel::setCurrentPosition(int new_position) { - current_position = 0; + current_position = new_position; } - - int PlayerModel::getCurrentPosition() { return current_position; } - void PlayerModel::setCurrentPosition(int new_position) { current_position = new_position; } - } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index eaf0aa9d..4dc3b89e 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -1,6 +1,7 @@ #include "../../header/Player/PlayerService.h" #include "../../header/Player/PlayerController.h" + namespace Player { PlayerService::PlayerService() { player_controller = new PlayerController(); } @@ -22,5 +23,6 @@ namespace Player player_controller->render(); } + void PlayerService::destroy() { delete(player_controller); } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp index 6b445fd4..c7458745 100644 --- a/Array-Jumper/source/Player/PlayerView.cpp +++ b/Array-Jumper/source/Player/PlayerView.cpp @@ -59,9 +59,9 @@ namespace Player void PlayerView::calculatePlayerDimensions() { - - player_height = 1000.0f; - player_width = 1000.0f; + current_box_dimensions = ServiceLocator::getInstance()->getLevelService()->getBoxDimensions(); + player_height = current_box_dimensions.box_height; + player_width = current_box_dimensions.box_width; } void PlayerView::updatePlayerPosition() @@ -71,8 +71,9 @@ namespace Player sf::Vector2f PlayerView::calulcatePlayerPosition() { - - return sf::Vector2f(0, 0); + 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 b93a1abee7da9d877750e5e4b584ad0e4dd9b34a Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Mon, 9 Dec 2024 06:56:01 +0530 Subject: [PATCH 08/14] DOne with moement --- Array-Jumper/Array-Jumper.vcxproj | 1 + .../header/Player/MovementDirection.h | 11 ++++ Array-Jumper/header/Player/PlayerController.h | 11 +++- .../source/Player/PlayerController.cpp | 61 ++++++++++++++++++- 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 Array-Jumper/header/Player/MovementDirection.h diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 79aae201..42a4e53e 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -168,6 +168,7 @@ + diff --git a/Array-Jumper/header/Player/MovementDirection.h b/Array-Jumper/header/Player/MovementDirection.h new file mode 100644 index 00000000..43f22c95 --- /dev/null +++ b/Array-Jumper/header/Player/MovementDirection.h @@ -0,0 +1,11 @@ + +#pragma once + +namespace Player +{ + enum MovementDirection + { + FORWARD, + BACKWARD + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index f951a01c..d3e82394 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -1,4 +1,9 @@ #pragma once +#include "../../header/Event/EventService.h" +#include "MovementDirection.h" + + + namespace Player { @@ -10,7 +15,8 @@ namespace Player private: PlayerModel* player_model; PlayerView* player_view; - + Event::EventService* event_service; + void readInput(); void destroy(); void resetPlayer(); @@ -26,5 +32,8 @@ namespace Player void setPlayerState(PlayerState new_player_state); int getCurrentPosition(); + + void move(MovementDirection direction); + bool isPositionInBound(int targetPosition); }; } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 4b24ae96..b8f869f0 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -1,11 +1,21 @@ #include "../../header/Player/PlayerController.h" #include "../../header/Player/PlayerView.h" #include "../../header/Player/PlayerModel.h" +#include "../../header/Level/LevelData.h" +#include "../../header/Global/ServiceLocator.h" +#include "../../header/Sound/SoundService.h" + namespace Player { + using namespace Global; + using namespace Level; + using namespace Sound; + + + PlayerController::PlayerController() { player_model = new PlayerModel(); @@ -18,18 +28,20 @@ namespace Player { player_model->initialize(); player_view->initialize(); - + event_service = ServiceLocator::getInstance()->getEventService(); resetPlayer(); } void PlayerController::update() { player_view->update(); + readInput(); } void PlayerController::render() { player_view->render(); + } PlayerState PlayerController::getPlayerState() @@ -47,6 +59,53 @@ namespace Player return player_model->getCurrentPosition(); } + void PlayerController::move(MovementDirection direction) + { + + int steps, targetPosition; + switch (direction) + { + case MovementDirection::FORWARD: + steps = 1; + break; + case MovementDirection::BACKWARD: + steps = -1; + break; + default: + steps = 0; + break; + } + + targetPosition = player_model->getCurrentPosition() + steps; + if (!isPositionInBound(targetPosition)) + return; + + player_model->setCurrentPosition(targetPosition); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); + } + + bool PlayerController::isPositionInBound(int targetPosition) + { + if (targetPosition >= 0 && targetPosition < LevelData::NUMBER_OF_BOXES) + return true; + return false; + } + + + + + void PlayerController::readInput() + { + if (event_service->pressedRightArrowKey() || event_service->pressedDKey()) + { + move(MovementDirection::FORWARD); + } + if (event_service->pressedLeftArrowKey() || event_service->pressedAKey()) + { + move(MovementDirection::BACKWARD); + } + + } void PlayerController::destroy() { From 68fc6d9689b2877e5454769fa2375c028cf0aad3 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Mon, 9 Dec 2024 07:08:20 +0530 Subject: [PATCH 09/14] DOne with jump --- Array-Jumper/header/Player/PlayerController.h | 2 + .../source/Player/PlayerController.cpp | 41 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index d3e82394..1f8f2849 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -35,5 +35,7 @@ namespace Player void move(MovementDirection direction); bool isPositionInBound(int targetPosition); + void jump(MovementDirection direction); + }; } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index b8f869f0..6acceb9f 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -91,6 +91,37 @@ namespace Player return false; } + void PlayerController::jump(MovementDirection direction) + { + int current_position = player_model->getCurrentPosition(); + BlockType box_value = ServiceLocator::getInstance()->getLevelService()->getCurrentBoxValue(current_position); + int steps, targetPosition; + + switch (direction) + { + case MovementDirection::FORWARD: + steps = box_value; + break; + case MovementDirection::BACKWARD: + steps = -box_value; + break; + default: + steps = 0; + break; + } + + targetPosition = current_position + steps; + + if (!isPositionInBound(targetPosition)) + return; + + player_model->setCurrentPosition(targetPosition); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::JUMP); + + } + + + @@ -98,11 +129,17 @@ namespace Player { if (event_service->pressedRightArrowKey() || event_service->pressedDKey()) { - move(MovementDirection::FORWARD); + if (event_service->heldSpaceKey()) + jump(MovementDirection::FORWARD); + else + move(MovementDirection::FORWARD); } if (event_service->pressedLeftArrowKey() || event_service->pressedAKey()) { - move(MovementDirection::BACKWARD); + if (event_service->heldSpaceKey()) + jump(MovementDirection::BACKWARD); + else + move(MovementDirection::BACKWARD); } } From 21019f4ea145b9103de43a1ce7011db53bbf155e Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Wed, 11 Dec 2024 06:50:22 +0530 Subject: [PATCH 10/14] dd --- Array-Jumper/Array-Jumper.vcxproj | 4 ++ .../header/Gameplay/GameplayController.h | 21 ++++++++ .../header/Gameplay/GameplayService.h | 21 ++++++++ Array-Jumper/header/Global/ServiceLocator.h | 5 ++ Array-Jumper/header/Player/PlayerController.h | 1 + Array-Jumper/header/Player/PlayerModel.h | 1 + Array-Jumper/header/Player/PlayerService.h | 1 + .../source/Gameplay/GameplayController.cpp | 49 +++++++++++++++++++ .../source/Gameplay/GameplayService .cpp | 30 ++++++++++++ Array-Jumper/source/Global/ServiceLocator.cpp | 18 ++++++- .../source/Player/PlayerController.cpp | 9 ++++ Array-Jumper/source/Player/PlayerModel.cpp | 5 ++ Array-Jumper/source/Player/PlayerService.cpp | 5 ++ 13 files changed, 169 insertions(+), 1 deletion(-) 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/GameplayController.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 42a4e53e..a0108cfa 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -133,6 +133,8 @@ + + @@ -160,6 +162,8 @@ + + diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h new file mode 100644 index 00000000..d85d87b3 --- /dev/null +++ b/Array-Jumper/header/Gameplay/GameplayController.h @@ -0,0 +1,21 @@ +#pragma once +#include "../../header/Level/BlockType.h" +namespace Gameplay +{ + class GameplayController + { + private: + + void processObstacle(); + bool isObstacle(Level::BlockType value); + + public: + void intialize(); + void update(); + void render(); + 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..ae94408e --- /dev/null +++ b/Array-Jumper/header/Gameplay/GameplayService.h @@ -0,0 +1,21 @@ +#pragma once +#include "GameplayController.h" +namespace Gameplay +{ + + class GameplayService + { + private: + + GameplayController* gameplay_controller; + + public: + GameplayService(); + ~GameplayService(); + void intialize(); + void update(); + void render(); + + void onPositionChanged(int position); + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Global/ServiceLocator.h b/Array-Jumper/header/Global/ServiceLocator.h index 8a30a882..5502e76a 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" @@ -19,6 +20,7 @@ namespace Global UI::UIService* ui_service; Player::PlayerService* player_service; Level::LevelService* level_service; + Gameplay::GameplayService* gameplay_service; ~ServiceLocator(); @@ -37,7 +39,10 @@ namespace Global Event::EventService* getEventService(); Sound::SoundService* getSoundService(); 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 1f8f2849..247c1fe1 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -36,6 +36,7 @@ namespace Player void move(MovementDirection direction); bool isPositionInBound(int targetPosition); void jump(MovementDirection direction); + void takeDamage(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index 5217e713..afe9d0ff 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -25,5 +25,6 @@ namespace Player int getCurrentPosition(); void setCurrentPosition(int new_position); + void resetPlayer(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index f50caab6..c0e70c83 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -17,5 +17,6 @@ namespace Player void initialize(); void update(); void render(); + void takeDamage(); }; } \ No newline at end of file diff --git a/Array-Jumper/source/Gameplay/GameplayController.cpp b/Array-Jumper/source/Gameplay/GameplayController.cpp new file mode 100644 index 00000000..0fe094e1 --- /dev/null +++ b/Array-Jumper/source/Gameplay/GameplayController.cpp @@ -0,0 +1,49 @@ +#include "../../header/Gameplay/GameplayController.h" +#include "../../header/Global/ServiceLocator.h" +#include "../../header/Level/LevelData.h" +#include "../../header/Sound/SoundService.h" +#include "../../header/Main/GameService.h" +namespace Gameplay +{ + using namespace Global; + using namespace Level; + using namespace Sound; + using namespace Main; + void Gameplay::GameplayController::intialize() + { + } + + void Gameplay::GameplayController::update() + { + } + + void Gameplay::GameplayController::render() + { + } + + void GameplayController::onPositionChanged(int position) + { + + BlockType value = ServiceLocator::getInstance()->getLevelService()->getCurrentBoxValue(position); + + if (isObstacle(value)) + processObstacle(); + + } + + void GameplayController::processObstacle() + { + ServiceLocator::getInstance()->getPlayerService()->takeDamage(); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::DEATH); + + } + + bool GameplayController::isObstacle(Level::BlockType value) + { + if (value == BlockType::OBSTACLE_ONE || value == BlockType::OBSTACLE_TWO) + return true; + return false; + } + + +} \ 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..94a42aa5 --- /dev/null +++ b/Array-Jumper/source/Gameplay/GameplayService .cpp @@ -0,0 +1,30 @@ +#include "../../header/Gameplay/GameplayService.h" + +namespace Gameplay +{ + GameplayService::GameplayService() + { + gameplay_controller = new GameplayController(); + } + GameplayService::~GameplayService() + { + } + void Gameplay::GameplayService::intialize() + { + gameplay_controller->intialize(); + } + + void Gameplay::GameplayService::update() + { + gameplay_controller->update(); + } + + void Gameplay::GameplayService::render() + { + gameplay_controller->render(); + } + void GameplayService::onPositionChanged(int position) + { + gameplay_controller->onPositionChanged(position); + } +} \ No newline at end of file diff --git a/Array-Jumper/source/Global/ServiceLocator.cpp b/Array-Jumper/source/Global/ServiceLocator.cpp index 3826c9d4..0336187c 100644 --- a/Array-Jumper/source/Global/ServiceLocator.cpp +++ b/Array-Jumper/source/Global/ServiceLocator.cpp @@ -12,6 +12,7 @@ namespace Global using namespace Main; using namespace Player; using namespace Level; + using namespace Gameplay; ServiceLocator::ServiceLocator() { @@ -21,7 +22,7 @@ namespace Global ui_service = nullptr; level_service = nullptr; player_service = nullptr; - + gameplay_service = nullptr; createServices(); } @@ -38,6 +39,7 @@ namespace Global ui_service = new UIService(); level_service = new LevelService(); + gameplay_service = new GameplayService(); } void ServiceLocator::initialize() @@ -49,6 +51,7 @@ namespace Global player_service->initialize(); ui_service->initialize(); + gameplay_service->intialize(); } void ServiceLocator::update() @@ -60,6 +63,7 @@ namespace Global { level_service->update(); player_service->update(); + gameplay_service->update(); } } @@ -73,6 +77,7 @@ namespace Global level_service->render(); player_service->render(); + gameplay_service->render(); } } @@ -86,6 +91,7 @@ namespace Global delete(level_service); delete(ui_service); + delete(gameplay_service); } ServiceLocator* ServiceLocator::getInstance() @@ -102,7 +108,17 @@ namespace Global UIService* ServiceLocator::getUIService() { return ui_service; } + Player::PlayerService* ServiceLocator::getPlayerService() + { + return player_service; + } + LevelService* ServiceLocator::getLevelService() { return level_service; } + Gameplay::GameplayService* ServiceLocator::getGameplayService() + { + return gameplay_service; + } + } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 6acceb9f..2133bd27 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -82,6 +82,7 @@ namespace Player player_model->setCurrentPosition(targetPosition); ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::MOVE); + ServiceLocator::getInstance()->getGameplayService()->onPositionChanged(targetPosition); } bool PlayerController::isPositionInBound(int targetPosition) @@ -117,6 +118,14 @@ namespace Player player_model->setCurrentPosition(targetPosition); ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::JUMP); + ServiceLocator::getInstance()->getGameplayService()->onPositionChanged(targetPosition); + + } + + void PlayerController::takeDamage() + { + player_model->resetPlayer(); + } diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index 182209fb..40a17d7c 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -26,4 +26,9 @@ namespace Player { current_position = new_position; } + 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 4dc3b89e..02959e31 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -23,6 +23,11 @@ namespace Player player_controller->render(); } + void PlayerService::takeDamage() + { + player_controller->takeDamage(); + } + void PlayerService::destroy() { delete(player_controller); } } \ No newline at end of file From e562c5cbf87a9e92d856947d475bb0c6a3caf640 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Wed, 11 Dec 2024 07:00:24 +0530 Subject: [PATCH 11/14] gameplay --- .../header/Gameplay/GameplayController.h | 3 +++ Array-Jumper/header/Player/PlayerController.h | 3 ++- Array-Jumper/header/Player/PlayerService.h | 1 + .../source/Gameplay/GameplayController.cpp | 17 ++++++++++++++++- Array-Jumper/source/Player/PlayerService.cpp | 5 +++++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h index d85d87b3..1a79776b 100644 --- a/Array-Jumper/header/Gameplay/GameplayController.h +++ b/Array-Jumper/header/Gameplay/GameplayController.h @@ -8,12 +8,15 @@ namespace Gameplay void processObstacle(); bool isObstacle(Level::BlockType value); + bool isEndBlock(Level::BlockType value); + void processEndBlock(); public: void intialize(); void update(); void render(); void onPositionChanged(int position); + }; diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 247c1fe1..8c92dd6e 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -18,7 +18,7 @@ namespace Player Event::EventService* event_service; void readInput(); void destroy(); - void resetPlayer(); + public: PlayerController(); @@ -37,6 +37,7 @@ namespace Player bool isPositionInBound(int targetPosition); void jump(MovementDirection direction); void takeDamage(); + void resetPlayer(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index c0e70c83..56bc629b 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -18,5 +18,6 @@ namespace Player void update(); void render(); void takeDamage(); + void levelComplete(); }; } \ No newline at end of file diff --git a/Array-Jumper/source/Gameplay/GameplayController.cpp b/Array-Jumper/source/Gameplay/GameplayController.cpp index 0fe094e1..0adc2ef7 100644 --- a/Array-Jumper/source/Gameplay/GameplayController.cpp +++ b/Array-Jumper/source/Gameplay/GameplayController.cpp @@ -28,7 +28,8 @@ namespace Gameplay if (isObstacle(value)) processObstacle(); - + if (isEndBlock(value)) + processEndBlock(); } void GameplayController::processObstacle() @@ -45,5 +46,19 @@ namespace Gameplay return false; } + bool GameplayController::isEndBlock(Level::BlockType value) + { + if (value == BlockType::TARGET) + return true; + return false; + } + + void GameplayController::processEndBlock() + { + ServiceLocator::getInstance()->getPlayerService()->levelComplete(); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::LEVEL_COMPLETE); + GameService::setGameState(GameState::CREDITS); + } + } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerService.cpp b/Array-Jumper/source/Player/PlayerService.cpp index 02959e31..7338e81a 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -28,6 +28,11 @@ namespace Player player_controller->takeDamage(); } + void PlayerService::levelComplete() + { + player_controller->resetPlayer(); + } + void PlayerService::destroy() { delete(player_controller); } } \ No newline at end of file From 4a0fd3b634a3904deff87f44a17864bbb015e5ba Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Wed, 11 Dec 2024 07:38:02 +0530 Subject: [PATCH 12/14] lives --- Array-Jumper/Array-Jumper.vcxproj | 2 + Array-Jumper/Array-Jumper.vcxproj.filters | 7 ++ .../header/Gameplay/GameplayController.h | 2 + .../header/Gameplay/GameplayService.h | 2 +- Array-Jumper/header/Player/PlayerController.h | 2 + Array-Jumper/header/Player/PlayerModel.h | 6 ++ Array-Jumper/header/Player/PlayerService.h | 1 + .../header/UI/Gameplay/GameplayUIController.h | 37 +++++++++ Array-Jumper/header/UI/UIService.h | 2 + .../source/Gameplay/GameplayController.cpp | 11 +++ .../source/Gameplay/GameplayService .cpp | 4 + .../source/Player/PlayerController.cpp | 15 +++- Array-Jumper/source/Player/PlayerModel.cpp | 14 ++++ Array-Jumper/source/Player/PlayerService.cpp | 5 ++ .../UI/Gameplay/GameplayUIController.cpp | 76 +++++++++++++++++++ Array-Jumper/source/UI/UIService.cpp | 12 +++ 16 files changed, 196 insertions(+), 2 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 a0108cfa..f674366e 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 7cfa11fd..edff104e 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -52,6 +52,9 @@ + + + @@ -92,6 +95,10 @@ + + + + diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h index 1a79776b..6d24060d 100644 --- a/Array-Jumper/header/Gameplay/GameplayController.h +++ b/Array-Jumper/header/Gameplay/GameplayController.h @@ -10,12 +10,14 @@ namespace Gameplay bool isObstacle(Level::BlockType value); bool isEndBlock(Level::BlockType value); void processEndBlock(); + void gameOver(); public: void intialize(); void update(); void render(); void onPositionChanged(int position); + void onDeath(); diff --git a/Array-Jumper/header/Gameplay/GameplayService.h b/Array-Jumper/header/Gameplay/GameplayService.h index ae94408e..e1cfa28e 100644 --- a/Array-Jumper/header/Gameplay/GameplayService.h +++ b/Array-Jumper/header/Gameplay/GameplayService.h @@ -15,7 +15,7 @@ namespace Gameplay void intialize(); void update(); void render(); - + void onDeath(); void onPositionChanged(int position); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerController.h b/Array-Jumper/header/Player/PlayerController.h index 8c92dd6e..ac45c01e 100644 --- a/Array-Jumper/header/Player/PlayerController.h +++ b/Array-Jumper/header/Player/PlayerController.h @@ -38,6 +38,8 @@ namespace Player void jump(MovementDirection direction); void takeDamage(); void resetPlayer(); + int getCurrentLives(); + void onDeath(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerModel.h b/Array-Jumper/header/Player/PlayerModel.h index afe9d0ff..7a11b38a 100644 --- a/Array-Jumper/header/Player/PlayerModel.h +++ b/Array-Jumper/header/Player/PlayerModel.h @@ -15,6 +15,8 @@ namespace Player PlayerState player_state; int current_position; + const int max_lives = 3; + int current_lives; public: @@ -26,5 +28,9 @@ namespace Player int getCurrentPosition(); void setCurrentPosition(int new_position); void resetPlayer(); + int getCurrentLives(); + void decreamentLife(); + void resetPosition(); + }; } \ No newline at end of file diff --git a/Array-Jumper/header/Player/PlayerService.h b/Array-Jumper/header/Player/PlayerService.h index 56bc629b..c6614254 100644 --- a/Array-Jumper/header/Player/PlayerService.h +++ b/Array-Jumper/header/Player/PlayerService.h @@ -19,5 +19,6 @@ namespace Player void render(); void takeDamage(); void levelComplete(); + int getCurrentLives(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/UI/Gameplay/GameplayUIController.h b/Array-Jumper/header/UI/Gameplay/GameplayUIController.h new file mode 100644 index 00000000..aa2bc4d5 --- /dev/null +++ b/Array-Jumper/header/UI/Gameplay/GameplayUIController.h @@ -0,0 +1,37 @@ +#pragma once +#include "../UIElement/TextView.h" + +namespace UI +{ + namespace GameplayUI + { + class GameplayUIController + { + private: + + float font_size = 55; + + const float top_offset = 100.f; + const float left_offset = 100.f; + const float right_offset = 250.f; + + UIElement::TextView* life_count_text; + + void createTexts(); + void initializeTexts(); + void initializeLifeCountText(); + + void updateLifeCountText(); + + void destroy(); + + public: + GameplayUIController(); + ~GameplayUIController(); + + void initialize(); + void update(); + void render(); + }; + } +} \ No newline at end of file diff --git a/Array-Jumper/header/UI/UIService.h b/Array-Jumper/header/UI/UIService.h index 8db7e889..ca1b455d 100644 --- a/Array-Jumper/header/UI/UIService.h +++ b/Array-Jumper/header/UI/UIService.h @@ -5,6 +5,7 @@ #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 { @@ -16,6 +17,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 0adc2ef7..b8698f40 100644 --- a/Array-Jumper/source/Gameplay/GameplayController.cpp +++ b/Array-Jumper/source/Gameplay/GameplayController.cpp @@ -32,6 +32,11 @@ namespace Gameplay processEndBlock(); } + void GameplayController::onDeath() + { + gameOver(); + } + void GameplayController::processObstacle() { ServiceLocator::getInstance()->getPlayerService()->takeDamage(); @@ -60,5 +65,11 @@ namespace Gameplay GameService::setGameState(GameState::CREDITS); } + void GameplayController::gameOver() + { + GameService::setGameState(GameState::CREDITS); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::DEATH); + } + } \ No newline at end of file diff --git a/Array-Jumper/source/Gameplay/GameplayService .cpp b/Array-Jumper/source/Gameplay/GameplayService .cpp index 94a42aa5..73a1447d 100644 --- a/Array-Jumper/source/Gameplay/GameplayService .cpp +++ b/Array-Jumper/source/Gameplay/GameplayService .cpp @@ -23,6 +23,10 @@ namespace Gameplay { gameplay_controller->render(); } + void GameplayService::onDeath() + { + gameplay_controller->onDeath(); + } void GameplayService::onPositionChanged(int position) { gameplay_controller->onPositionChanged(position); diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp index 2133bd27..6f2d39eb 100644 --- a/Array-Jumper/source/Player/PlayerController.cpp +++ b/Array-Jumper/source/Player/PlayerController.cpp @@ -124,7 +124,11 @@ namespace Player void PlayerController::takeDamage() { - player_model->resetPlayer(); + player_model->decreamentLife(); + if (player_model->getCurrentLives() <= 0) + onDeath(); + else + player_model->resetPosition(); } @@ -164,4 +168,13 @@ namespace Player player_model->setCurrentPosition(0); player_model->setPlayerState(PlayerState::ALIVE); } + int PlayerController::getCurrentLives() + { + return player_model->getCurrentLives(); + } + void PlayerController::onDeath() + { + ServiceLocator::getInstance()->getGameplayService()->onDeath(); + player_model->resetPlayer(); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Player/PlayerModel.cpp b/Array-Jumper/source/Player/PlayerModel.cpp index 40a17d7c..1dd6a73b 100644 --- a/Array-Jumper/source/Player/PlayerModel.cpp +++ b/Array-Jumper/source/Player/PlayerModel.cpp @@ -30,5 +30,19 @@ namespace Player { current_position = 0; player_state = PlayerState::ALIVE; + current_lives = max_lives; + } + int PlayerModel::getCurrentLives() + { + return current_lives; + } + void PlayerModel::decreamentLife() + { + current_lives--; + } + void PlayerModel::resetPosition() + { + 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 7338e81a..a15f2948 100644 --- a/Array-Jumper/source/Player/PlayerService.cpp +++ b/Array-Jumper/source/Player/PlayerService.cpp @@ -33,6 +33,11 @@ namespace Player player_controller->resetPlayer(); } + int PlayerService::getCurrentLives() + { + return player_controller->getCurrentLives(); + } + void PlayerService::destroy() { delete(player_controller); } } \ 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..59b8d644 --- /dev/null +++ b/Array-Jumper/source/UI/Gameplay/GameplayUIController.cpp @@ -0,0 +1,76 @@ +#include "../../../header/UI/Gameplay/GameplayUIController.h" +#include "../../../header/Global/ServiceLocator.h" + +#include +#include +#include + + +namespace UI +{ + namespace GameplayUI + { + using namespace Global; + using namespace UIElement; + + GameplayUIController::GameplayUIController() + { + createTexts(); + } + + GameplayUIController::~GameplayUIController() + { + destroy(); + } + + void GameplayUIController::initialize() + { + initializeTexts(); + } + + void GameplayUIController::update() + { + updateLifeCountText(); + } + + void GameplayUIController::render() + { + life_count_text->render(); + } + + void GameplayUIController::createTexts() + { + life_count_text = new TextView(); + } + + void GameplayUIController::initializeTexts() + { + initializeLifeCountText(); + } + + void GameplayUIController::initializeLifeCountText() + { + float windowWidth = ServiceLocator::getInstance()->getGraphicService()->getGameWindow()->getSize().x; + float x_position = (static_cast(windowWidth) - right_offset); + float y_position = top_offset; + + life_count_text->initialize("0", sf::Vector2f(x_position, y_position), FontType::BUBBLE_BOBBLE, font_size, sf::Color::White); + } + + void GameplayUIController::updateLifeCountText() + { + int life_count = ServiceLocator::getInstance()->getPlayerService()->getCurrentLives(); + + std::string life_count_string = "LIFE: " + std::to_string(life_count); + + life_count_text->setText(life_count_string); + life_count_text->update(); + } + + void GameplayUIController::destroy() + { + delete(life_count_text); + } + + } +} \ No newline at end of file diff --git a/Array-Jumper/source/UI/UIService.cpp b/Array-Jumper/source/UI/UIService.cpp index 0623d796..5bbfce0f 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,12 +39,14 @@ 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() { initializeUIElements(); initializeControllers(); + } void UIService::initializeControllers() @@ -51,6 +55,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,6 +79,9 @@ namespace UI case GameState::CREDITS: credits_screen_ui_controller->update(); break; + case GameState::GAMEPLAY: + gameplay_ui_controller->update(); + break; } } @@ -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 From f526651dc42c08a8481ba1e682ff3a5b76f5a466 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Sat, 14 Dec 2024 06:56:39 +0530 Subject: [PATCH 13/14] 4 --- Array-Jumper/Array-Jumper.vcxproj | 1 + Array-Jumper/Array-Jumper.vcxproj.filters | 1 + .../header/Level/LevelConfiguration.h | 49 +++++++++++++++++++ Array-Jumper/header/Level/LevelController.h | 5 ++ Array-Jumper/header/Level/LevelData.h | 13 +---- Array-Jumper/header/Level/LevelModel.h | 11 ++++- Array-Jumper/header/Level/LevelService.h | 6 +++ Array-Jumper/source/Level/LevelController.cpp | 18 +++++++ Array-Jumper/source/Level/LevelModel.cpp | 23 ++++++++- Array-Jumper/source/Level/LevelService.cpp | 20 ++++++++ 10 files changed, 133 insertions(+), 14 deletions(-) create mode 100644 Array-Jumper/header/Level/LevelConfiguration.h diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index f674366e..d8d43342 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 edff104e..682a6966 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -99,6 +99,7 @@ + diff --git a/Array-Jumper/header/Level/LevelConfiguration.h b/Array-Jumper/header/Level/LevelConfiguration.h new file mode 100644 index 00000000..e7fcd965 --- /dev/null +++ b/Array-Jumper/header/Level/LevelConfiguration.h @@ -0,0 +1,49 @@ +#pragma once +#include "LevelData.h" +#include "BlockType.h" + +namespace Level +{ + class LevelConfiguration + { + private: + + + BlockType level_1[LevelData::NUMBER_OF_BOXES] = + { + ONE, TWO, OBSTACLE_ONE, TWO, THREE, ONE, OBSTACLE_TWO, TWO, ONE, TARGET + }; + + BlockType level_2[LevelData::NUMBER_OF_BOXES] = + { + ONE, TWO, OBSTACLE_TWO, ONE, TWO, OBSTACLE_ONE, THREE, OBSTACLE_ONE, ONE, TARGET + }; + + BlockType level_3[LevelData::NUMBER_OF_BOXES] = + { + ONE, THREE, OBSTACLE_ONE, OBSTACLE_TWO, ONE, TWO, OBSTACLE_ONE, TWO, ONE, TARGET + }; + + public: + static const int NUMBER_OF_LEVELS = 3; + LevelData levels[NUMBER_OF_LEVELS]; + + LevelConfiguration() + { + for (int i = 0; i < LevelData::NUMBER_OF_BOXES; i++) + { + levels[0].level_boxes[i] = level_1[i]; + } + + for (int i = 0; i < LevelData::NUMBER_OF_BOXES; i++) + { + levels[1].level_boxes[i] = level_2[i]; + } + + for (int i = 0; i < LevelData::NUMBER_OF_BOXES; i++) + { + levels[2].level_boxes[i] = level_3[i]; + } + } + }; +} diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index 6034b961..bdd99e2a 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -22,5 +22,10 @@ namespace Level BoxDimensions getBoxDimensions(); BlockType getCurrentBoxValue(int currentPosition); + bool isLastLevel(); + void loadNextLevel(); + int getCurrentLevelNumber(); + + void reset(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelData.h b/Array-Jumper/header/Level/LevelData.h index b5406b2f..c4ff5152 100644 --- a/Array-Jumper/header/Level/LevelData.h +++ b/Array-Jumper/header/Level/LevelData.h @@ -8,16 +8,7 @@ namespace Level { static const int NUMBER_OF_BOXES = 10; - BlockType level_boxes[NUMBER_OF_BOXES] = { - BlockType::ONE, - BlockType::TWO, - BlockType::OBSTACLE_ONE, - BlockType::TWO, - BlockType::THREE, - BlockType::ONE, - BlockType::OBSTACLE_TWO, - BlockType::TWO, - BlockType::ONE, - BlockType::TARGET }; + BlockType level_boxes[NUMBER_OF_BOXES]; + }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index ef3160b8..f5a2edff 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -1,6 +1,6 @@ #pragma once #include "LevelData.h" - +#include "LevelConfiguration.h" namespace Level { @@ -18,12 +18,19 @@ namespace Level class LevelModel { private: - LevelData current_level_data; + const int number_of_level = LevelConfiguration::NUMBER_OF_LEVELS; + LevelConfiguration level_configuration; + + int current_level_index; public: LevelModel(); ~LevelModel(); BlockType getCurrentBoxValue(int currentPosition); + void loadNextLevel(); + int getCurrentLevelNumber(); + bool isLastLevel(); + void reset(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h index 1a70ef61..f30af294 100644 --- a/Array-Jumper/header/Level/LevelService.h +++ b/Array-Jumper/header/Level/LevelService.h @@ -1,6 +1,7 @@ #pragma once #include "BlockType.h" + namespace Level { class LevelController; @@ -22,5 +23,10 @@ namespace Level BoxDimensions getBoxDimensions(); BlockType getCurrentBoxValue(int currentPosition); + bool isLastLevel(); + void loadNextLevel(); + int getCurrentLevelNumber(); + + void resetLevels(); }; } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp index 5b8c1049..f85834ca 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -40,4 +40,22 @@ namespace Level return level_model->getCurrentBoxValue(currentPosition); } + bool LevelController::isLastLevel() + { + return false; + } + + void LevelController::loadNextLevel() + { + } + + int LevelController::getCurrentLevelNumber() + { + return 0; + } + + void LevelController::reset() + { + } + } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp index 13244e39..0d174856 100644 --- a/Array-Jumper/source/Level/LevelModel.cpp +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -7,6 +7,27 @@ namespace Level BlockType LevelModel::getCurrentBoxValue(int currentPosition) { - return current_level_data.level_boxes[currentPosition]; + return level_configuration.levels[current_level_index].level_boxes[currentPosition]; } + void LevelModel::loadNextLevel() + { + current_level_index++; + } + int LevelModel::getCurrentLevelNumber() + { + return (current_level_index + 1); + } + bool LevelModel::isLastLevel() + { + if (current_level_index == LevelConfiguration::NUMBER_OF_LEVELS - 1) + return true; + return false; + } + + void LevelModel::reset() + { + current_level_index = 0; + } + + } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp index a4c60f0b..de8b02d4 100644 --- a/Array-Jumper/source/Level/LevelService.cpp +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -35,6 +35,26 @@ namespace Level return level_controller->getCurrentBoxValue(currentPosition); } + bool LevelService::isLastLevel() + { + return level_controller->isLastLevel(); + } + + void LevelService::loadNextLevel() + { + level_controller->loadNextLevel(); + } + + int LevelService::getCurrentLevelNumber() + { + return level_controller->getCurrentLevelNumber(); + } + + void LevelService::resetLevels() + { + level_controller->reset(); + } + void LevelService::destroy() { delete(level_controller); From bc2d7df6a8c8d919e17e3668fa615fdb4a6c01c5 Mon Sep 17 00:00:00 2001 From: meteoralpha23 Date: Mon, 16 Dec 2024 07:36:03 +0530 Subject: [PATCH 14/14] dobe --- Array-Jumper/header/Gameplay/GameplayController.h | 2 +- Array-Jumper/source/Gameplay/GameplayController.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h index 6d24060d..ab6e8b97 100644 --- a/Array-Jumper/header/Gameplay/GameplayController.h +++ b/Array-Jumper/header/Gameplay/GameplayController.h @@ -18,7 +18,7 @@ namespace Gameplay void render(); void onPositionChanged(int position); void onDeath(); - + void gameWon(); }; diff --git a/Array-Jumper/source/Gameplay/GameplayController.cpp b/Array-Jumper/source/Gameplay/GameplayController.cpp index b8698f40..77a31630 100644 --- a/Array-Jumper/source/Gameplay/GameplayController.cpp +++ b/Array-Jumper/source/Gameplay/GameplayController.cpp @@ -37,6 +37,12 @@ namespace Gameplay gameOver(); } + void GameplayController::gameWon() + { + GameService::setGameState(GameState::CREDITS); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::GAME_WON); + } + void GameplayController::processObstacle() { ServiceLocator::getInstance()->getPlayerService()->takeDamage();