Skip to content
Permalink
Browse files
Enhanced maze UI
  • Loading branch information
mateussa committed Mar 6, 2018
1 parent 16158f3 commit 520c183822171a513d42be5342f9c250ca50852c
Show file tree
Hide file tree
Showing 14 changed files with 159 additions and 49 deletions.
@@ -42,6 +42,7 @@
<Add library="winmm" />
</Linker>
<Unit filename="include/BattleScene.h" />
<Unit filename="include/CharacterSelection.h" />
<Unit filename="include/Enemy.h" />
<Unit filename="include/EnemyAI.h" />
<Unit filename="include/Highscore.h" />
@@ -53,6 +54,7 @@
<Unit filename="include/UIHelpers.h" />
<Unit filename="include/Utils.h" />
<Unit filename="src/BattleScene.cpp" />
<Unit filename="src/CharacterSelection.cpp" />
<Unit filename="src/Enemy.cpp" />
<Unit filename="src/EnemyAI.cpp" />
<Unit filename="src/LevelManager.cpp" />
@@ -1,5 +1,6 @@
#ifndef BATTLESCENE_H
#define BATTLESCENE_H
#include "UIHelpers.h"
#include <vector>
#include <iostream>
#include <array>
@@ -9,6 +10,7 @@
#define defenceHealAnimSpeed 150

using namespace std;
using namespace UIHelpers;

class LevelManager;
class Enemy;
@@ -54,7 +56,7 @@ class BattleScene
weak_ptr<LevelManager> lvlManager;

// Text to show and type action | 0 = attack 1 = defend 2 = heal
array<pair<string, int>, 13> battleInfo;
array<pair<string, MessageType>, 13> battleInfo;

unsigned sceneWidth;
unsigned sceneHeight;
@@ -69,9 +71,6 @@ class BattleScene
// Check health color
int HealthColor(int health, bool TBackFFront = true);

// Add line to battleInfo - Text to show and type action | 0 = info 1 = attack 2 = defend 3 = heal
void UpdateBattleInfo(string text, int type);

// Play attack animation
void PlayAttack(int atype, int colour);
// Play defend animation
@@ -5,7 +5,7 @@
#include <vector>
#include <cstdlib> //random generation
#include <iostream>
#include "memory"
#include <memory>

using namespace std;

@@ -44,6 +44,7 @@ class Enemy
weak_ptr<Maze> maze;
int xPos, yPos;

bool followingPlayer;

protected:

@@ -32,7 +32,7 @@ class LevelManager : public std::enable_shared_from_this<LevelManager>
ScoreTime *scoretime;
vector<shared_ptr<Enemy>> enemies;

enum Music
enum class Music
{
Muted,
MainMenu,
@@ -43,7 +43,7 @@ class LevelManager : public std::enable_shared_from_this<LevelManager>
Victory
};

enum Effect
enum class Effect
{
Move,
Run,
@@ -1,8 +1,5 @@
#ifndef PLAYER_H
#define PLAYER_H
#include "Maze.h"
#include "Enemy.h"
#include "ScoreTime.h"
#include <array>
#include <vector>
#include <cstdlib> //random generation
@@ -12,6 +9,9 @@
using namespace std;

class LevelManager;
class Enemy;
class Maze;
class ScoreTime;

class Player
{
@@ -1,5 +1,6 @@
#ifndef UI_H
#define UI_H
#include "UIHelpers.h"
#include <vector>
#include <array>
#include <map>
@@ -10,6 +11,7 @@


using namespace std;
using namespace UIHelpers;

class LevelManager;
class BattleScene;
@@ -33,6 +35,8 @@ class UI
unique_ptr<BattleScene> btlScene;
void StartBattleScene(shared_ptr<Enemy> enemy);

array<pair<string, UIHelpers::MessageType>, 3> mazeInfo;

// Meshes
vector<array<string, 8>> enemyMesh = {{" ",
" . . ",
@@ -9,7 +9,7 @@
#include <cctype>
#include <sstream>
#include <algorithm>
#include "memory"
#include <memory>

#include "LevelManager.h"

@@ -120,11 +120,11 @@ namespace UIHelpers
// change the text colour
bool ChangeColour(int colour);
// Show pause screen
void buildPause(shared_ptr<LevelManager> lvlManger, int x, int y, bool allowSave = true);
void BuildPause(shared_ptr<LevelManager> lvlManger, int x, int y, bool allowSave = true);

string toLower(string str);

void setFullScreen();
void SetFullScreen();

// Check argument values from SQLPrepare function
template<typename Value>
@@ -312,6 +312,30 @@ namespace UIHelpers
return requestFromUser<expectedInput>(nullptr, question, minLimit, maxLimit);
}

enum class MessageType
{
Attack,
Defend,
Heal,
PickUp,
Enemy,
General,
Victory
};

// Add line to battleInfo - Text to show and type action
template<typename T>
void UpdateMessageInfo(T &messageArray, string text, MessageType mType)
{
for(unsigned i = 0; i < messageArray.size(); i++)
{
if( i + 1 < messageArray.size())
messageArray[i] = messageArray[i + 1];
else
messageArray[i] = make_pair(text, mType);
}
}

};

#endif // UIHELPERS_H
@@ -1,7 +1,6 @@
#include <math.h>
#include <algorithm>
#include "BattleScene.h"
#include "UIHelpers.h"
#include "UI.h"
#include "LevelManager.h"
#include "Enemy.h"
@@ -28,7 +27,7 @@ BattleScene::BattleScene(shared_ptr<LevelManager> lvlman, shared_ptr<Enemy> e)
isEnemyDefending = false;
enemyJustAttacked = false;

battleInfo[battleInfo.size() - 1] = make_pair(e->getName() + " encountered.", 0);
battleInfo[battleInfo.size() - 1] = make_pair(e->getName() + " encountered.", MessageType::General);
}

int BattleScene::BuildScene()
@@ -122,16 +121,16 @@ int BattleScene::BuildScene()
PrintC(" ");
switch (battleInfo[h - 1].second)
{
case 0:
case MessageType::General:
PrintC(battleInfo[h - 1].first, pauseColour(15));
break;
case 1:
case MessageType::Attack:
PrintC(battleInfo[h - 1].first, pauseColour(12));
break;
case 2:
case MessageType::Defend:
PrintC(battleInfo[h - 1].first, pauseColour(11));
break;
case 3:
case MessageType::Heal:
PrintC(battleInfo[h - 1].first, pauseColour(10));
break;
default:
@@ -146,16 +145,16 @@ int BattleScene::BuildScene()
PrintC(" ");
switch (battleInfo[h - 1].second)
{
case 0:
case MessageType::General:
PrintC(battleInfo[h - 1].first, pauseColour(8));
break;
case 1:
case MessageType::Attack:
PrintC(battleInfo[h - 1].first, pauseColour(4));
break;
case 2:
case MessageType::Defend:
PrintC(battleInfo[h - 1].first, pauseColour(3));
break;
case 3:
case MessageType::Heal:
PrintC(battleInfo[h - 1].first, pauseColour(2));
break;
default:
@@ -289,18 +288,6 @@ int BattleScene::HealthColor(int health, bool TBackFFront)
return pauseColour(colour);
}

// Add line to battleInfo - Text to show and type action | 0 = attack 1 = defend 2 = heal
void BattleScene::UpdateBattleInfo(string text, int type)
{
for(unsigned i = 0; i < battleInfo.size(); i++)
{
if( i + 1 < battleInfo.size())
battleInfo[i] = battleInfo[i + 1];
else
battleInfo[i] = make_pair(text, type);
}
}


void BattleScene::PlayAttack(int atype, int colour)
{
@@ -789,7 +776,7 @@ void BattleScene::PlayerAttack()
}

tempHealth = tempHealth - enemyHealth;
UpdateBattleInfo(lvlman->player->pName + " dealt " + to_string(tempHealth) + " damage", 1);
UpdateMessageInfo(battleInfo, lvlman->player->pName + " dealt " + to_string(tempHealth) + " damage", MessageType::Attack);

isEnemyDefending = false;
TPlayerFEnemy = false;
@@ -802,7 +789,7 @@ void BattleScene::PlayerDefend()
{
PlayDefend(lvlman->player->pDefenceType, lvlman->player->pDefenceColour);

UpdateBattleInfo(lvlman->player->pName + " is defending", 2);
UpdateMessageInfo(battleInfo, lvlman->player->pName + " is defending", MessageType::Defend);

isPlayerDefending = true;
isEnemyDefending = false;
@@ -824,7 +811,7 @@ void BattleScene::PlayerHeal()
playerHealth = playerMaxHealth;

tempHealth = playerHealth - tempHealth;
UpdateBattleInfo(lvlman->player->pName + " healed by " + to_string(tempHealth), 3);
UpdateMessageInfo(battleInfo, lvlman->player->pName + " healed by " + to_string(tempHealth), MessageType::Heal);

isEnemyDefending = false;
TPlayerFEnemy = false;
@@ -848,7 +835,8 @@ bool BattleScene::canPlayerRun()

if (chance <= changeLimit)
{
UpdateBattleInfo(lvlman->player->pName + " ran from battle.", 0);
UpdateMessageInfo(battleInfo, lvlman->player->pName + " ran from battle.", MessageType::General);
UpdateMessageInfo(lvlman->ui->mazeInfo, lvlman->player->pName + " ran from battle.", MessageType::General);

// Delete enemy from vector
auto it = find(begin(lvlman->enemies), end(lvlman->enemies), e);
@@ -861,7 +849,7 @@ bool BattleScene::canPlayerRun()
}
else
{
UpdateBattleInfo(e->getName() + " stopped " + lvlman->player->pName + " from running.", 0);
UpdateMessageInfo(battleInfo, e->getName() + " stopped " + lvlman->player->pName + " from running.", MessageType::General);
isEnemyDefending = false;
TPlayerFEnemy = false;
return false;
@@ -894,7 +882,7 @@ void BattleScene::EnemyAttack()
}

tempHealth = tempHealth - playerHealth;
UpdateBattleInfo(e->getName() + " dealt " + to_string(tempHealth) + " damage", 1);
UpdateMessageInfo(battleInfo, e->getName() + " dealt " + to_string(tempHealth) + " damage", MessageType::Attack);

isPlayerDefending = false;
TPlayerFEnemy = true;
@@ -908,7 +896,7 @@ void BattleScene::EnemyDefend()
{
PlayDefend(e->getDefenceType(), e->getDefenceColour());

UpdateBattleInfo(e->getName() + " is defending", 2);
UpdateMessageInfo(battleInfo, e->getName() + " is defending", MessageType::Defend);

isEnemyDefending = true;
isPlayerDefending = false;
@@ -931,7 +919,7 @@ void BattleScene::EnemyHeal()
enemyHealth = enemyMaxHealth;

tempHealth = enemyHealth - tempHealth;
UpdateBattleInfo(e->getName() + " healed by " + to_string(tempHealth), 3);
UpdateMessageInfo(battleInfo, e->getName() + " healed by " + to_string(tempHealth), MessageType::Heal);

isPlayerDefending = false;
TPlayerFEnemy = true;
@@ -31,6 +31,7 @@ Enemy::Enemy(shared_ptr<Maze> m)

xPos = x;
yPos = y;
followingPlayer = false;
}
Enemy::~Enemy()
{
@@ -3,6 +3,8 @@
#include "LevelManager.h"
#include "Player.h"
#include "UIHelpers.h"
#include "Enemy.h"
#include "UI.h"

using namespace UIHelpers;

@@ -18,6 +20,11 @@ void EnemyAI::getNextPosition(shared_ptr<Enemy> enemy)
if (abs(lvlman->player->xPos - enemy->xPos) < followPlayerLimit ||
abs(lvlman->player->yPos - enemy->yPos) < followPlayerLimit )
{
string m = "An enemy just felt you, it's coming to find you!";
if(lvlman->ui->mazeInfo[lvlman->ui->mazeInfo.size() - 1].first != m)
UpdateMessageInfo(lvlman->ui->mazeInfo, m, MessageType::Enemy);

enemy->followingPlayer = true;

vector<pos> path = findPath({enemy->xPos, enemy->yPos});

@@ -43,6 +50,7 @@ void EnemyAI::getNextPosition(shared_ptr<Enemy> enemy)
}
else
{
enemy->followingPlayer = false;
enemy->randomMoveEnemy();
}
}
@@ -4,6 +4,8 @@
#include "BattleScene.h"
#include "UI.h"
#include "UIHelpers.h"
#include "Maze.h"
#include "ScoreTime.h"

using namespace UIHelpers;

@@ -201,6 +203,18 @@ void Player::chestEvent(void)
pHealth += addHealth;
pKeys += addKeys;
pDamage += addDamage;

// Andre's Code
string message = "You just earned " + to_string(randomScore) + " points, " + to_string(addArmour) +
" armour, " + to_string(addHealth) + " health, " + to_string(addDamage) + " damage";

if(addKeys > 0)
message += " ," + to_string(addKeys) + " keys";

message += ".";


UpdateMessageInfo(lvlmanager->ui->mazeInfo, message, MessageType::PickUp);
}

void Player::checkChest()

0 comments on commit 520c183

Please sign in to comment.