From fdc77a1825e4dfa4661fb7087258096bbe0973d5 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 18 Apr 2010 16:16:56 +0100 Subject: [PATCH] Allow scaling buildings --- buildings/white_house/white_house.xml | 1 + schemas/building.xsd | 4 ++-- src/Building.cpp | 20 ++++++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/buildings/white_house/white_house.xml b/buildings/white_house/white_house.xml index 5ad8237..8f68e35 100644 --- a/buildings/white_house/white_house.xml +++ b/buildings/white_house/white_house.xml @@ -2,4 +2,5 @@ White House house.obj + 0.8 diff --git a/schemas/building.xsd b/schemas/building.xsd index 5f0176b..4b3c114 100644 --- a/schemas/building.xsd +++ b/schemas/building.xsd @@ -3,9 +3,9 @@ - - + + diff --git a/src/Building.cpp b/src/Building.cpp index 92c0ce9..d914729 100644 --- a/src/Building.cpp +++ b/src/Building.cpp @@ -47,14 +47,28 @@ private: IResourcePtr resource; float angle; Vector position; + + struct ParserState { + string modelFile; + float scale; + IResourcePtr res; + } *parserState; }; Building::Building(IResourcePtr aRes) - : name_("???"), resource(aRes), angle(0.0f) + : name_("???"), angle(0.0f) { static IXMLParserPtr parser = makeXMLParser("schemas/building.xsd"); + parserState = new ParserState; + parserState->res = aRes; + parserState->scale = 1.0f; + parser->parse(aRes->xmlFileName(), *this); + + model_ = loadModel(aRes, parserState->modelFile, parserState->scale); + + delete parserState; } void Building::setPosition(float x, float y, float z) @@ -77,8 +91,10 @@ void Building::text(const string& localName, const string& aString) { if (localName == "name") name_ = aString; + else if (localName == "scale") + parserState->scale = boost::lexical_cast(aString); else if (localName == "model") - model_ = loadModel(resource, aString); + parserState->modelFile = aString; } xml::element Building::toXml() const -- 2.39.2