Add objects parsing to SceneParser

This commit is contained in:
Eryn Wells 2014-07-19 15:43:44 -07:00
parent 43a1e790cb
commit 49e3395a4c
2 changed files with 30 additions and 2 deletions

View file

@ -9,6 +9,7 @@
#include <cassert> #include <cassert>
#include <string> #include <string>
#include "objectParser.hh"
#include "sceneParser.hh" #include "sceneParser.hh"
#include "vector_parser.hh" #include "vector_parser.hh"
@ -31,6 +32,7 @@ SceneParser::HandleKeyEvent(const std::string& key)
{ {
static const std::map<std::string, Section> sSections = { static const std::map<std::string, Section> sSections = {
{"dimensions", DimensionsSection}, {"dimensions", DimensionsSection},
{"objects", ObjectsSection}
}; };
if (sSections.count(key) > 0) { if (sSections.count(key) > 0) {
@ -52,14 +54,13 @@ SceneParser::HandleValueEvent(yaml_event_t& event)
HandleDimensionsEvent(event); HandleDimensionsEvent(event);
break; break;
case ObjectsSection: case ObjectsSection:
HandleObjectsEvent(event);
break; break;
default: default:
/* TODO: WHAT. Fail gracefully. */ /* TODO: WHAT. Fail gracefully. */
assert(false); assert(false);
break; break;
} }
SetShouldExpectKey(false);
} }
@ -70,6 +71,7 @@ SceneParser::HandleDimensionsEvent(yaml_event_t& event)
if (dimensions.size() < 2) { if (dimensions.size() < 2) {
assert(dimensions.size() < 2); assert(dimensions.size() < 2);
} }
Scene& sc = GetScene(); Scene& sc = GetScene();
sc.set_width(dimensions.at(0)); sc.set_width(dimensions.at(0));
sc.set_height(dimensions.at(1)); sc.set_height(dimensions.at(1));
@ -88,4 +90,29 @@ SceneParser::HandleDimensionsEvent(yaml_event_t& event)
} }
} }
void
SceneParser::HandleObjectsEvent(yaml_event_t& event)
{
if (event.type == YAML_SEQUENCE_START_EVENT) {
/* Ignore sequence-start for now. */
printf("start objects\n");
return;
}
else if (event.type == YAML_SEQUENCE_END_EVENT) {
printf("end objects\n");
mSection = NoSection;
SetShouldExpectKey(true);
return;
}
if (event.type != YAML_MAPPING_START_EVENT) {
assert(event.type != YAML_MAPPING_START_EVENT);
return;
}
printf("start object\n");
GetParsers().push(new ObjectParser(GetScene(), GetParsers()));
}
} /* namespace yaml */ } /* namespace yaml */

View file

@ -36,6 +36,7 @@ private:
}; };
void HandleDimensionsEvent(yaml_event_t& event); void HandleDimensionsEvent(yaml_event_t& event);
void HandleObjectsEvent(yaml_event_t& event);
Section mSection; Section mSection;
}; };