OpenMW
apps/openmw/mwrender/objects.hpp
Go to the documentation of this file.
00001 #ifndef _GAME_RENDER_OBJECTS_H
00002 #define _GAME_RENDER_OBJECTS_H
00003 
00004 #include <OgreColourValue.h>
00005 #include <OgreAxisAlignedBox.h>
00006 
00007 #include <openengine/ogre/renderer.hpp>
00008 
00009 namespace MWWorld
00010 {
00011     class Ptr;
00012     class CellStore;
00013 }
00014 
00015 namespace MWRender{
00016 
00017 class ObjectAnimation;
00018 
00019 class Objects{
00020     typedef std::map<MWWorld::Ptr,ObjectAnimation*> PtrAnimationMap;
00021 
00022     OEngine::Render::OgreRenderer &mRenderer;
00023 
00024     std::map<MWWorld::CellStore*,Ogre::SceneNode*> mCellSceneNodes;
00025     std::map<MWWorld::CellStore*,Ogre::StaticGeometry*> mStaticGeometry;
00026     std::map<MWWorld::CellStore*,Ogre::StaticGeometry*> mStaticGeometrySmall;
00027     std::map<MWWorld::CellStore*,Ogre::AxisAlignedBox> mBounds;
00028     PtrAnimationMap mObjects;
00029 
00030     Ogre::SceneNode* mRootNode;
00031 
00032     static int uniqueID;
00033 
00034     void insertBegin(const MWWorld::Ptr& ptr);
00035 
00036 
00037 
00038 public:
00039     Objects(OEngine::Render::OgreRenderer &renderer)
00040         : mRenderer(renderer)
00041         , mRootNode(NULL)
00042     {}
00043     ~Objects(){}
00044     void insertModel(const MWWorld::Ptr& ptr, const std::string &model);
00045 
00046     ObjectAnimation* getAnimation(const MWWorld::Ptr &ptr);
00047 
00048     void enableLights();
00049     void disableLights();
00050 
00051     void update (float dt, Ogre::Camera* camera);
00053 
00054     Ogre::AxisAlignedBox getDimensions(MWWorld::CellStore*);
00056 
00057     bool deleteObject (const MWWorld::Ptr& ptr);
00059 
00060     void removeCell(MWWorld::CellStore* store);
00061     void buildStaticGeometry(MWWorld::CellStore &cell);
00062     void setRootNode(Ogre::SceneNode* root);
00063 
00064     void rebuildStaticGeometry();
00065 
00067     void updateObjectCell(const MWWorld::Ptr &old, const MWWorld::Ptr &cur);
00068 };
00069 }
00070 #endif