#ifndef DOT_SCENELOADER_H #define DOT_SCENELOADER_H // Includes #include <OgreString.h> #include <OgreVector3.h> #include <OgreQuaternion.h> #include <OgreResourceGroupManager.h> #include <vector> #include "rapidxml.hpp" // Forward declarations namespace Ogre { class SceneManager; class SceneNode; class TerrainGroup; class TerrainGlobalOptions; } class nodeProperty { public: Ogre::String nodeName; Ogre::String propertyNm; Ogre::String valueName; Ogre::String typeName; nodeProperty(const Ogre::String &node, const Ogre::String &propertyName, const Ogre::String &value, const Ogre::String &type) : nodeName(node), propertyNm(propertyName), valueName(value), typeName(type) {} }; class DotSceneLoader { public: Ogre::TerrainGlobalOptions *mTerrainGlobalOptions; DotSceneLoader(); virtual ~DotSceneLoader(); void parseDotScene(const Ogre::String &SceneName, const Ogre::String &groupName, Ogre::SceneManager *yourSceneMgr, Ogre::SceneNode *pAttachNode = NULL, const Ogre::String &sPrependNode = ""); Ogre::String getProperty(const Ogre::String &ndNm, const Ogre::String &prop); Ogre::TerrainGroup* getTerrainGroup() { return mTerrainGroup; } std::vector<nodeProperty> nodeProperties; std::vector<Ogre::String> staticObjects; std::vector<Ogre::String> dynamicObjects; protected: void processScene(rapidxml::xml_node<>* XMLRoot); void processNodes(rapidxml::xml_node<>* XMLNode); void processExternals(rapidxml::xml_node<>* XMLNode); void processEnvironment(rapidxml::xml_node<>* XMLNode); void processTerrain(rapidxml::xml_node<>* XMLNode); void processTerrainPage(rapidxml::xml_node<>* XMLNode); void processBlendmaps(rapidxml::xml_node<>* XMLNode); void processUserDataReference(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent = 0); void processUserDataReference(rapidxml::xml_node<>* XMLNode, Ogre::Entity *pEntity); void processOctree(rapidxml::xml_node<>* XMLNode); void processLight(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent = 0); void processCamera(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent = 0); void processNode(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent = 0); void processLookTarget(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processTrackTarget(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processEntity(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processParticleSystem(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processBillboardSet(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processPlane(rapidxml::xml_node<>* XMLNode, Ogre::SceneNode *pParent); void processFog(rapidxml::xml_node<>* XMLNode); void processSkyBox(rapidxml::xml_node<>* XMLNode); void processSkyDome(rapidxml::xml_node<>* XMLNode); void processSkyPlane(rapidxml::xml_node<>* XMLNode); void processClipping(rapidxml::xml_node<>* XMLNode); void processLightRange(rapidxml::xml_node<>* XMLNode, Ogre::Light *pLight); void processLightAttenuation(rapidxml::xml_node<>* XMLNode, Ogre::Light *pLight); Ogre::String getAttrib(rapidxml::xml_node<>* XMLNode, const Ogre::String ¶meter, const Ogre::String &defaultValue = ""); Ogre::Real getAttribReal(rapidxml::xml_node<>* XMLNode, const Ogre::String ¶meter, Ogre::Real defaultValue = 0); bool getAttribBool(rapidxml::xml_node<>* XMLNode, const Ogre::String ¶meter, bool defaultValue = false); Ogre::Vector3 parseVector3(rapidxml::xml_node<>* XMLNode); Ogre::Quaternion parseQuaternion(rapidxml::xml_node<>* XMLNode); Ogre::ColourValue parseColour(rapidxml::xml_node<>* XMLNode); Ogre::SceneManager *mSceneMgr; Ogre::SceneNode *mAttachNode; Ogre::String m_sGroupName; Ogre::String m_sPrependNode; Ogre::TerrainGroup* mTerrainGroup; Ogre::Vector3 mTerrainPosition; Ogre::Vector3 mLightDirection; }; #endif // DOT_SCENELOADER_H