mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-06-04 02:36:31 +00:00
parser is working quite nicely
This commit is contained in:
@@ -81,7 +81,7 @@ namespace BBM {
|
|||||||
std::replace(name.begin(), name.end(), ' ', '_');
|
std::replace(name.begin(), name.end(), ' ', '_');
|
||||||
_bonus << std::endl << " " << name << ":" << std::endl << " ";
|
_bonus << std::endl << " " << name << ":" << std::endl << " ";
|
||||||
_bonus << std::string("bonus_type: ") << _getBonusType(entity.getName()) << std::endl << " ";
|
_bonus << std::string("bonus_type: ") << _getBonusType(entity.getName()) << std::endl << " ";
|
||||||
_bonus << "position: [" << std::to_string(position->getX()) << " " << std::to_string(position->getY()) << " " << std::to_string(position->getZ()) << "]";
|
_bonus << "position: [" << std::to_string(position->getX()) << "," << std::to_string(position->getY()) << "," << std::to_string(position->getZ()) << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParserYAML::_savePlayer(const WAL::Entity &entity)
|
void ParserYAML::_savePlayer(const WAL::Entity &entity)
|
||||||
@@ -100,7 +100,7 @@ namespace BBM {
|
|||||||
_player << "max_bomb: " << std::to_string(bombHolder->maxBombCount) << std::endl << " ";
|
_player << "max_bomb: " << std::to_string(bombHolder->maxBombCount) << std::endl << " ";
|
||||||
_player << "explosion_radius: " << std::to_string(bombHolder->explosionRadius) << std::endl << " ";
|
_player << "explosion_radius: " << std::to_string(bombHolder->explosionRadius) << std::endl << " ";
|
||||||
_player << "speed: " << std::to_string(controllable->speed) << std::endl << " ";
|
_player << "speed: " << std::to_string(controllable->speed) << std::endl << " ";
|
||||||
_player << "position: [" << std::to_string(position->getX()) << " " << std::to_string(position->getY()) << " " << std::to_string(position->getZ()) << "]";
|
_player << "position: [" << std::to_string(position->getX()) << "," << std::to_string(position->getY()) << "," << std::to_string(position->getZ()) << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParserYAML::_saveBlock(const WAL::Entity &entity)
|
void ParserYAML::_saveBlock(const WAL::Entity &entity)
|
||||||
@@ -113,7 +113,7 @@ namespace BBM {
|
|||||||
std::replace(name.begin(), name.end(), ' ', '_');
|
std::replace(name.begin(), name.end(), ' ', '_');
|
||||||
_block << std::endl << " " << name << ":" << std::endl << " ";
|
_block << std::endl << " " << name << ":" << std::endl << " ";
|
||||||
_block << std::string("block_type: ") << _getBlockType(entity.getName()) << std::endl << " ";
|
_block << std::string("block_type: ") << _getBlockType(entity.getName()) << std::endl << " ";
|
||||||
_block << "position: [" << std::to_string(position->getX()) << " " << std::to_string(position->getY()) << " " << std::to_string(position->getZ()) << "]";
|
_block << "position: [" << std::to_string(position->getX()) << "," << std::to_string(position->getY()) << "," << std::to_string(position->getZ()) << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParserYAML::save(std::shared_ptr<WAL::Scene> scene)
|
void ParserYAML::save(std::shared_ptr<WAL::Scene> scene)
|
||||||
@@ -501,8 +501,17 @@ namespace BBM {
|
|||||||
while(std::getline(file, line)) {
|
while(std::getline(file, line)) {
|
||||||
if (line.empty())
|
if (line.empty())
|
||||||
continue;
|
continue;
|
||||||
if (!isCorrectIndentLevel(line, indentLevel))
|
float lineIndentLevel = getIndent(line);
|
||||||
|
if (lineIndentLevel != static_cast<int>(lineIndentLevel)) {
|
||||||
|
throw ParserError("Yaml only support 2 spaces as indent");
|
||||||
|
}
|
||||||
|
if (lineIndentLevel > indentLevel) {
|
||||||
|
throw ParserError("indent issue");
|
||||||
|
}
|
||||||
|
if (lineIndentLevel < indentLevel) {
|
||||||
|
file.seekg(static_cast<size_t>(file.tellg()) - (line.length() + 1));
|
||||||
return node;
|
return node;
|
||||||
|
}
|
||||||
if (isHeader(line)) {
|
if (isHeader(line)) {
|
||||||
node.addChildNode(parseNode(file, parseHeader(line), indentLevel + 1));
|
node.addChildNode(parseNode(file, parseHeader(line), indentLevel + 1));
|
||||||
} else {
|
} else {
|
||||||
@@ -512,14 +521,16 @@ namespace BBM {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ParserYAML::isCorrectIndentLevel(const std::string &line, int indentLevel)
|
float ParserYAML::getIndent(const std::string &line)
|
||||||
{
|
{
|
||||||
int nb = 0;
|
int nb = 0;
|
||||||
for (const auto &c : line) {
|
for (const auto &c : line) {
|
||||||
if (!std::isspace(c))
|
if (!std::isspace(c))
|
||||||
break;
|
break;
|
||||||
|
if (c != ' ')
|
||||||
|
throw ParserError("Yaml only support 2 spaces as indent");
|
||||||
nb++;
|
nb++;
|
||||||
}
|
}
|
||||||
return nb == indentLevel;
|
return static_cast<float>(nb / 2.);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ namespace BBM {
|
|||||||
|
|
||||||
static Node parseNode(std::ifstream &file, const std::string &nodeName, int indentLevel = 0);
|
static Node parseNode(std::ifstream &file, const std::string &nodeName, int indentLevel = 0);
|
||||||
|
|
||||||
static bool isCorrectIndentLevel(const std::string &line, int indentLevel);
|
static float getIndent(const std::string &line);
|
||||||
|
|
||||||
static constexpr const char* indent = " ";
|
static constexpr const char* indent = " ";
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "Runner/Runner.hpp"
|
#include "Runner/Runner.hpp"
|
||||||
#include "Parser/ParserYaml.hpp"
|
|
||||||
|
|
||||||
void usage(const std::string &bin)
|
void usage(const std::string &bin)
|
||||||
{
|
{
|
||||||
@@ -24,8 +23,5 @@ int main(int argc, char **argv)
|
|||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
BBM::Node node = BBM::ParserYAML::parseFile("test.yml");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
return BBM::Runner::run();
|
return BBM::Runner::run();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user