diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 4eb7aac701..2bb2c0717b 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -16,7 +16,7 @@ source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender renderingmanager debugging sky player animation npcanimation creatureanimation actors objects renderinginterface localmap occlusionquery terrain terrainmaterial water shadows - compositors characterpreview + compositors characterpreview externalrendering ) add_openmw_dir (mwinput diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index 0865f6383d..a83d6906f4 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -35,6 +35,11 @@ namespace ESMS struct ESMStore; } +namespace MWRender +{ + class ExternalRendering; +} + namespace MWWorld { class CellStore; @@ -271,10 +276,8 @@ namespace MWBase virtual void togglePlayerLooking(bool enable) = 0; virtual void renderPlayer() = 0; - - virtual void updateCharacterPreview(int sizeX, int sizeY) = 0; - virtual void updateRaceSelectionPreview(float angle) = 0; - virtual MWWorld::Ptr getCharacterPreviewItemSelected(int posX, int posY) = 0; + + virtual void setupExternalRendering (MWRender::ExternalRendering& rendering) = 0; }; } diff --git a/apps/openmw/mwgui/inventorywindow.cpp b/apps/openmw/mwgui/inventorywindow.cpp index 66a8efe5d3..a8c0e2ac9d 100644 --- a/apps/openmw/mwgui/inventorywindow.cpp +++ b/apps/openmw/mwgui/inventorywindow.cpp @@ -46,6 +46,7 @@ namespace MWGui , mTrading(false) , mLastXSize(0) , mLastYSize(0) + , mPreview(MWBase::Environment::get().getWorld ()->getPlayer ().getPlayer ()) { static_cast(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &InventoryWindow::onWindowResize); @@ -79,6 +80,8 @@ namespace MWGui setCoord(0, 342, 498, 258); + MWBase::Environment::get().getWorld ()->setupExternalRendering (mPreview); + MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); openContainer(player); } @@ -189,11 +192,11 @@ namespace MWGui MyGUI::IntPoint relPos = mousePos - mAvatar->getAbsolutePosition (); int realX = int(float(relPos.left) / float(mAvatar->getSize().width) * 512.f ); int realY = int(float(relPos.top) / float(mAvatar->getSize().height) * 1024.f ); - MWWorld::Ptr itemSelected = MWBase::Environment::get().getWorld ()->getCharacterPreviewItemSelected (realX, realY); + + MWWorld::Ptr itemSelected = getAvatarSelectedItem (realX, realY); if (itemSelected.isEmpty ()) return; - for (unsigned int i=0; i < mContainerWidget->getChildCount (); ++i) { MyGUI::Widget* w = mContainerWidget->getChildAt (i); @@ -207,6 +210,21 @@ namespace MWGui } } + MWWorld::Ptr InventoryWindow::getAvatarSelectedItem(int x, int y) + { + int slot = mPreview.getSlotSelected (x, y); + + if (slot == -1) + return MWWorld::Ptr(); + + MWWorld::Ptr player = mPtr; + MWWorld::InventoryStore& invStore = MWWorld::Class::get(player).getInventoryStore(player); + if (invStore.getSlot(slot) != invStore.end()) + return *invStore.getSlot (slot); + else + return MWWorld::Ptr(); + } + std::vector InventoryWindow::getEquippedItems() { MWWorld::InventoryStore& invStore = MWWorld::Class::get(mPtr).getInventoryStore(mPtr); @@ -293,7 +311,7 @@ namespace MWGui MyGUI::IntSize size = mAvatar->getSize(); - MWBase::Environment::get().getWorld()->updateCharacterPreview (size.width, size.height); + mPreview.update (size.width, size.height); mAvatarImage->setSize(MyGUI::IntSize(std::max(mAvatar->getSize().width, 512), std::max(mAvatar->getSize().height, 1024))); mAvatarImage->setImageTexture("CharacterPreview"); } diff --git a/apps/openmw/mwgui/inventorywindow.hpp b/apps/openmw/mwgui/inventorywindow.hpp index f174315972..84b576a58c 100644 --- a/apps/openmw/mwgui/inventorywindow.hpp +++ b/apps/openmw/mwgui/inventorywindow.hpp @@ -1,6 +1,8 @@ #ifndef MGUI_Inventory_H #define MGUI_Inventory_H +#include "../mwrender/characterpreview.hpp" + #include "container.hpp" #include "window_pinnable_base.hpp" @@ -24,6 +26,8 @@ namespace MWGui MyGUI::IntCoord getAvatarScreenCoord(); + MWWorld::Ptr getAvatarSelectedItem(int x, int y); + protected: MyGUI::Widget* mAvatar; MyGUI::ImageBox* mAvatarImage; @@ -43,6 +47,7 @@ namespace MWGui int mLastXSize; int mLastYSize; + MWRender::InventoryPreview mPreview; bool mTrading; diff --git a/apps/openmw/mwgui/race.cpp b/apps/openmw/mwgui/race.cpp index e1dc4af1a3..3fe70d959b 100644 --- a/apps/openmw/mwgui/race.cpp +++ b/apps/openmw/mwgui/race.cpp @@ -33,7 +33,8 @@ RaceDialog::RaceDialog(MWBase::WindowManager& parWindowManager) setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance")); getWidget(mPreviewImage, "PreviewImage"); - MWBase::Environment::get().getWorld ()->updateRaceSelectionPreview (0); + MWBase::Environment::get().getWorld ()->setupExternalRendering (mPreview); + mPreview.update (0); mPreviewImage->setImageTexture ("CharacterHeadPreview"); @@ -153,7 +154,7 @@ void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position) { float angle = (float(_position) / 49.f - 0.5) * 3.14 * 2; float diff = angle - mCurrentAngle; - MWBase::Environment::get().getWorld ()->updateRaceSelectionPreview (diff); + mPreview.update (diff); mCurrentAngle += diff; } diff --git a/apps/openmw/mwgui/race.hpp b/apps/openmw/mwgui/race.hpp index c1517eb76e..0505e58e13 100644 --- a/apps/openmw/mwgui/race.hpp +++ b/apps/openmw/mwgui/race.hpp @@ -1,11 +1,15 @@ #ifndef MWGUI_RACE_H #define MWGUI_RACE_H + +#include + #include +#include "../mwrender/characterpreview.hpp" + #include "window_base.hpp" -#include namespace MWGui { @@ -89,6 +93,8 @@ namespace MWGui std::string mCurrentRaceId; float mCurrentAngle; + + MWRender::RaceSelectionPreview mPreview; }; } #endif diff --git a/apps/openmw/mwgui/tooltips.cpp b/apps/openmw/mwgui/tooltips.cpp index 039df2269e..8186279d18 100644 --- a/apps/openmw/mwgui/tooltips.cpp +++ b/apps/openmw/mwgui/tooltips.cpp @@ -174,7 +174,7 @@ void ToolTips::onFrame(float frameDuration) MyGUI::IntPoint relMousePos = MyGUI::InputManager::getInstance ().getMousePosition () - MyGUI::IntPoint(avatarPos.left, avatarPos.top); int realX = int(float(relMousePos.left) / float(avatarPos.width) * 512.f ); int realY = int(float(relMousePos.top) / float(avatarPos.height) * 1024.f ); - MWWorld::Ptr item = MWBase::Environment::get().getWorld ()->getCharacterPreviewItemSelected (realX, realY); + MWWorld::Ptr item = mWindowManager->getInventoryWindow ()->getAvatarSelectedItem (realX, realY); mFocusObject = item; if (!mFocusObject.isEmpty ()) diff --git a/apps/openmw/mwrender/actors.cpp b/apps/openmw/mwrender/actors.cpp index 15c89d7f5b..41d02332e8 100644 --- a/apps/openmw/mwrender/actors.cpp +++ b/apps/openmw/mwrender/actors.cpp @@ -25,7 +25,7 @@ void Actors::setMwRoot(Ogre::SceneNode* root){ void Actors::insertNPC(const MWWorld::Ptr& ptr, MWWorld::InventoryStore& inv){ insertBegin(ptr, true, true); - NpcAnimation* anim = new MWRender::NpcAnimation(ptr, ptr.getRefData ().getBaseNode (), mRend, inv, RV_Actors); + NpcAnimation* anim = new MWRender::NpcAnimation(ptr, ptr.getRefData ().getBaseNode (), inv, RV_Actors); mAllActors[ptr] = anim; } @@ -70,7 +70,7 @@ void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_){ void Actors::insertCreature (const MWWorld::Ptr& ptr){ insertBegin(ptr, true, true); - CreatureAnimation* anim = new MWRender::CreatureAnimation(ptr, mRend); + CreatureAnimation* anim = new MWRender::CreatureAnimation(ptr); //mAllActors.insert(std::pair(ptr,anim)); delete mAllActors[ptr]; mAllActors[ptr] = anim; diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index 46f3bdc0db..3d7629e5b5 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -11,9 +11,8 @@ namespace MWRender { -Animation::Animation(OEngine::Render::OgreRenderer& _rend) +Animation::Animation() : mInsert(NULL) - , mRend(_rend) , mTime(0.0f) , mSkipFrame(false) { diff --git a/apps/openmw/mwrender/animation.hpp b/apps/openmw/mwrender/animation.hpp index 3611d35c0e..07583db788 100644 --- a/apps/openmw/mwrender/animation.hpp +++ b/apps/openmw/mwrender/animation.hpp @@ -31,7 +31,6 @@ class Animation { protected: Ogre::SceneNode* mInsert; - OEngine::Render::OgreRenderer &mRend; float mTime; GroupTimes mCurGroup; @@ -45,7 +44,7 @@ protected: bool findGroupTimes(const std::string &groupname, GroupTimes *times); public: - Animation(OEngine::Render::OgreRenderer& _rend); + Animation(); virtual ~Animation(); void playGroup(std::string groupname, int mode, int loops); diff --git a/apps/openmw/mwrender/characterpreview.cpp b/apps/openmw/mwrender/characterpreview.cpp index 1be78a0f75..01c5d594a7 100644 --- a/apps/openmw/mwrender/characterpreview.cpp +++ b/apps/openmw/mwrender/characterpreview.cpp @@ -7,32 +7,54 @@ #include +#include "../mwbase/environment.hpp" +#include "../mwbase/world.hpp" +#include "../mwworld/player.hpp" + #include "renderconst.hpp" #include "npcanimation.hpp" namespace MWRender { - CharacterPreview::CharacterPreview(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *node, int sizeX, int sizeY, const std::string& name, + CharacterPreview::CharacterPreview(MWWorld::Ptr character, int sizeX, int sizeY, const std::string& name, Ogre::Vector3 position, Ogre::Vector3 lookAt) - : mSceneMgr(sceneMgr) - , mSizeX(sizeX) + : mSizeX(sizeX) , mSizeY(sizeY) + , mName(name) + , mPosition(position) + , mLookAt(lookAt) + , mCharacter(character) { - mCamera = mSceneMgr->createCamera (name); - mCamera->setAspectRatio (float(sizeX) / float(sizeY)); - mNode = node; + } + + void CharacterPreview::onSetup() + { + + } + + void CharacterPreview::setup (Ogre::SceneManager *sceneManager) + { + mSceneMgr = sceneManager; + mCamera = mSceneMgr->createCamera (mName); + mCamera->setAspectRatio (float(mSizeX) / float(mSizeY)); + + mNode = static_cast(mSceneMgr->getRootSceneNode()->getChild("mwRoot"))->createChildSceneNode (); + + mAnimation = new NpcAnimation(mCharacter, mNode, + MWWorld::Class::get(mCharacter).getInventoryStore (mCharacter), RV_PlayerPreview); + mNode->setVisible (false); - mCamera->setPosition(position); - mCamera->lookAt(lookAt); + mCamera->setPosition(mPosition); + mCamera->lookAt(mLookAt); mCamera->setNearClipDistance (0.01); mCamera->setFarClipDistance (1000); - mTexture = Ogre::TextureManager::getSingleton().createManual(name, - Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, sizeX, sizeY, 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET); + mTexture = Ogre::TextureManager::getSingleton().createManual(mName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, mSizeX, mSizeY, 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET); mRenderTarget = mTexture->getBuffer()->getRenderTarget(); mViewport = mRenderTarget->addViewport(mCamera); @@ -43,16 +65,22 @@ namespace MWRender mViewport->setVisibilityMask (RV_PlayerPreview); mRenderTarget->setActive(true); mRenderTarget->setAutoUpdated (false); + + onSetup (); } + CharacterPreview::~CharacterPreview () + { + Ogre::TextureManager::getSingleton().remove(mName); + } + + // -------------------------------------------------------------------------------------------------- - InventoryPreview::InventoryPreview(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *node) - : CharacterPreview(sceneMgr, node, 512, 1024, "CharacterPreview", Ogre::Vector3(0, 65, -180), Ogre::Vector3(0,65,0)) - , mAnimation(NULL) + InventoryPreview::InventoryPreview(MWWorld::Ptr character) + : CharacterPreview(character, 512, 1024, "CharacterPreview", Ogre::Vector3(0, 65, -180), Ogre::Vector3(0,65,0)) { - mSelectionBuffer = new OEngine::Render::SelectionBuffer(mCamera, 512, 1024, RV_PlayerPreview); } InventoryPreview::~InventoryPreview() @@ -62,8 +90,7 @@ namespace MWRender void InventoryPreview::update(int sizeX, int sizeY) { - if (mAnimation) - mAnimation->forceUpdate (); + mAnimation->forceUpdate (); mViewport->setDimensions (0, 0, std::min(1.f, float(sizeX) / float(512)), std::min(1.f, float(sizeY) / float(1024))); @@ -77,20 +104,21 @@ namespace MWRender mNode->setVisible (false); } - void InventoryPreview::setNpcAnimation (NpcAnimation *anim) - { - mAnimation = anim; - } - int InventoryPreview::getSlotSelected (int posX, int posY) { return mSelectionBuffer->getSelected (posX, posY); } + void InventoryPreview::onSetup () + { + mSelectionBuffer = new OEngine::Render::SelectionBuffer(mCamera, 512, 1024, RV_PlayerPreview); + } + // -------------------------------------------------------------------------------------------------- - RaceSelectionPreview::RaceSelectionPreview(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *node) - : CharacterPreview(sceneMgr, node, 512, 512, "CharacterHeadPreview", Ogre::Vector3(0, 120, -35), Ogre::Vector3(0,125,0)) + RaceSelectionPreview::RaceSelectionPreview() + : CharacterPreview(MWBase::Environment::get().getWorld()->getPlayer().getPlayer(), + 512, 512, "CharacterHeadPreview", Ogre::Vector3(0, 120, -35), Ogre::Vector3(0,125,0)) { } diff --git a/apps/openmw/mwrender/characterpreview.hpp b/apps/openmw/mwrender/characterpreview.hpp index fd406ceb5c..2a6b12b9ec 100644 --- a/apps/openmw/mwrender/characterpreview.hpp +++ b/apps/openmw/mwrender/characterpreview.hpp @@ -5,6 +5,10 @@ #include +#include "externalrendering.hpp" + +#include "../mwworld/ptr.hpp" + namespace OEngine { namespace Render @@ -18,11 +22,16 @@ namespace MWRender class NpcAnimation; - class CharacterPreview + class CharacterPreview : public ExternalRendering { public: - CharacterPreview(Ogre::SceneManager* sceneMgr, Ogre::SceneNode* node, int sizeX, int sizeY, const std::string& name, + CharacterPreview(MWWorld::Ptr character, int sizeX, int sizeY, const std::string& name, Ogre::Vector3 position, Ogre::Vector3 lookAt); + virtual ~CharacterPreview(); + + virtual void setup (Ogre::SceneManager *sceneManager); + virtual void onSetup(); + protected: Ogre::TexturePtr mTexture; @@ -34,6 +43,15 @@ namespace MWRender Ogre::SceneManager* mSceneMgr; Ogre::SceneNode* mNode; + Ogre::Vector3 mPosition; + Ogre::Vector3 mLookAt; + + MWWorld::Ptr mCharacter; + + MWRender::NpcAnimation* mAnimation; + + std::string mName; + int mSizeX; int mSizeY; }; @@ -41,8 +59,10 @@ namespace MWRender class InventoryPreview : public CharacterPreview { public: - InventoryPreview(Ogre::SceneManager* sceneMgr, Ogre::SceneNode* node); + + InventoryPreview(MWWorld::Ptr character); virtual ~InventoryPreview(); + virtual void onSetup(); void update(int sizeX, int sizeY); @@ -51,7 +71,6 @@ namespace MWRender void setNpcAnimation (NpcAnimation* anim); private: - NpcAnimation* mAnimation; OEngine::Render::SelectionBuffer* mSelectionBuffer; }; @@ -59,7 +78,7 @@ namespace MWRender class RaceSelectionPreview : public CharacterPreview { public: - RaceSelectionPreview(Ogre::SceneManager* sceneMgr, Ogre::SceneNode* node); + RaceSelectionPreview(); void update(float angle); }; diff --git a/apps/openmw/mwrender/creatureanimation.cpp b/apps/openmw/mwrender/creatureanimation.cpp index 7fb153bd1e..5e3ec9a77c 100644 --- a/apps/openmw/mwrender/creatureanimation.cpp +++ b/apps/openmw/mwrender/creatureanimation.cpp @@ -16,7 +16,7 @@ CreatureAnimation::~CreatureAnimation() { } -CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend): Animation(_rend) +CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr): Animation() { mInsert = ptr.getRefData().getBaseNode(); MWWorld::LiveCellRef *ref = ptr.get(); diff --git a/apps/openmw/mwrender/creatureanimation.hpp b/apps/openmw/mwrender/creatureanimation.hpp index b3c9d3ddd7..e1a7bbb8f4 100644 --- a/apps/openmw/mwrender/creatureanimation.hpp +++ b/apps/openmw/mwrender/creatureanimation.hpp @@ -8,13 +8,13 @@ namespace MWRender{ -class CreatureAnimation: public Animation{ - + class CreatureAnimation: public Animation + { public: - virtual ~CreatureAnimation(); - CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend); - virtual void runAnimation(float timepassed); + virtual ~CreatureAnimation(); + CreatureAnimation(const MWWorld::Ptr& ptr); + virtual void runAnimation(float timepassed); -}; + }; } #endif diff --git a/apps/openmw/mwrender/externalrendering.hpp b/apps/openmw/mwrender/externalrendering.hpp new file mode 100644 index 0000000000..33c9afd875 --- /dev/null +++ b/apps/openmw/mwrender/externalrendering.hpp @@ -0,0 +1,23 @@ +#ifndef GAME_RENDERING_EXTERNALRENDERING_H +#define GAME_RENDERING_EXTERNALRENDERING_H + +namespace Ogre +{ + class SceneManager; +} + +namespace MWRender +{ + /// \brief Base class for out of world rendering + class ExternalRendering + { + public: + + virtual void setup (Ogre::SceneManager *sceneManager) = 0; + + virtual ~ExternalRendering() {} + }; +} + +#endif + diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index c386193c80..fdf4910f80 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -45,8 +45,8 @@ NpcAnimation::~NpcAnimation() } -NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv, int visibilityFlags) - : Animation(_rend), mStateID(-1), mInv(_inv), timeToChange(0), mVisibilityFlags(visibilityFlags), +NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, MWWorld::InventoryStore& _inv, int visibilityFlags) + : Animation(), mStateID(-1), mInv(_inv), timeToChange(0), mVisibilityFlags(visibilityFlags), robe(mInv.end()), helmet(mInv.end()), shirt(mInv.end()), cuirass(mInv.end()), greaves(mInv.end()), leftpauldron(mInv.end()), rightpauldron(mInv.end()), diff --git a/apps/openmw/mwrender/npcanimation.hpp b/apps/openmw/mwrender/npcanimation.hpp index 699c6648dc..21edb3be4f 100644 --- a/apps/openmw/mwrender/npcanimation.hpp +++ b/apps/openmw/mwrender/npcanimation.hpp @@ -68,7 +68,7 @@ private: int mVisibilityFlags; public: - NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, OEngine::Render::OgreRenderer& _rend, + NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, MWWorld::InventoryStore& _inv, int visibilityFlags); virtual ~NpcAnimation(); NifOgre::EntityList insertBoundedPart(const std::string &mesh, int group, const std::string &bonename); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4b77da5e1f..fea08f1083 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -34,7 +34,7 @@ #include "water.hpp" #include "compositors.hpp" #include "npcanimation.hpp" -#include "characterpreview.hpp" +#include "externalrendering.hpp" using namespace MWRender; using namespace Ogre; @@ -138,7 +138,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const // Morrowind uses, and it automagically makes everything work as it // should. SceneNode *rt = mRendering.getScene()->getRootSceneNode(); - mMwRoot = rt->createChildSceneNode(); + mMwRoot = rt->createChildSceneNode("mwRoot"); mMwRoot->pitch(Degree(-90)); mObjects.setMwRoot(mMwRoot); @@ -176,8 +176,6 @@ RenderingManager::~RenderingManager () delete mOcclusionQuery; delete mCompositors; delete mWater; - delete mInventoryPreview; - delete mRaceSelectionPreview; delete mPreviewAnimation; } @@ -863,19 +861,9 @@ void RenderingManager::renderPlayer(const MWWorld::Ptr &ptr) MWRender::NpcAnimation *anim = new MWRender::NpcAnimation( ptr, ptr.getRefData ().getBaseNode (), - mRendering, MWWorld::Class::get(ptr).getInventoryStore(ptr), RV_Actors ); mPlayer->setAnimation(anim); - - MWWorld::InventoryStore& invStore = MWWorld::Class::get(ptr).getInventoryStore (ptr); - - Ogre::SceneNode* previewNode = mMwRoot->createChildSceneNode (); - mPreviewAnimation = new NpcAnimation(ptr, previewNode, mRendering, invStore, RV_PlayerPreview); - - mInventoryPreview = new InventoryPreview(mRendering.getScene (), previewNode); - mInventoryPreview->setNpcAnimation (mPreviewAnimation); - mRaceSelectionPreview = new RaceSelectionPreview(mRendering.getScene (), previewNode); } void RenderingManager::getPlayerData(Ogre::Vector3 &eyepos, float &pitch, float &yaw) @@ -895,19 +883,9 @@ bool RenderingManager::isPositionExplored (float nX, float nY, int x, int y, boo return mLocalMap->isPositionExplored(nX, nY, x, y, interior); } -void RenderingManager::updateCharacterPreview (int sizeX, int sizeY) +void RenderingManager::setupExternalRendering (MWRender::ExternalRendering& rendering) { - mInventoryPreview->update(sizeX, sizeY); -} - -void RenderingManager::updateRaceSelectionPreview (float angle) -{ - mRaceSelectionPreview->update(angle); -} - -int RenderingManager::getCharacterPreviewSlotSelected(int posX, int posY) -{ - return mInventoryPreview->getSlotSelected(posX, posY); + rendering.setup (mRendering.getScene()); } } // namespace diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 42fcb1502b..b7944c9b92 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -43,8 +43,7 @@ namespace MWRender class LocalMap; class Water; class Compositors; - class InventoryPreview; - class RaceSelectionPreview; + class ExternalRendering; class RenderingManager: private RenderingInterface, public Ogre::WindowEventListener { @@ -187,15 +186,13 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList static bool waterShaderSupported(); - virtual void getInteriorMapPosition (Ogre::Vector2 position, float& nX, float& nY, int &x, int& y); + void getInteriorMapPosition (Ogre::Vector2 position, float& nX, float& nY, int &x, int& y); ///< see MWRender::LocalMap::getInteriorMapPosition - virtual bool isPositionExplored (float nX, float nY, int x, int y, bool interior); + bool isPositionExplored (float nX, float nY, int x, int y, bool interior); ///< see MWRender::LocalMap::isPositionExplored - void updateCharacterPreview(int sizeX, int sizeY); - void updateRaceSelectionPreview(float angle); - int getCharacterPreviewSlotSelected(int posX, int posY); + void setupExternalRendering (MWRender::ExternalRendering& rendering); protected: virtual void windowResized(Ogre::RenderWindow* rw); @@ -219,9 +216,6 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList TerrainManager* mTerrainManager; - InventoryPreview* mInventoryPreview; - RaceSelectionPreview* mRaceSelectionPreview; - MWRender::Water *mWater; OEngine::Render::OgreRenderer &mRendering; diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index a38cdd5ff2..6c92678365 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1223,28 +1223,8 @@ namespace MWWorld mRendering->renderPlayer(mPlayer->getPlayer()); } - void World::updateCharacterPreview (int sizeX, int sizeY) + void World::setupExternalRendering (MWRender::ExternalRendering& rendering) { - mRendering->updateCharacterPreview(sizeX, sizeY); - } - - void World::updateRaceSelectionPreview (float angle) - { - mRendering->updateRaceSelectionPreview(angle); - } - - MWWorld::Ptr World::getCharacterPreviewItemSelected(int posX, int posY) - { - int slot = mRendering->getCharacterPreviewSlotSelected(posX, posY); - - if (slot == -1) - return MWWorld::Ptr(); - - MWWorld::Ptr player = getPlayer().getPlayer (); - MWWorld::InventoryStore& invStore = MWWorld::Class::get(player).getInventoryStore(player); - if (invStore.getSlot(slot) != invStore.end()) - return *invStore.getSlot (slot); - else - return MWWorld::Ptr(); + mRendering->setupExternalRendering (rendering); } } diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index cd7286861e..96e6ae3f81 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -307,10 +307,8 @@ namespace MWWorld } virtual void renderPlayer(); - - virtual void updateCharacterPreview(int sizeX, int sizeY); - virtual void updateRaceSelectionPreview(float angle); - virtual MWWorld::Ptr getCharacterPreviewItemSelected(int posX, int posY); + + virtual void setupExternalRendering (MWRender::ExternalRendering& rendering); }; } diff --git a/libs/openengine/ogre/renderer.cpp b/libs/openengine/ogre/renderer.cpp index 2764410ad6..831b049302 100644 --- a/libs/openengine/ogre/renderer.cpp +++ b/libs/openengine/ogre/renderer.cpp @@ -78,7 +78,7 @@ void OgreRenderer::start() #endif } -bool OgreRenderer::loadPlugins() const +bool OgreRenderer::loadPlugins() { #ifdef ENABLE_PLUGIN_GL mGLPlugin = new Ogre::GLPlugin(); diff --git a/libs/openengine/ogre/renderer.hpp b/libs/openengine/ogre/renderer.hpp index 9b7003368e..00e094b4dc 100644 --- a/libs/openengine/ogre/renderer.hpp +++ b/libs/openengine/ogre/renderer.hpp @@ -151,7 +151,7 @@ namespace OEngine /// Start the main rendering loop void start(); - bool loadPlugins() const; + bool loadPlugins() ; void update(float dt);