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);