-void Interpreter::ReadObject(const Definition &dfn) {
- if (dfn.TypeName() == "ComplexAnimation") {
- ComplexAnimation *animation(new ComplexAnimation);
- int index(complexAnimations.size());
- complexAnimations.push_back(animation);
- ReadComplexAnimation(*animation, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, COMPLEX_ANIMATION, index)));
- } else if (dfn.TypeName() == "Hero") {
- Hero *hero(new Hero);
- int index(heroes.size());
- heroes.push_back(hero);
- ReadHero(*hero, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, HERO, index)));
- } else if (dfn.TypeName() == "Monster") {
- Monster *monster(new Monster);
- int index(monsters.size());
- monsters.push_back(monster);
- ReadMonster(*monster, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, MONSTER, index)));
- } else if (dfn.TypeName() == "PartyLayout") {
- PartyLayout *layout(new PartyLayout);
- int index(partyLayouts.size());
- partyLayouts.push_back(layout);
- ReadPartyLayout(*layout, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, PARTY_LAYOUT, index)));
- } else if (dfn.TypeName() == "SimpleAnimation") {
- SimpleAnimation *animation(new SimpleAnimation);
- int index(simpleAnimations.size());
- simpleAnimations.push_back(animation);
- ReadSimpleAnimation(*animation, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, SIMPLE_ANIMATION, index)));
- } else if (dfn.TypeName() == "Sprite") {
- Sprite *sprite(new Sprite);
- int index(sprites.size());
- sprites.push_back(sprite);
- ReadSprite(*sprite, *dfn.GetProperties());
- parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, SPRITE, index)));
- } else {
- throw Error("unhandled object type: " + dfn.TypeName());
- }
-}
-
-
-void Interpreter::ReadComplexAnimation(ComplexAnimation &a, const PropertyList &props) {
- for (PropertyList::ConstIterator i(props.Begin()), end(props.End()); i != end; ++i) {
- if (i->first == "sprite") {
- a.SetSprite(GetSprite(*i->second));
- } else if (i->first == "frametime") {
- a.SetFrameTime(GetNumber(*i->second));
- } else if (i->first == "repeat") {
- a.SetRepeat(GetBoolean(*i->second));
- } else if (i->first == "frames") {
- const vector<PropertyList *> &values(GetPropertyListArray(*i->second));
- for (vector<PropertyList *>::const_iterator i(values.begin()), end(values.end()); i != end; ++i) {
- ComplexAnimation::FrameProp frame;
- ReadComplexAnimationFrame(frame, **i);
- a.AddFrame(frame);
- }
- } else {
- throw Error("unknown ComplexAnimation property: " + i->first);
- }
- }
-}
-
-void Interpreter::ReadComplexAnimationFrame(ComplexAnimation::FrameProp &f, const PropertyList &props) {
- for (PropertyList::ConstIterator i(props.Begin()), end(props.End()); i != end; ++i) {
- if (i->first == "column") {
- f.col = GetNumber(*i->second);
- } else if (i->first == "row") {
- f.row = GetNumber(*i->second);
- } else if (i->first == "disposition") {
- f.disposition = GetVector(*i->second);
- } else {
- throw Error("unknown ComplexAnimationFrame property: " + i->first);
- }