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