Load default map
This commit is contained in:
parent
b0d0f1e564
commit
6c16121c11
@ -1,11 +1,74 @@
|
||||
|
||||
#include "pixelGameEngine.h"
|
||||
#include "main.h"
|
||||
#include "Editor.h"
|
||||
using namespace olc;
|
||||
|
||||
extern FaceBall* game;
|
||||
|
||||
void Editor::Update(float fElapsedTime){
|
||||
game->DrawStringDecal({ 0,0 }, "HEllo World!", WHITE, { 4,4 });
|
||||
if (!game->IsTextEntryEnabled()){
|
||||
if (game->GetKey(F1).bPressed || reEnableTextEntry) {
|
||||
game->TextEntryEnable(true);
|
||||
reEnableTextEntry = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
game->DrawStringDecal({ 0,0 }, "Enter Level (1-30): "+game->TextEntryGetString(), WHITE, {4,4});
|
||||
}
|
||||
}
|
||||
|
||||
void Editor::OnTextEntryComplete(const std::string& sText) {
|
||||
std::stringstream ss(game->TextEntryGetString());
|
||||
int level;
|
||||
ss >> level;
|
||||
if (level >= 1 && level <= 30) {
|
||||
game->TextEntryEnable(false);
|
||||
this->level = level;
|
||||
LoadLevel();
|
||||
}
|
||||
else {
|
||||
reEnableTextEntry = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Editor::LoadLevel() {
|
||||
std::ifstream file("assets/map/map"+std::to_string(level)+".map");
|
||||
if (file.good()) {
|
||||
while (file.good()) {
|
||||
std::string line;
|
||||
std::getline(file, line);
|
||||
int width = std::atoi(line.c_str());
|
||||
std::getline(file, line);
|
||||
int height = std::atoi(line.c_str());
|
||||
MAP_SIZE = { width,height };
|
||||
map.clear();
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
std::vector<Tile>row;
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
std::getline(file, line);
|
||||
int map_data = std::atoi(line.c_str());
|
||||
Tile newTile;
|
||||
newTile.blink = (map_data & 0b1000000000000000) >> 15;
|
||||
newTile.facingDir = FacingDirection((map_data & 0b0110000000000000) >> 13);
|
||||
newTile.enemyId = EnemyID((map_data & 0b0001111110000000) >> 7);
|
||||
newTile.spawnWave = (map_data & 0b1110000) >> 4;
|
||||
newTile.walls = map_data & 0b1111;
|
||||
row.push_back(newTile);
|
||||
}
|
||||
map.push_back(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::cout << "Map Level " << level << " does not exist. Creating default map."<<std::endl;
|
||||
MAP_SIZE = { 5,5 };
|
||||
map.clear();
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
std::vector<Tile>row;
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
row.push_back({});
|
||||
}
|
||||
map.push_back(row);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,10 +2,54 @@
|
||||
#include "pixelGameEngine.h"
|
||||
using namespace olc;
|
||||
|
||||
enum class FacingDirection {
|
||||
NORTH, EAST, SOUTH, WEST
|
||||
};
|
||||
|
||||
enum EnemyID {
|
||||
EXIT,
|
||||
SHOOTME,
|
||||
POWERUP_ARMOR=57,
|
||||
POWERUP_SPEED=58,
|
||||
POWERUP_SHOT=59,
|
||||
SPECIAL_CAMO=60,
|
||||
SPECIAL_STOP=61,
|
||||
SPECIAL_SHIELD=62,
|
||||
AREA_MAP=63,
|
||||
};
|
||||
|
||||
/*
|
||||
enum Wave {
|
||||
WAVE0=0,
|
||||
WAVE1=1,
|
||||
WAVE2=2,
|
||||
WAVE3=4
|
||||
};
|
||||
|
||||
enum WallDirection {
|
||||
NONE = 0,
|
||||
NORTH = 1,
|
||||
EAST = 2,
|
||||
SOUTH = 4,
|
||||
WEST = 8
|
||||
};*/
|
||||
|
||||
struct Tile {
|
||||
EnemyID enemyId=SHOOTME;
|
||||
FacingDirection facingDir=FacingDirection::EAST;
|
||||
byte spawnWave=0;
|
||||
byte walls=0;
|
||||
bool blink=false;
|
||||
};
|
||||
|
||||
class Editor {
|
||||
std::string filename;
|
||||
int level;
|
||||
vi2d MAP_SIZE;
|
||||
bool reEnableTextEntry; //We must set this to true to cause Text Entry to reappear due to how the callback works.
|
||||
std::vector<std::vector<Tile>> map;
|
||||
public:
|
||||
Editor() {}
|
||||
void Update(float fElapsedTime);
|
||||
void OnTextEntryComplete(const std::string& sText);
|
||||
void LoadLevel();
|
||||
};
|
@ -715,7 +715,15 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void FaceBall::OnTextEntryComplete(const std::string& sText) {
|
||||
switch (mode) {
|
||||
case GAME: {
|
||||
}break;
|
||||
case EDITOR: {
|
||||
editor.OnTextEntryComplete(sText);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
|
@ -182,4 +182,5 @@ class FaceBall : public PixelGameEngine
|
||||
void AddWall(Direction dir, vi2d gridSquare);
|
||||
bool OnUserCreate() override;
|
||||
bool OnUserUpdate(float fElapsedTime) override;
|
||||
void OnTextEntryComplete(const std::string& sText) override;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user