mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-05 16:45:34 +00:00
Merge branch 'externalrendering' of https://github.com/zinnschlag/openmw into characterpreview
Conflicts: apps/openmw/CMakeLists.txt apps/openmw/mwbase/world.hpp apps/openmw/mwrender/renderingmanager.cpp apps/openmw/mwrender/renderingmanager.hpp apps/openmw/mwworld/worldimp.cpp apps/openmw/mwworld/worldimp.hpp
This commit is contained in:
commit
2793096b50
23 changed files with 171 additions and 120 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ namespace MWGui
|
|||
, mTrading(false)
|
||||
, mLastXSize(0)
|
||||
, mLastYSize(0)
|
||||
, mPreview(MWBase::Environment::get().getWorld ()->getPlayer ().getPlayer ())
|
||||
{
|
||||
static_cast<MyGUI::Window*>(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<MWWorld::Ptr> 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");
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#ifndef MWGUI_RACE_H
|
||||
#define MWGUI_RACE_H
|
||||
|
||||
|
||||
#include <boost/array.hpp>
|
||||
|
||||
#include <components/esm_store/store.hpp>
|
||||
|
||||
#include "../mwrender/characterpreview.hpp"
|
||||
|
||||
#include "window_base.hpp"
|
||||
|
||||
#include <boost/array.hpp>
|
||||
|
||||
namespace MWGui
|
||||
{
|
||||
|
@ -89,6 +93,8 @@ namespace MWGui
|
|||
std::string mCurrentRaceId;
|
||||
|
||||
float mCurrentAngle;
|
||||
|
||||
MWRender::RaceSelectionPreview mPreview;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -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 ())
|
||||
|
|
|
@ -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<MWWorld::Ptr, Animation*>(ptr,anim));
|
||||
delete mAllActors[ptr];
|
||||
mAllActors[ptr] = anim;
|
||||
|
|
|
@ -11,9 +11,8 @@
|
|||
namespace MWRender
|
||||
{
|
||||
|
||||
Animation::Animation(OEngine::Render::OgreRenderer& _rend)
|
||||
Animation::Animation()
|
||||
: mInsert(NULL)
|
||||
, mRend(_rend)
|
||||
, mTime(0.0f)
|
||||
, mSkipFrame(false)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -7,32 +7,54 @@
|
|||
#include <libs/openengine/ogre/selectionbuffer.hpp>
|
||||
|
||||
|
||||
#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<Ogre::SceneNode*>(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))
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
#include <OgreMaterialManager.h>
|
||||
|
||||
|
||||
#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);
|
||||
};
|
||||
|
|
|
@ -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<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
||||
|
|
|
@ -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
|
||||
|
|
23
apps/openmw/mwrender/externalrendering.hpp
Normal file
23
apps/openmw/mwrender/externalrendering.hpp
Normal file
|
@ -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
|
||||
|
|
@ -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()),
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ void OgreRenderer::start()
|
|||
#endif
|
||||
}
|
||||
|
||||
bool OgreRenderer::loadPlugins() const
|
||||
bool OgreRenderer::loadPlugins()
|
||||
{
|
||||
#ifdef ENABLE_PLUGIN_GL
|
||||
mGLPlugin = new Ogre::GLPlugin();
|
||||
|
|
|
@ -151,7 +151,7 @@ namespace OEngine
|
|||
/// Start the main rendering loop
|
||||
void start();
|
||||
|
||||
bool loadPlugins() const;
|
||||
bool loadPlugins() ;
|
||||
|
||||
void update(float dt);
|
||||
|
||||
|
|
Loading…
Reference in a new issue