diff --git a/Array-Jumper/Array-Jumper.vcxproj b/Array-Jumper/Array-Jumper.vcxproj index 752696a7..96ed4d13 100644 --- a/Array-Jumper/Array-Jumper.vcxproj +++ b/Array-Jumper/Array-Jumper.vcxproj @@ -169,6 +169,7 @@ + diff --git a/Array-Jumper/Array-Jumper.vcxproj.filters b/Array-Jumper/Array-Jumper.vcxproj.filters index c51106b8..916e8e32 100644 --- a/Array-Jumper/Array-Jumper.vcxproj.filters +++ b/Array-Jumper/Array-Jumper.vcxproj.filters @@ -99,6 +99,7 @@ + diff --git a/Array-Jumper/header/Gameplay/GameplayController.h b/Array-Jumper/header/Gameplay/GameplayController.h index 609dbe61..b40a4175 100644 --- a/Array-Jumper/header/Gameplay/GameplayController.h +++ b/Array-Jumper/header/Gameplay/GameplayController.h @@ -10,7 +10,12 @@ namespace Gameplay bool isObstacle(Level::BlockType value); bool isEndBlock(Level::BlockType value); + bool isLastLevel(); + void loadNextLevel(); + void gameOver(); + + void gameWon(); public: void initialize(); void update(); diff --git a/Array-Jumper/header/Gameplay/GameplayUIController.h b/Array-Jumper/header/Gameplay/GameplayUIController.h index 0519daae..1f23cd15 100644 --- a/Array-Jumper/header/Gameplay/GameplayUIController.h +++ b/Array-Jumper/header/Gameplay/GameplayUIController.h @@ -16,12 +16,15 @@ namespace UI const float right_offset = 250.f; UIElement::TextView* life_count_text; + UIElement::TextView* level_count_text; void createTexts(); void initializeTexts(); void initializeLifeCountText(); + void initializeLevelCountText(); void updateLifeCountText(); + void updateLevelCountText(); void destroy(); diff --git a/Array-Jumper/header/Level/LevelConfiguration.h b/Array-Jumper/header/Level/LevelConfiguration.h new file mode 100644 index 00000000..f7f50831 --- /dev/null +++ b/Array-Jumper/header/Level/LevelConfiguration.h @@ -0,0 +1,44 @@ +#pragma once +#include "LevelData.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 j = 0;j < LevelData::number_of_boxes;j++) + { + levels[0].level_boxes[j] = level_1[j]; + } + + for (int j = 0;j < LevelData::number_of_boxes;j++) + { + levels[1].level_boxes[j] = level_2[j]; + } + + for (int j = 0;j < LevelData::number_of_boxes;j++) + { + levels[2].level_boxes[j] = level_3[j]; + } + } + }; +} \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelController.h b/Array-Jumper/header/Level/LevelController.h index 5f8ca73a..76aa0d81 100644 --- a/Array-Jumper/header/Level/LevelController.h +++ b/Array-Jumper/header/Level/LevelController.h @@ -21,5 +21,11 @@ namespace Level BlockType getCurrentBoxValue(int currentPosition); BoxDimensions getBoxDimensions(); + + void loadNextLevel(); + int getCurrentLevelNumber(); + bool isLastLevel(); + + void reset(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelData.h b/Array-Jumper/header/Level/LevelData.h index e580a8de..0110d824 100644 --- a/Array-Jumper/header/Level/LevelData.h +++ b/Array-Jumper/header/Level/LevelData.h @@ -5,6 +5,8 @@ namespace Level struct LevelData { static const int number_of_boxes = 10; + + /* BlockType level_boxes[number_of_boxes]= { BlockType::ONE, BlockType::TWO, @@ -16,5 +18,8 @@ namespace Level BlockType::TWO, BlockType::ONE, BlockType::TARGET }; + */ + + BlockType level_boxes[number_of_boxes]; }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelModel.h b/Array-Jumper/header/Level/LevelModel.h index 2a1a37df..fa20df47 100644 --- a/Array-Jumper/header/Level/LevelModel.h +++ b/Array-Jumper/header/Level/LevelModel.h @@ -1,5 +1,6 @@ #pragma once #include "../../header/Level/LevelData.h" +#include "../../header/Level/LevelConfiguration.h" namespace Level { struct BoxDimensions @@ -13,11 +14,19 @@ namespace Level class LevelModel { private: - LevelData current_level_data; + //LevelData current_level_data; + LevelConfiguration level_configuration; + int current_level_index; public: LevelModel(); ~LevelModel(); BlockType getCurrentBoxValue(int currentPosition); + + void loadNextLevel(); + int getCurrentLevelNumber(); + bool isLastLevel(); + + void reset(); }; } \ No newline at end of file diff --git a/Array-Jumper/header/Level/LevelService.h b/Array-Jumper/header/Level/LevelService.h index dc99e830..165e0d7a 100644 --- a/Array-Jumper/header/Level/LevelService.h +++ b/Array-Jumper/header/Level/LevelService.h @@ -20,5 +20,11 @@ namespace Level BoxDimensions getBoxDimensions(); BlockType getCurrentBoxValue(int currentPosition); + + void loadNextLevel(); + int getCurrentLevelNumber(); + bool isLastLevel(); + + void resetLevels(); }; } \ No newline at end of file diff --git a/Array-Jumper/source/Gameplay/GameplayController.cpp b/Array-Jumper/source/Gameplay/GameplayController.cpp index 13e20e74..026a4f6d 100644 --- a/Array-Jumper/source/Gameplay/GameplayController.cpp +++ b/Array-Jumper/source/Gameplay/GameplayController.cpp @@ -19,7 +19,16 @@ namespace Gameplay { ServiceLocator::getInstance()->getPlayerService()->levelComplete(); ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::LEVEL_COMPLETE); - GameService::setGameState(GameState::CREDITS); + + if (isLastLevel()) + { + gameWon(); + return; + } + + loadNextLevel(); + + //GameService::setGameState(GameState::CREDITS); } bool GameplayController::isObstacle(Level::BlockType value) { @@ -33,6 +42,17 @@ namespace Gameplay return true; return false; } + bool GameplayController::isLastLevel() + { + if (ServiceLocator::getInstance()->getLevelService()->isLastLevel()) + return true; + else + return false; + } + void GameplayController::loadNextLevel() + { + ServiceLocator::getInstance()->getLevelService()->loadNextLevel(); + } void GameplayController::initialize() { } @@ -60,4 +80,9 @@ namespace Gameplay GameService::setGameState(GameState::CREDITS); ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::DEATH); } + void GameplayController::gameWon() + { + GameService::setGameState(GameState::CREDITS); + ServiceLocator::getInstance()->getSoundService()->playSound(SoundType::LEVEL_COMPLETE); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Gameplay/GameplayUIController.cpp b/Array-Jumper/source/Gameplay/GameplayUIController.cpp index e52da1ca..1c8c9b75 100644 --- a/Array-Jumper/source/Gameplay/GameplayUIController.cpp +++ b/Array-Jumper/source/Gameplay/GameplayUIController.cpp @@ -31,21 +31,25 @@ namespace UI void GameplayUIController::update() { updateLifeCountText(); + updateLevelCountText(); } void GameplayUIController::render() { life_count_text->render(); + level_count_text->render(); } void GameplayUIController::createTexts() { life_count_text = new TextView(); + level_count_text = new TextView(); } void GameplayUIController::initializeTexts() { initializeLifeCountText(); + initializeLevelCountText(); } void GameplayUIController::initializeLifeCountText() @@ -57,6 +61,15 @@ namespace UI life_count_text->initialize("0", sf::Vector2f(x_position, y_position), FontType::BUBBLE_BOBBLE, font_size, sf::Color::White); } + void GameplayUIController::initializeLevelCountText() + { + float windowWidth = ServiceLocator::getInstance()->getGraphicService()->getGameWindow()->getSize().x; + float x_position = (left_offset); + float y_position = top_offset; + + level_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(); @@ -67,6 +80,16 @@ namespace UI life_count_text->update(); } + void GameplayUIController::updateLevelCountText() + { + int level_count = ServiceLocator::getInstance()->getLevelService()->getCurrentLevelNumber(); + + std::string level_count_string = "LEVEL: " + std::to_string(level_count); + + level_count_text->setText(level_count_string); + level_count_text->update(); + } + void GameplayUIController::destroy() { delete(life_count_text); diff --git a/Array-Jumper/source/Level/LevelController.cpp b/Array-Jumper/source/Level/LevelController.cpp index 3ea98ef9..4092a784 100644 --- a/Array-Jumper/source/Level/LevelController.cpp +++ b/Array-Jumper/source/Level/LevelController.cpp @@ -35,4 +35,20 @@ namespace Level { return level_view->getBoxDimensions(); } + void LevelController::loadNextLevel() + { + level_model->loadNextLevel(); + } + int LevelController::getCurrentLevelNumber() + { + return level_model->getCurrentLevelNumber(); + } + bool LevelController::isLastLevel() + { + return level_model->isLastLevel(); + } + void LevelController::reset() + { + level_model->reset(); + } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelModel.cpp b/Array-Jumper/source/Level/LevelModel.cpp index 59ef5898..80b7fe39 100644 --- a/Array-Jumper/source/Level/LevelModel.cpp +++ b/Array-Jumper/source/Level/LevelModel.cpp @@ -1,13 +1,37 @@ #include "../../header/Level/LevelModel.h" namespace Level { - LevelModel::LevelModel() {} + LevelModel::LevelModel() { current_level_index = 0; } LevelModel::~LevelModel() {} BlockType LevelModel::getCurrentBoxValue(int currentPosition) { - return current_level_data.level_boxes[currentPosition]; + //return current_level_data.level_boxes[currentPosition]; + return level_configuration.levels[current_level_index].level_boxes[currentPosition]; + } + + void LevelModel::loadNextLevel() + { + current_level_index++; + } + + int LevelModel::getCurrentLevelNumber() + { + return current_level_index + 1; + } + + bool LevelModel::isLastLevel() + { + if (current_level_index == LevelConfiguration::number_of_levels -1) + return true; + else + return false; + } + + void LevelModel::reset() + { + current_level_index = 0; } } \ No newline at end of file diff --git a/Array-Jumper/source/Level/LevelService.cpp b/Array-Jumper/source/Level/LevelService.cpp index a4c60f0b..a0b6d1f4 100644 --- a/Array-Jumper/source/Level/LevelService.cpp +++ b/Array-Jumper/source/Level/LevelService.cpp @@ -35,6 +35,26 @@ namespace Level return level_controller->getCurrentBoxValue(currentPosition); } + void LevelService::loadNextLevel() + { + level_controller->loadNextLevel(); + } + + int LevelService::getCurrentLevelNumber() + { + return level_controller->getCurrentLevelNumber(); + } + + bool LevelService::isLastLevel() + { + return level_controller->isLastLevel(); + } + + void LevelService::resetLevels() + { + level_controller->reset(); + } + void LevelService::destroy() { delete(level_controller);