OpenMW
|
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