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