OpenMW
apps/openmw/mwrender/debugging.hpp
Go to the documentation of this file.
00001 #ifndef _GAME_RENDER_MWSCENE_H
00002 #define _GAME_RENDER_MWSCENE_H
00003 
00004 #include <utility>
00005 #include <openengine/ogre/renderer.hpp>
00006 
00007 #include <vector>
00008 #include <string>
00009 
00010 namespace ESM
00011 {
00012     struct Pathgrid;
00013 }
00014 
00015 namespace OEngine
00016 {
00017     namespace Physic
00018     {
00019         class PhysicEngine;
00020     }
00021 }
00022 
00023 namespace Ogre
00024 {
00025     class Camera;
00026     class Viewport;
00027     class SceneManager;
00028     class SceneNode;
00029     class RaySceneQuery;
00030     class Quaternion;
00031     class Vector3;
00032 }
00033 
00034 namespace MWWorld
00035 {
00036     class Ptr;
00037     class CellStore;
00038 }
00039 
00040 namespace MWRender
00041 {
00042     class Debugging
00043     {
00044         OEngine::Physic::PhysicEngine* mEngine;
00045         Ogre::SceneManager *mSceneMgr;
00046 
00047         // Path grid stuff
00048         bool mPathgridEnabled;
00049 
00050         void togglePathgrid();
00051 
00052         typedef std::vector<MWWorld::CellStore *> CellList;
00053         CellList mActiveCells;
00054 
00055         Ogre::SceneNode *mRootNode;
00056 
00057         Ogre::SceneNode *mPathGridRoot;
00058 
00059         typedef std::map<std::pair<int,int>, Ogre::SceneNode *> ExteriorPathgridNodes;
00060         ExteriorPathgridNodes mExteriorPathgridNodes;
00061         Ogre::SceneNode *mInteriorPathgridNode;
00062 
00063         void enableCellPathgrid(MWWorld::CellStore *store);
00064         void disableCellPathgrid(MWWorld::CellStore *store);
00065 
00066         // utility
00067         void destroyCellPathgridNode(Ogre::SceneNode *node);
00068         void destroyAttachedObjects(Ogre::SceneNode *node);
00069 
00070         // materials
00071         bool mGridMatsCreated;
00072         void createGridMaterials();
00073         void destroyGridMaterials();
00074 
00075         // path grid meshes
00076         Ogre::ManualObject *createPathgridLines(const ESM::Pathgrid *pathgrid);
00077         Ogre::ManualObject *createPathgridPoints(const ESM::Pathgrid *pathgrid);
00078     public:
00079         Debugging(Ogre::SceneNode* root, OEngine::Physic::PhysicEngine *engine);
00080         ~Debugging();
00081         bool toggleRenderMode (int mode);
00082 
00083         void cellAdded(MWWorld::CellStore* store);
00084         void cellRemoved(MWWorld::CellStore* store);
00085     };
00086 
00087 
00088 }
00089 
00090 #endif