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