OpenMW
apps/openmw/mwrender/characterpreview.hpp
Go to the documentation of this file.
00001 #ifndef MWRENDER_CHARACTERPREVIEW_H
00002 #define MWRENDER_CHARACTERPREVIEW_H
00003 
00004 #include <OgreRenderTarget.h>
00005 #include <OgreMaterialManager.h>
00006 
00007 #include <components/esm/loadnpc.hpp>
00008 
00009 #include "externalrendering.hpp"
00010 
00011 #include "../mwworld/ptr.hpp"
00012 
00013 namespace OEngine
00014 {
00015 namespace Render
00016 {
00017 class SelectionBuffer;
00018 }
00019 }
00020 
00021 namespace MWRender
00022 {
00023 
00024     class NpcAnimation;
00025 
00026     class CharacterPreview
00027     {
00028     public:
00029         CharacterPreview(MWWorld::Ptr character, int sizeX, int sizeY, const std::string& name,
00030                          Ogre::Vector3 position, Ogre::Vector3 lookAt);
00031         virtual ~CharacterPreview();
00032 
00033         virtual void setup ();
00034         virtual void onSetup();
00035 
00036         virtual void rebuild();
00037 
00038     protected:
00039         virtual bool renderHeadOnly() { return false; }
00040 
00041         Ogre::TexturePtr mTexture;
00042         Ogre::RenderTarget* mRenderTarget;
00043         Ogre::Viewport* mViewport;
00044 
00045         Ogre::Camera* mCamera;
00046 
00047         Ogre::SceneManager* mSceneMgr;
00048         Ogre::SceneNode* mNode;
00049 
00050         Ogre::Vector3 mPosition;
00051         Ogre::Vector3 mLookAt;
00052 
00053         MWWorld::Ptr mCharacter;
00054 
00055         MWRender::NpcAnimation* mAnimation;
00056         std::string mCurrentAnimGroup;
00057 
00058         std::string mName;
00059 
00060         int mSizeX;
00061         int mSizeY;
00062     };
00063 
00064     class InventoryPreview : public CharacterPreview
00065     {
00066     public:
00067 
00068         InventoryPreview(MWWorld::Ptr character);
00069         virtual ~InventoryPreview();
00070         virtual void onSetup();
00071 
00072         void update(int sizeX, int sizeY);
00073 
00074         int getSlotSelected(int posX, int posY);
00075 
00076     private:
00077 
00078         OEngine::Render::SelectionBuffer* mSelectionBuffer;
00079     };
00080 
00081     class RaceSelectionPreview : public CharacterPreview
00082     {
00083         ESM::NPC                        mBase;
00084         MWWorld::LiveCellRef<ESM::NPC>  mRef;
00085 
00086     protected:
00087 
00088         virtual bool renderHeadOnly() { return true; }
00089 
00090         void updateCamera();
00091 
00092     public:
00093         RaceSelectionPreview();
00094 
00095         virtual void onSetup();
00096         void render();
00097 
00098         void update(float angle);
00099 
00100         const ESM::NPC &getPrototype() const {
00101             return mBase;
00102         }
00103 
00104         void setPrototype(const ESM::NPC &proto);
00105     };
00106 
00107 }
00108 
00109 #endif