diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj
index 658ea835..d8d43342 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)
@@ -133,14 +133,25 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -152,12 +163,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters
index dff4a580..682a6966 100644
--- a/Array-Jumper/Array-Jumper.vcxproj.filters
+++ b/Array-Jumper/Array-Jumper.vcxproj.filters
@@ -44,6 +44,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -74,6 +85,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Array-Jumper/assets/textures/target.png b/Array-Jumper/assets/textures/target.png
new file mode 100644
index 00000000..9362ec24
Binary files /dev/null and b/Array-Jumper/assets/textures/target.png differ
diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h
new file mode 100644
index 00000000..ab6e8b97
--- /dev/null
+++ b/Array-Jumper/header/Gameplay/GameplayController.h
@@ -0,0 +1,26 @@
+#pragma once
+#include "../../header/Level/BlockType.h"
+namespace Gameplay
+{
+ class GameplayController
+ {
+ private:
+
+ void processObstacle();
+ 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();
+ void gameWon();
+
+
+ };
+
+}
\ 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..e1cfa28e
--- /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 onDeath();
+ 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 7e9ef35a..5502e76a 100644
--- a/Array-Jumper/header/Global/ServiceLocator.h
+++ b/Array-Jumper/header/Global/ServiceLocator.h
@@ -3,6 +3,11 @@
#include "../../header/Event/EventService.h"
#include "../../header/UI/UIService.h"
#include "../../header/Sound/SoundService.h"
+#include "../../header/Player/PlayerService.h"
+#include "../../header/Level/LevelService.h"
+#include "../../header/Gameplay/GameplayService.h"
+
+
namespace Global
{
@@ -13,6 +18,9 @@ namespace Global
Event::EventService* event_service;
Sound::SoundService* sound_service;
UI::UIService* ui_service;
+ Player::PlayerService* player_service;
+ Level::LevelService* level_service;
+ Gameplay::GameplayService* gameplay_service;
~ServiceLocator();
@@ -31,5 +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/Level/BlockType.h b/Array-Jumper/header/Level/BlockType.h
new file mode 100644
index 00000000..8e4bc01f
--- /dev/null
+++ b/Array-Jumper/header/Level/BlockType.h
@@ -0,0 +1,20 @@
+#pragma once
+
+// Each level should be represented as a array of integers
+ // -1 : Obstacle 1
+ // -2 : Obstacle 2
+ // 0 : End block
+ // 1,2,3 : Numbers
+
+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/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
new file mode 100644
index 00000000..bdd99e2a
--- /dev/null
+++ b/Array-Jumper/header/Level/LevelController.h
@@ -0,0 +1,31 @@
+#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();
+
+ 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
new file mode 100644
index 00000000..c4ff5152
--- /dev/null
+++ b/Array-Jumper/header/Level/LevelData.h
@@ -0,0 +1,14 @@
+#pragma once
+#include "BlockType.h"
+
+namespace Level
+{
+
+ struct LevelData
+ {
+ static const int NUMBER_OF_BOXES = 10;
+
+ 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
new file mode 100644
index 00000000..f5a2edff
--- /dev/null
+++ b/Array-Jumper/header/Level/LevelModel.h
@@ -0,0 +1,36 @@
+#pragma once
+#include "LevelData.h"
+#include "LevelConfiguration.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:
+ 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
new file mode 100644
index 00000000..f30af294
--- /dev/null
+++ b/Array-Jumper/header/Level/LevelService.h
@@ -0,0 +1,32 @@
+#pragma once
+#include "BlockType.h"
+
+
+namespace Level
+{
+ class LevelController;
+ struct BoxDimensions;
+
+ class LevelService
+ {
+ private:
+ LevelController* level_controller;
+
+ void destroy();
+ public:
+ LevelService();
+ ~LevelService();
+
+ void intialize();
+ void update();
+ void render();
+
+ 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/header/Level/LevelView.h b/Array-Jumper/header/Level/LevelView.h
new file mode 100644
index 00000000..e04237eb
--- /dev/null
+++ b/Array-Jumper/header/Level/LevelView.h
@@ -0,0 +1,52 @@
+#pragma once
+#include "LevelModel.h"
+#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;
+
+ 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();
+
+ void initialize();
+ void update();
+ void render();
+
+ BoxDimensions getBoxDimensions();
+
+ };
+}
\ No newline at end of file
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
new file mode 100644
index 00000000..ac45c01e
--- /dev/null
+++ b/Array-Jumper/header/Player/PlayerController.h
@@ -0,0 +1,45 @@
+#pragma once
+#include "../../header/Event/EventService.h"
+#include "MovementDirection.h"
+
+
+
+
+namespace Player
+{
+ class PlayerView;
+ class PlayerModel;
+ enum class PlayerState;
+ class PlayerController
+ {
+ private:
+ PlayerModel* player_model;
+ PlayerView* player_view;
+ Event::EventService* event_service;
+ void readInput();
+ void destroy();
+
+
+ public:
+ PlayerController();
+ ~PlayerController();
+
+ void initialize();
+ void update();
+ void render();
+
+ PlayerState getPlayerState();
+ void setPlayerState(PlayerState new_player_state);
+
+ int getCurrentPosition();
+
+ void move(MovementDirection direction);
+ bool isPositionInBound(int targetPosition);
+ 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
new file mode 100644
index 00000000..7a11b38a
--- /dev/null
+++ b/Array-Jumper/header/Player/PlayerModel.h
@@ -0,0 +1,36 @@
+#pragma once
+
+
+namespace Player
+{
+ enum class PlayerState
+ {
+ ALIVE,
+ DEAD
+ };
+
+ class PlayerModel
+ {
+ private:
+
+ PlayerState player_state;
+ int current_position;
+ const int max_lives = 3;
+ int current_lives;
+
+ public:
+
+ void initialize();
+
+ PlayerState getPlayerState();
+ void setPlayerState(PlayerState new_player_state);
+
+ 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
new file mode 100644
index 00000000..c6614254
--- /dev/null
+++ b/Array-Jumper/header/Player/PlayerService.h
@@ -0,0 +1,24 @@
+#pragma once
+
+namespace Player
+{
+ class PlayerController;
+ class PlayerService
+ {
+ private:
+ PlayerController* player_controller;
+
+ void destroy();
+
+ public:
+ PlayerService();
+ ~PlayerService();
+
+ void initialize();
+ void update();
+ void render();
+ void takeDamage();
+ void levelComplete();
+ int getCurrentLives();
+ };
+}
\ 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..71a971a4
--- /dev/null
+++ b/Array-Jumper/header/Player/PlayerView.h
@@ -0,0 +1,37 @@
+#pragma once
+#include "../../header/Level/LevelModel.h"
+#include "../../header/UI/UIElement/ImageView.h"
+
+
+namespace Player
+{
+ class PlayerController;
+ class PlayerView
+ {
+ private:
+ // TODO: Fix spacing. References grouped together + properties grouped together.
+ sf::RenderWindow* game_window;
+ PlayerController* player_controller;
+ UI::UIElement::ImageView* player_image;
+
+ float player_height;
+ float player_width;
+ Level::BoxDimensions current_box_dimensions;
+
+ void initializePlayerImage();
+ void drawPlayer();
+ void loadPlayer();
+ void calculatePlayerDimensions();
+ void updatePlayerPosition();
+ sf::Vector2f calulcatePlayerPosition();
+
+ public:
+ PlayerView(PlayerController* controller);
+ ~PlayerView();
+
+ void initialize();
+ void update();
+ void render();
+
+ };
+}
\ 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
new file mode 100644
index 00000000..77a31630
--- /dev/null
+++ b/Array-Jumper/source/Gameplay/GameplayController.cpp
@@ -0,0 +1,81 @@
+#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();
+ if (isEndBlock(value))
+ processEndBlock();
+ }
+
+ void GameplayController::onDeath()
+ {
+ gameOver();
+ }
+
+ void GameplayController::gameWon()
+ {
+ GameService::setGameState(GameState::CREDITS);
+ ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::GAME_WON);
+ }
+
+ 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;
+ }
+
+ 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);
+ }
+
+ 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
new file mode 100644
index 00000000..73a1447d
--- /dev/null
+++ b/Array-Jumper/source/Gameplay/GameplayService .cpp
@@ -0,0 +1,34 @@
+#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::onDeath()
+ {
+ gameplay_controller->onDeath();
+ }
+ 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 5aa28494..0336187c 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/Level/LevelService.h"
namespace Global
{
@@ -9,14 +10,20 @@ namespace Global
using namespace Sound;
using namespace UI;
using namespace Main;
-
+ using namespace Player;
+ using namespace Level;
+ using namespace Gameplay;
+
ServiceLocator::ServiceLocator()
{
graphic_service = nullptr;
event_service = nullptr;
sound_service = nullptr;
ui_service = nullptr;
-
+ level_service = nullptr;
+ player_service = nullptr;
+ gameplay_service = nullptr;
+
createServices();
}
@@ -27,7 +34,12 @@ 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();
+ gameplay_service = new GameplayService();
}
void ServiceLocator::initialize()
@@ -35,7 +47,11 @@ namespace Global
graphic_service->initialize();
event_service->initialize();
sound_service->initialize();
+ level_service->intialize();
+ player_service->initialize();
+
ui_service->initialize();
+ gameplay_service->intialize();
}
void ServiceLocator::update()
@@ -43,12 +59,26 @@ namespace Global
graphic_service->update();
event_service->update();
ui_service->update();
+ if (GameService::getGameState() == GameState::GAMEPLAY)
+ {
+ level_service->update();
+ player_service->update();
+ gameplay_service->update();
+ }
}
void ServiceLocator::render()
{
graphic_service->render();
ui_service->render();
+ if (GameService::getGameState() == GameState::GAMEPLAY)
+ {
+
+
+ level_service->render();
+ player_service->render();
+ gameplay_service->render();
+ }
}
void ServiceLocator::clearAllServices()
@@ -56,7 +86,12 @@ namespace Global
delete(graphic_service);
delete(event_service);
delete(sound_service);
+
+ delete(player_service);
+ delete(level_service);
+
delete(ui_service);
+ delete(gameplay_service);
}
ServiceLocator* ServiceLocator::getInstance()
@@ -72,4 +107,18 @@ namespace Global
SoundService* ServiceLocator::getSoundService() { return sound_service; }
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/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp
new file mode 100644
index 00000000..f85834ca
--- /dev/null
+++ b/Array-Jumper/source/Level/LevelController.cpp
@@ -0,0 +1,61 @@
+#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() {}
+
+ void LevelController::initialize()
+ {
+ level_view->initialize();
+ }
+
+ void LevelController::update()
+ {
+ level_view->update();
+ }
+
+ void LevelController::render()
+ {
+ level_view->render();
+ }
+
+ BoxDimensions LevelController::getBoxDimensions()
+ {
+ return level_view->getBoxDimensions();
+ }
+
+ BlockType LevelController::getCurrentBoxValue(int currentPosition)
+ {
+ 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
new file mode 100644
index 00000000..0d174856
--- /dev/null
+++ b/Array-Jumper/source/Level/LevelModel.cpp
@@ -0,0 +1,33 @@
+#include "../../header/Level/LevelModel.h"
+
+namespace Level
+{
+ LevelModel::LevelModel() {}
+ LevelModel::~LevelModel() {}
+
+ BlockType LevelModel::getCurrentBoxValue(int 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
new file mode 100644
index 00000000..de8b02d4
--- /dev/null
+++ b/Array-Jumper/source/Level/LevelService.cpp
@@ -0,0 +1,62 @@
+#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();
+ }
+
+ BoxDimensions LevelService::getBoxDimensions()
+ {
+ return level_controller->getBoxDimensions();
+ }
+
+ BlockType LevelService::getCurrentBoxValue(int currentPosition)
+ {
+ 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);
+ }
+}
\ 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..4072925f
--- /dev/null
+++ b/Array-Jumper/source/Level/LevelView.cpp
@@ -0,0 +1,195 @@
+#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"
+
+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();
+ calculateBoxDimensions();
+ initializeImages();
+ }
+
+ void LevelView::update()
+ {
+ updateImages();
+ }
+
+ void LevelView::render()
+ {
+ drawLevel();
+ }
+
+ BoxDimensions LevelView::getBoxDimensions()
+ {
+ return box_dimensions;
+ }
+
+ 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();
+
+ 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)
+ {
+ 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;
+
+ 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)
+ {
+ 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
diff --git a/Array-Jumper/source/Player/PlayerController.cpp b/Array-Jumper/source/Player/PlayerController.cpp
new file mode 100644
index 00000000..6f2d39eb
--- /dev/null
+++ b/Array-Jumper/source/Player/PlayerController.cpp
@@ -0,0 +1,180 @@
+#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();
+ player_view = new PlayerView(this);
+ }
+
+ PlayerController::~PlayerController() { destroy(); }
+
+ void PlayerController::initialize()
+ {
+ 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()
+ {
+ return player_model->getPlayerState();
+ }
+
+ void PlayerController::setPlayerState(PlayerState new_player_state)
+ {
+ player_model->setPlayerState(new_player_state);
+ }
+
+ int PlayerController::getCurrentPosition()
+ {
+ 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);
+ ServiceLocator::getInstance()->getGameplayService()->onPositionChanged(targetPosition);
+ }
+
+ bool PlayerController::isPositionInBound(int targetPosition)
+ {
+ if (targetPosition >= 0 && targetPosition < LevelData::NUMBER_OF_BOXES)
+ return true;
+ 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);
+ ServiceLocator::getInstance()->getGameplayService()->onPositionChanged(targetPosition);
+
+ }
+
+ void PlayerController::takeDamage()
+ {
+ player_model->decreamentLife();
+ if (player_model->getCurrentLives() <= 0)
+ onDeath();
+ else
+ player_model->resetPosition();
+
+
+ }
+
+
+
+
+
+
+ void PlayerController::readInput()
+ {
+ if (event_service->pressedRightArrowKey() || event_service->pressedDKey())
+ {
+ if (event_service->heldSpaceKey())
+ jump(MovementDirection::FORWARD);
+ else
+ move(MovementDirection::FORWARD);
+ }
+ if (event_service->pressedLeftArrowKey() || event_service->pressedAKey())
+ {
+ if (event_service->heldSpaceKey())
+ jump(MovementDirection::BACKWARD);
+ else
+ move(MovementDirection::BACKWARD);
+ }
+
+ }
+
+ void PlayerController::destroy()
+ {
+ delete(player_model);
+ delete(player_view);
+ }
+
+ void PlayerController::resetPlayer()
+ {
+ 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
new file mode 100644
index 00000000..1dd6a73b
--- /dev/null
+++ b/Array-Jumper/source/Player/PlayerModel.cpp
@@ -0,0 +1,48 @@
+#include "../../header/Player/PlayerModel.h"
+
+namespace Player
+{
+ void Player::PlayerModel::initialize()
+ {
+ //Yet to implement
+ }
+
+ 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;
+ }
+ void PlayerModel::resetPlayer()
+ {
+ 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
new file mode 100644
index 00000000..a15f2948
--- /dev/null
+++ b/Array-Jumper/source/Player/PlayerService.cpp
@@ -0,0 +1,43 @@
+#include "../../header/Player/PlayerService.h"
+#include "../../header/Player/PlayerController.h"
+
+
+namespace Player
+{
+ PlayerService::PlayerService() { player_controller = new PlayerController(); }
+
+ PlayerService::~PlayerService() { destroy(); }
+
+ void PlayerService::initialize()
+ {
+ player_controller->initialize();
+ }
+
+ void PlayerService::update()
+ {
+ player_controller->update();
+ }
+
+ void PlayerService::render()
+ {
+ player_controller->render();
+ }
+
+ void PlayerService::takeDamage()
+ {
+ player_controller->takeDamage();
+ }
+
+ void PlayerService::levelComplete()
+ {
+ 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/Player/PlayerView.cpp b/Array-Jumper/source/Player/PlayerView.cpp
new file mode 100644
index 00000000..c7458745
--- /dev/null
+++ b/Array-Jumper/source/Player/PlayerView.cpp
@@ -0,0 +1,85 @@
+#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;
+ using namespace Level;
+ using namespace UI::UIElement;
+
+ PlayerView::PlayerView(PlayerController* controller)
+ {
+ player_controller = controller;
+ player_image = new ImageView();
+ game_window = nullptr;
+ }
+
+ PlayerView::~PlayerView() {}
+
+ void PlayerView::initialize()
+ {
+ game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow();
+ loadPlayer();
+ }
+
+ void PlayerView::update()
+ {
+ updatePlayerPosition();
+ }
+
+ void PlayerView::render()
+ {
+ switch (player_controller->getPlayerState())
+ {
+ case PlayerState::ALIVE:
+ drawPlayer();
+ break;
+ }
+ }
+
+ void PlayerView::loadPlayer()
+ {
+ calculatePlayerDimensions();
+ initializePlayerImage();
+ }
+
+ void PlayerView::initializePlayerImage()
+ {
+
+ player_image->initialize(Config::character_texture_path,
+ player_width,
+ player_height,
+ sf::Vector2f(0, 0));
+ }
+
+ void PlayerView::calculatePlayerDimensions()
+ {
+ current_box_dimensions = ServiceLocator::getInstance()->getLevelService()->getBoxDimensions();
+ player_height = current_box_dimensions.box_height;
+ player_width = current_box_dimensions.box_width;
+ }
+
+ void PlayerView::updatePlayerPosition()
+ {
+ player_image->setPosition(calulcatePlayerPosition());
+ }
+
+ sf::Vector2f PlayerView::calulcatePlayerPosition()
+ {
+ 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);
+ }
+
+
+ void PlayerView::drawPlayer()
+ {
+ player_image->render();
+ }
+
+}
\ 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/MainMenu/MainMenuUIController.cpp b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp
index b3c74893..1e753735 100644
--- a/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp
+++ b/Array-Jumper/source/UI/MainMenu/MainMenuUIController.cpp
@@ -75,8 +75,10 @@ namespace UI
void MainMenuUIController::playButtonCallback()
{
ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::BUTTON_CLICK);
+ GameService::setGameState(GameState::GAMEPLAY);
}
+
void MainMenuUIController::instructionsButtonCallback()
{
ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::BUTTON_CLICK);
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