1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-01 09:45:33 +00:00

Removal of MWScene; Object listing fixed

This commit is contained in:
Jason Hooks 2011-10-24 13:42:36 -04:00
parent 30ba9b74da
commit 6efc61b9df
13 changed files with 100 additions and 195 deletions

View file

@ -68,6 +68,7 @@ void OMW::Engine::executeLocalScripts()
void OMW::Engine::updateFocusReport (float duration) void OMW::Engine::updateFocusReport (float duration)
{ {
if ((mFocusTDiff += duration)>0.25) if ((mFocusTDiff += duration)>0.25)
{ {
mFocusTDiff = 0; mFocusTDiff = 0;
@ -80,8 +81,12 @@ void OMW::Engine::updateFocusReport (float duration)
{ {
MWWorld::Ptr ptr = mEnvironment.mWorld->getPtrViaHandle (handle); MWWorld::Ptr ptr = mEnvironment.mWorld->getPtrViaHandle (handle);
if (!ptr.isEmpty()) if (!ptr.isEmpty()){
name = MWWorld::Class::get (ptr).getName (ptr); name = MWWorld::Class::get (ptr).getName (ptr);
if (!name.empty())
std::cout << "Object: " << name << std::endl;
}
} }
if (name!=mFocusName) if (name!=mFocusName)
@ -284,6 +289,8 @@ void OMW::Engine::setReportFocus (bool report)
void OMW::Engine::go() void OMW::Engine::go()
{ {
mFocusTDiff = 0;
mReportFocus = true;
assert (!mEnvironment.mWorld); assert (!mEnvironment.mWorld);
assert (!mCellName.empty()); assert (!mCellName.empty());
assert (!mMaster.empty()); assert (!mMaster.empty());

View file

@ -1,4 +1,5 @@
#include "exterior.hpp" #include "exterior.hpp"
#include "renderingmanager.hpp"
#include <OgreEntity.h> #include <OgreEntity.h>
#include <OgreLight.h> #include <OgreLight.h>
@ -34,11 +35,11 @@ bool ExteriorCellRender::lightOutQuadInLin = false;
int ExteriorCellRender::uniqueID = 0; int ExteriorCellRender::uniqueID = 0;
ExteriorCellRender::ExteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment, ExteriorCellRender::ExteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment,
MWScene &_scene, MWWorld::PhysicsSystem *physics) RenderingManager &_rendering, MWWorld::PhysicsSystem *physics)
: mCell(_cell), mEnvironment (environment), mScene(_scene), mPhysics(physics), mBase(NULL), mInsert(NULL), mAmbientMode (0) : mCell(_cell), mEnvironment (environment), mRendering(_rendering), mPhysics(physics), mBase(NULL), mInsert(NULL), mAmbientMode (0)
{ {
uniqueID = uniqueID +1; uniqueID = uniqueID +1;
sg = mScene.getMgr()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); sg = mRendering.getMgr()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID));
} }
@ -126,7 +127,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
mNpcPart = parent->createChildSceneNode(sceneNodeName); mNpcPart = parent->createChildSceneNode(sceneNodeName);
MeshPtr good2 = NifOgre::NIFLoader::load(mesh); MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
MovableObject *ent = mScene.getMgr()->createEntity(mesh); MovableObject *ent = mRendering.getMgr()->createEntity(mesh);
if(translateFirst){ if(translateFirst){
@ -214,7 +215,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh)
assert (mInsert); assert (mInsert);
NifOgre::NIFLoader::load(mesh); NifOgre::NIFLoader::load(mesh);
Entity *ent = mScene.getMgr()->createEntity(mesh); Entity *ent = mRendering.getMgr()->createEntity(mesh);
if(!isStatic) if(!isStatic)
{ {
@ -224,7 +225,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh)
{ {
sg->addEntity(ent,mInsert->_getDerivedPosition(),mInsert->_getDerivedOrientation(),mInsert->_getDerivedScale()); sg->addEntity(ent,mInsert->_getDerivedPosition(),mInsert->_getDerivedOrientation(),mInsert->_getDerivedScale());
sg->setRegionDimensions(Ogre::Vector3(100000,10000,100000)); sg->setRegionDimensions(Ogre::Vector3(100000,10000,100000));
mScene.getMgr()->destroyEntity(ent); mRendering.getMgr()->destroyEntity(ent);
} }
if (mInsertMesh.empty()) if (mInsertMesh.empty())
mInsertMesh = mesh; mInsertMesh = mesh;
@ -249,7 +250,7 @@ void ExteriorCellRender::insertLight(float r, float g, float b, float radius)
{ {
assert (mInsert); assert (mInsert);
Ogre::Light *light = mScene.getMgr()->createLight(); Ogre::Light *light = mRendering.getMgr()->createLight();
light->setDiffuseColour (r, g, b); light->setDiffuseColour (r, g, b);
float cval=0.0f, lval=0.0f, qval=0.0f; float cval=0.0f, lval=0.0f, qval=0.0f;
@ -305,7 +306,7 @@ void ExteriorCellRender::configureAmbient()
// Create a "sun" that shines light downwards. It doesn't look // Create a "sun" that shines light downwards. It doesn't look
// completely right, but leave it for now. // completely right, but leave it for now.
Ogre::Light *light = mScene.getMgr()->createLight(); Ogre::Light *light = mRendering.getMgr()->createLight();
Ogre::ColourValue colour; Ogre::ColourValue colour;
colour.setAsABGR (mCell.cell->ambi.sunlight); colour.setAsABGR (mCell.cell->ambi.sunlight);
light->setDiffuseColour (colour); light->setDiffuseColour (colour);
@ -322,9 +323,9 @@ void ExteriorCellRender::configureFog()
float high = 4500 + 9000 * (1-mCell.cell->ambi.fogDensity); float high = 4500 + 9000 * (1-mCell.cell->ambi.fogDensity);
float low = 200; float low = 200;
mScene.getMgr()->setFog (FOG_LINEAR, color, 0, low, high); mRendering.getMgr()->setFog (FOG_LINEAR, color, 0, low, high);
mScene.getCamera()->setFarClipDistance (high + 10); mRendering.getCamera()->setFarClipDistance (high + 10);
mScene.getViewport()->setBackgroundColour (color); mRendering.getViewport()->setBackgroundColour (color);
} }
void ExteriorCellRender::setAmbientMode() void ExteriorCellRender::setAmbientMode()
@ -333,17 +334,17 @@ void ExteriorCellRender::setAmbientMode()
{ {
case 0: case 0:
mScene.getMgr()->setAmbientLight(mAmbientColor); mRendering.getMgr()->setAmbientLight(mAmbientColor);
break; break;
case 1: case 1:
mScene.getMgr()->setAmbientLight(0.7f*mAmbientColor + 0.3f*ColourValue(1,1,1)); mRendering.getMgr()->setAmbientLight(0.7f*mAmbientColor + 0.3f*ColourValue(1,1,1));
break; break;
case 2: case 2:
mScene.getMgr()->setAmbientLight(ColourValue(1,1,1)); mRendering.getMgr()->setAmbientLight(ColourValue(1,1,1));
break; break;
} }
} }
@ -351,7 +352,7 @@ void ExteriorCellRender::setAmbientMode()
void ExteriorCellRender::show() void ExteriorCellRender::show()
{ {
// FIXME: this one may be the bug // FIXME: this one may be the bug
mBase = mScene.getRoot()->createChildSceneNode(); mBase = mRendering.getRoot()->createChildSceneNode();
configureAmbient(); configureAmbient();
configureFog(); configureFog();
@ -400,14 +401,14 @@ void ExteriorCellRender::destroy()
{ {
destroyAllAttachedMovableObjects(mBase); destroyAllAttachedMovableObjects(mBase);
mBase->removeAndDestroyAllChildren(); mBase->removeAndDestroyAllChildren();
mScene.getMgr()->destroySceneNode(mBase); mRendering.getMgr()->destroySceneNode(mBase);
} }
mBase = 0; mBase = 0;
if (sg) if (sg)
{ {
mScene.getMgr()->destroyStaticGeometry (sg); mRendering.getMgr()->destroyStaticGeometry (sg);
sg = 0; sg = 0;
} }
} }
@ -434,21 +435,21 @@ void ExteriorCellRender::toggleLight()
void ExteriorCellRender::enable (const std::string& handle) void ExteriorCellRender::enable (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
mScene.getMgr()->getSceneNode (handle)->setVisible (true); mRendering.getMgr()->getSceneNode (handle)->setVisible (true);
} }
void ExteriorCellRender::disable (const std::string& handle) void ExteriorCellRender::disable (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
mScene.getMgr()->getSceneNode (handle)->setVisible (false); mRendering.getMgr()->getSceneNode (handle)->setVisible (false);
} }
void ExteriorCellRender::deleteObject (const std::string& handle) void ExteriorCellRender::deleteObject (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
{ {
Ogre::SceneNode *node = mScene.getMgr()->getSceneNode (handle); Ogre::SceneNode *node = mRendering.getMgr()->getSceneNode (handle);
node->removeAndDestroyAllChildren(); node->removeAndDestroyAllChildren();
mScene.getMgr()->destroySceneNode (node); mRendering.getMgr()->destroySceneNode (node);
} }
} }

View file

@ -21,7 +21,7 @@ namespace MWWorld
namespace MWRender namespace MWRender
{ {
class MWScene; class RenderingManager;
/** /**
This class is responsible for inserting meshes and other This class is responsible for inserting meshes and other
@ -49,7 +49,7 @@ namespace MWRender
ESMS::CellStore<MWWorld::RefData> &mCell; ESMS::CellStore<MWWorld::RefData> &mCell;
MWWorld::Environment &mEnvironment; MWWorld::Environment &mEnvironment;
MWScene &mScene; RenderingManager &mRendering;
MWWorld::PhysicsSystem *mPhysics; MWWorld::PhysicsSystem *mPhysics;
/// The scene node that contains all objects belonging to this /// The scene node that contains all objects belonging to this
@ -103,7 +103,7 @@ namespace MWRender
public: public:
ExteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment, ExteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment,
MWScene &_scene, MWWorld::PhysicsSystem *physics); RenderingManager &_rendering, MWWorld::PhysicsSystem *physics);
virtual ~ExteriorCellRender() { destroy(); } virtual ~ExteriorCellRender() { destroy(); }

View file

@ -1,4 +1,5 @@
#include "interior.hpp" #include "interior.hpp"
#include "renderingmanager.hpp"
#include <OgreEntity.h> #include <OgreEntity.h>
#include <OgreLight.h> #include <OgreLight.h>
@ -108,7 +109,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
MeshPtr good2 = NifOgre::NIFLoader::load(mesh); MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
MovableObject *ent = scene.getMgr()->createEntity(mesh); MovableObject *ent = mRendering.getMgr()->createEntity(mesh);
//ent->extr //ent->extr
// MovableObject *ent2 = scene.getMgr()->createEntity(bounds // MovableObject *ent2 = scene.getMgr()->createEntity(bounds
@ -185,7 +186,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh)
assert (insert); assert (insert);
NifOgre::NIFLoader::load(mesh); NifOgre::NIFLoader::load(mesh);
MovableObject *ent = scene.getMgr()->createEntity(mesh); MovableObject *ent = mRendering.getMgr()->createEntity(mesh);
insert->attachObject(ent); insert->attachObject(ent);
if (mInsertMesh.empty()) if (mInsertMesh.empty())
@ -211,7 +212,7 @@ void InteriorCellRender::insertLight(float r, float g, float b, float radius)
{ {
assert (insert); assert (insert);
Ogre::Light *light = scene.getMgr()->createLight(); Ogre::Light *light = mRendering.getMgr()->createLight();
light->setDiffuseColour (r, g, b); light->setDiffuseColour (r, g, b);
float cval=0.0f, lval=0.0f, qval=0.0f; float cval=0.0f, lval=0.0f, qval=0.0f;
@ -267,7 +268,7 @@ void InteriorCellRender::configureAmbient()
// Create a "sun" that shines light downwards. It doesn't look // Create a "sun" that shines light downwards. It doesn't look
// completely right, but leave it for now. // completely right, but leave it for now.
Ogre::Light *light = scene.getMgr()->createLight(); Ogre::Light *light = mRendering.getMgr()->createLight();
Ogre::ColourValue colour; Ogre::ColourValue colour;
colour.setAsABGR (cell.cell->ambi.sunlight); colour.setAsABGR (cell.cell->ambi.sunlight);
light->setDiffuseColour (colour); light->setDiffuseColour (colour);
@ -284,9 +285,9 @@ void InteriorCellRender::configureFog()
float high = 4500 + 9000 * (1-cell.cell->ambi.fogDensity); float high = 4500 + 9000 * (1-cell.cell->ambi.fogDensity);
float low = 200; float low = 200;
scene.getMgr()->setFog (FOG_LINEAR, color, 0, low, high); mRendering.getMgr()->setFog (FOG_LINEAR, color, 0, low, high);
scene.getCamera()->setFarClipDistance (high + 10); mRendering.getCamera()->setFarClipDistance (high + 10);
scene.getViewport()->setBackgroundColour (color); mRendering.getViewport()->setBackgroundColour (color);
} }
void InteriorCellRender::setAmbientMode() void InteriorCellRender::setAmbientMode()
@ -295,24 +296,24 @@ void InteriorCellRender::setAmbientMode()
{ {
case 0: case 0:
scene.getMgr()->setAmbientLight(ambientColor); mRendering.getMgr()->setAmbientLight(ambientColor);
break; break;
case 1: case 1:
scene.getMgr()->setAmbientLight(0.7f*ambientColor + 0.3f*ColourValue(1,1,1)); mRendering.getMgr()->setAmbientLight(0.7f*ambientColor + 0.3f*ColourValue(1,1,1));
break; break;
case 2: case 2:
scene.getMgr()->setAmbientLight(ColourValue(1,1,1)); mRendering.getMgr()->setAmbientLight(ColourValue(1,1,1));
break; break;
} }
} }
void InteriorCellRender::show() void InteriorCellRender::show()
{ {
base = scene.getRoot()->createChildSceneNode(); base = mRendering.getRoot()->createChildSceneNode();
configureAmbient(); configureAmbient();
configureFog(); configureFog();
@ -331,7 +332,7 @@ void InteriorCellRender::destroy()
if(base) if(base)
{ {
base->removeAndDestroyAllChildren(); base->removeAndDestroyAllChildren();
scene.getMgr()->destroySceneNode(base); mRendering.getMgr()->destroySceneNode(base);
} }
base = NULL; base = NULL;
@ -359,22 +360,22 @@ void InteriorCellRender::toggleLight()
void InteriorCellRender::enable (const std::string& handle) void InteriorCellRender::enable (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
scene.getMgr()->getSceneNode (handle)->setVisible (true); mRendering.getMgr()->getSceneNode (handle)->setVisible (true);
} }
void InteriorCellRender::disable (const std::string& handle) void InteriorCellRender::disable (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
scene.getMgr()->getSceneNode (handle)->setVisible (false); mRendering.getMgr()->getSceneNode (handle)->setVisible (false);
} }
void InteriorCellRender::deleteObject (const std::string& handle) void InteriorCellRender::deleteObject (const std::string& handle)
{ {
if (!handle.empty()) if (!handle.empty())
{ {
Ogre::SceneNode *node = scene.getMgr()->getSceneNode (handle); Ogre::SceneNode *node = mRendering.getMgr()->getSceneNode (handle);
node->removeAndDestroyAllChildren(); node->removeAndDestroyAllChildren();
scene.getMgr()->destroySceneNode (node); mRendering.getMgr()->destroySceneNode (node);
} }
} }

View file

@ -20,7 +20,7 @@ namespace MWWorld
namespace MWRender namespace MWRender
{ {
class MWScene; class RenderingManager;
/** /**
This class is responsible for inserting meshes and other This class is responsible for inserting meshes and other
@ -48,7 +48,7 @@ namespace MWRender
ESMS::CellStore<MWWorld::RefData> &cell; ESMS::CellStore<MWWorld::RefData> &cell;
MWWorld::Environment &mEnvironment; MWWorld::Environment &mEnvironment;
MWScene &scene; MWRender::RenderingManager &mRendering;
MWWorld::PhysicsSystem *mPhysics; MWWorld::PhysicsSystem *mPhysics;
/// The scene node that contains all objects belonging to this /// The scene node that contains all objects belonging to this
@ -95,8 +95,8 @@ namespace MWRender
public: public:
InteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment, InteriorCellRender(ESMS::CellStore<MWWorld::RefData> &_cell, MWWorld::Environment& environment,
MWScene &_scene, MWWorld::PhysicsSystem *physics) RenderingManager &_rendering, MWWorld::PhysicsSystem *physics)
: cell(_cell), mEnvironment (environment), scene(_scene), base(NULL), insert(NULL), ambientMode (0) : cell(_cell), mEnvironment (environment), mRendering(_rendering), base(NULL), insert(NULL), ambientMode (0)
{ {
mPhysics = physics; mPhysics = physics;
} }

View file

@ -22,6 +22,7 @@ Debugging::Debugging(OEngine::Physic::PhysicEngine* engine){
eng = engine; eng = engine;
} }
bool Debugging::toggleRenderMode (int mode){ bool Debugging::toggleRenderMode (int mode){
switch (mode) switch (mode)
{ {
@ -35,73 +36,3 @@ bool Debugging::toggleRenderMode (int mode){
return false; return false;
} }
MWScene::MWScene(OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng)
: rend(_rend)
{
eng = physEng;
rend.createScene("PlayerCam", 55, 5);
// Set default mipmap level (NB some APIs ignore this)
TextureManager::getSingleton().setDefaultNumMipmaps(5);
// Load resources
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
// Turn the entire scene (represented by the 'root' node) -90
// degrees around the x axis. This makes Z go upwards, and Y go into
// the screen (when x is to the right.) This is the orientation that
// Morrowind uses, and it automagically makes everything work as it
// should.
SceneNode *rt = rend.getScene()->getRootSceneNode();
mwRoot = rt->createChildSceneNode();
mwRoot->pitch(Degree(-90));
//used to obtain ingame information of ogre objects (which are faced or selected)
mRaySceneQuery = rend.getScene()->createRayQuery(Ray());
Ogre::SceneNode *playerNode = mwRoot->createChildSceneNode ("player");
playerNode->pitch(Degree(90));
Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode();
Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode();
cameraPitchNode->attachObject(getCamera());
mPlayer = new MWRender::Player (getCamera(), playerNode->getName());
}
MWScene::~MWScene()
{
delete mPlayer;
}
std::pair<std::string, float> MWScene::getFacedHandle (MWWorld::World& world)
{
std::string handle = "";
//get a ray pointing to the center of the viewport
Ray centerRay = getCamera()->getCameraToViewportRay(
getViewport()->getWidth()/2,
getViewport()->getHeight()/2);
//let's avoid the capsule shape of the player.
centerRay.setOrigin(centerRay.getOrigin() + 20*centerRay.getDirection());
btVector3 from(centerRay.getOrigin().x,-centerRay.getOrigin().z,centerRay.getOrigin().y);
btVector3 to(centerRay.getPoint(500).x,-centerRay.getPoint(500).z,centerRay.getPoint(500).y);
return eng->rayTest(from,to);
}
bool MWScene::toggleRenderMode (int mode)
{
switch (mode)
{
case MWWorld::World::Render_CollisionDebug:
// TODO use a proper function instead of accessing the member variable
// directly.
eng->setDebugRenderingMode (!eng->isDebugCreated);
return eng->isDebugCreated;
}
return false;
}

View file

@ -37,47 +37,7 @@ namespace MWRender
bool toggleRenderMode (int mode); bool toggleRenderMode (int mode);
}; };
/// \brief 3D-scene (rendering and physics)
class MWScene
{
OEngine::Render::OgreRenderer &rend;
/// Root node for all objects added to the scene. This is rotated so
/// that the OGRE coordinate system matches that used internally in
/// Morrowind.
Ogre::SceneNode *mwRoot;
Ogre::RaySceneQuery *mRaySceneQuery;
OEngine::Physic::PhysicEngine* eng;
MWRender::Player *mPlayer;
public:
MWScene (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng);
~MWScene();
Ogre::Camera *getCamera() { return rend.getCamera(); }
Ogre::SceneNode *getRoot() { return mwRoot; }
Ogre::SceneManager *getMgr() { return rend.getScene(); }
Ogre::Viewport *getViewport() { return rend.getViewport(); }
Ogre::RaySceneQuery *getRaySceneQuery() { return mRaySceneQuery; }
MWRender::Player *getPlayer() { return mPlayer; }
/// Gets the handle of the object the player is looking at
/// pair<name, distance>
/// name is empty and distance = -1 if there is no object which
/// can be faced
std::pair<std::string, float> getFacedHandle (MWWorld::World& world);
/// Toggle render mode
/// \todo Using an int instead of a enum here to avoid cyclic includes. Will be fixed
/// when the mw*-refactoring is done.
/// \return Resulting mode
bool toggleRenderMode (int mode);
};
} }
#endif #endif

View file

@ -22,13 +22,14 @@ namespace MWRender {
RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem2::path& resDir) :rend(_rend) RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir) :rend(_rend)
{ {
camera = rend.getCamera();
mSkyManager = MWRender::SkyManager::create(rend.getWindow(), camera, resDir);
//std::cout << "ONE";
rend.createScene("PlayerCam", 55, 5); rend.createScene("PlayerCam", 55, 5);
mSkyManager = MWRender::SkyManager::create(rend.getWindow(), getCamera(), resDir);
// Set default mipmap level (NB some APIs ignore this) // Set default mipmap level (NB some APIs ignore this)
TextureManager::getSingleton().setDefaultNumMipmaps(5); TextureManager::getSingleton().setDefaultNumMipmaps(5);
@ -41,7 +42,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const
// the screen (when x is to the right.) This is the orientation that // the screen (when x is to the right.) This is the orientation that
// Morrowind uses, and it automagically makes everything work as it // Morrowind uses, and it automagically makes everything work as it
// should. // should.
//std::cout << "TWO";
SceneNode *rt = rend.getScene()->getRootSceneNode(); SceneNode *rt = rend.getScene()->getRootSceneNode();
mwRoot = rt->createChildSceneNode(); mwRoot = rt->createChildSceneNode();
mwRoot->pitch(Degree(-90)); mwRoot->pitch(Degree(-90));
@ -53,16 +54,17 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const
playerNode->pitch(Degree(90)); playerNode->pitch(Degree(90));
Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode();
Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode();
cameraPitchNode->attachObject(camera); cameraPitchNode->attachObject(getCamera());
std::cout <<"TWOF\n";
mPlayer = new MWRender::Player (camera, playerNode->getName());
mPlayer = new MWRender::Player (getCamera(), playerNode->getName());
//std::cout << "Three";
} }
RenderingManager::~RenderingManager () RenderingManager::~RenderingManager ()
{ {
delete mPlayer;
delete mSkyManager; delete mSkyManager;
} }

View file

@ -52,7 +52,7 @@ class RenderingManager {
MWRender::Player *mPlayer; MWRender::Player *mPlayer;
public: public:
RenderingManager(OEngine::Render::OgreRenderer& _rend, const boost::filesystem2::path& resDir); RenderingManager(OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir);
~RenderingManager(); ~RenderingManager();
void removeCell (MWWorld::Ptr::CellStore *store); // TODO do we want this? void removeCell (MWWorld::Ptr::CellStore *store); // TODO do we want this?
@ -77,7 +77,11 @@ class RenderingManager {
int skyGetMasserPhase() const; int skyGetMasserPhase() const;
int skyGetSecundaPhase() const; int skyGetSecundaPhase() const;
void skySetMoonColour (bool red); void skySetMoonColour (bool red);
Ogre::SceneManager *getMgr() { return rend.getScene(); }
Ogre::Camera *getCamera() { return rend.getCamera(); }
Ogre::Viewport *getViewport() { return rend.getViewport(); }
Ogre::SceneNode *getRoot() { return mwRoot; }
MWRender::Player *getPlayer() { return mPlayer; }
private: private:
SkyManager* mSkyManager; SkyManager* mSkyManager;

View file

@ -137,7 +137,7 @@ namespace MWWorld
{ {
Ptr::CellStore *cell = mWorld->getExterior(x, y); Ptr::CellStore *cell = mWorld->getExterior(x, y);
loadCell (cell, new MWRender::ExteriorCellRender (*cell, mEnvironment, mScene, mPhysics)); loadCell (cell, new MWRender::ExteriorCellRender (*cell, mEnvironment, mRendering, mPhysics));
} }
} }
@ -168,8 +168,8 @@ namespace MWWorld
mCellChanged = true; mCellChanged = true;
} }
Scene::Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics) Scene::Scene (Environment& environment, World *world, MWRender::RenderingManager& rm, PhysicsSystem *physics)
: mScene (scene), mCurrentCell (0), : mRendering(rm), mCurrentCell (0),
mCellChanged (false), mEnvironment (environment), mWorld(world), mPhysics(physics) mCellChanged (false), mEnvironment (environment), mWorld(world), mPhysics(physics)
{ {
} }
@ -205,7 +205,7 @@ namespace MWWorld
std::cout << "cellName:" << cellName << std::endl; std::cout << "cellName:" << cellName << std::endl;
Ptr::CellStore *cell = mWorld->getInterior(cellName); Ptr::CellStore *cell = mWorld->getInterior(cellName);
loadCell (cell, new MWRender::InteriorCellRender (*cell, mEnvironment, mScene, mPhysics)); loadCell (cell, new MWRender::InteriorCellRender (*cell, mEnvironment, mRendering, mPhysics));
// adjust player // adjust player
mCurrentCell = cell; mCurrentCell = cell;

View file

@ -14,7 +14,7 @@
#include "refdata.hpp" #include "refdata.hpp"
#include "ptr.hpp" #include "ptr.hpp"
#include "globals.hpp" #include "globals.hpp"
#include "../mwrender/renderingmanager.hpp"
#include <openengine/bullet/physic.hpp> #include <openengine/bullet/physic.hpp>
namespace Ogre namespace Ogre
@ -57,7 +57,7 @@ namespace MWWorld
private: private:
MWRender::MWScene& mScene; MWRender::RenderingManager mRendering;
Ptr::CellStore *mCurrentCell; // the cell, the player is in Ptr::CellStore *mCurrentCell; // the cell, the player is in
CellRenderCollection mActiveCells; CellRenderCollection mActiveCells;
bool mCellChanged; bool mCellChanged;
@ -69,7 +69,7 @@ namespace MWWorld
bool adjustPlayerPos = true); bool adjustPlayerPos = true);
public: public:
Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics); Scene (Environment& environment, World *world, MWRender::RenderingManager& rm, PhysicsSystem *physics);
~Scene(); ~Scene();

View file

@ -176,8 +176,8 @@ namespace MWWorld
const Files::Collections& fileCollections, const Files::Collections& fileCollections,
const std::string& master, const boost::filesystem::path& resDir, const std::string& master, const boost::filesystem::path& resDir,
bool newGame, Environment& environment, const std::string& encoding) bool newGame, Environment& environment, const std::string& encoding)
: mScene (renderer,physEng), mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), : mRendering (renderer,resDir), mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0),
mSky (false), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this) mSky (false), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this), mDebugging(physEng)
{ {
mPhysEngine = physEng; mPhysEngine = physEng;
@ -192,7 +192,7 @@ namespace MWWorld
mEsm.open (masterPath.string()); mEsm.open (masterPath.string());
mStore.load (mEsm); mStore.load (mEsm);
mPlayer = new MWWorld::Player (mScene.getPlayer(), mStore.npcs.find ("player"), *this); mPlayer = new MWWorld::Player (mRendering.getPlayer(), mStore.npcs.find ("player"), *this);
mPhysics->addActor (mPlayer->getPlayer().getRefData().getHandle(), "", Ogre::Vector3 (0, 0, 0)); mPhysics->addActor (mPlayer->getPlayer().getRefData().getHandle(), "", Ogre::Vector3 (0, 0, 0));
// global variables // global variables
@ -206,9 +206,8 @@ namespace MWWorld
mPhysEngine = physEng; mPhysEngine = physEng;
mWorldScene = new Scene(environment, this, mScene, mPhysics); mWorldScene = new Scene(environment, this, mRendering, mPhysics);
mRenderingManager = new MWRender::RenderingManager(renderer,
resDir);
} }
World::~World() World::~World()
@ -397,7 +396,7 @@ namespace MWWorld
mGlobalVariables->setFloat ("gamehour", hour); mGlobalVariables->setFloat ("gamehour", hour);
mRenderingManager->skySetHour (hour); mRendering.skySetHour (hour);
if (days>0) if (days>0)
setDay (days + mGlobalVariables->getInt ("day")); setDay (days + mGlobalVariables->getInt ("day"));
@ -432,7 +431,7 @@ namespace MWWorld
mGlobalVariables->setInt ("day", day); mGlobalVariables->setInt ("day", day);
mGlobalVariables->setInt ("month", month); mGlobalVariables->setInt ("month", month);
mRenderingManager->skySetDate (day, month); mRendering.skySetDate (day, month);
} }
void World::setMonth (int month) void World::setMonth (int month)
@ -453,7 +452,7 @@ namespace MWWorld
if (years>0) if (years>0)
mGlobalVariables->setInt ("year", years+mGlobalVariables->getInt ("year")); mGlobalVariables->setInt ("year", years+mGlobalVariables->getInt ("year"));
mRenderingManager->skySetDate (mGlobalVariables->getInt ("day"), month); mRendering.skySetDate (mGlobalVariables->getInt ("day"), month);
} }
bool World::toggleSky() bool World::toggleSky()
@ -461,34 +460,34 @@ namespace MWWorld
if (mSky) if (mSky)
{ {
mSky = false; mSky = false;
mRenderingManager->skyDisable(); mRendering.skyDisable();
return false; return false;
} }
else else
{ {
mSky = true; mSky = true;
// TODO check for extorior or interior with sky. // TODO check for extorior or interior with sky.
mRenderingManager->skySetHour (mGlobalVariables->getFloat ("gamehour")); mRendering.skySetHour (mGlobalVariables->getFloat ("gamehour"));
mRenderingManager->skySetDate (mGlobalVariables->getInt ("day"), mRendering.skySetDate (mGlobalVariables->getInt ("day"),
mGlobalVariables->getInt ("month")); mGlobalVariables->getInt ("month"));
mRenderingManager->skyEnable(); mRendering.skyEnable();
return true; return true;
} }
} }
int World::getMasserPhase() const int World::getMasserPhase() const
{ {
return mRenderingManager->skyGetMasserPhase(); return mRendering.skyGetMasserPhase();
} }
int World::getSecundaPhase() const int World::getSecundaPhase() const
{ {
return mRenderingManager->skyGetSecundaPhase(); return mRendering.skyGetSecundaPhase();
} }
void World::setMoonColour (bool red) void World::setMoonColour (bool red)
{ {
mRenderingManager->skySetMoonColour (red); mRendering.skySetMoonColour (red);
} }
float World::getTimeScaleFactor() const float World::getTimeScaleFactor() const
@ -513,7 +512,7 @@ namespace MWWorld
std::string World::getFacedHandle() std::string World::getFacedHandle()
{ {
std::pair<std::string, float> result = mScene.getFacedHandle (*this); std::pair<std::string, float> result = mPhysics->getFacedHandle (*this);
if (result.first.empty() || if (result.first.empty() ||
result.second>getStore().gameSettings.find ("iMaxActivateDist")->i) result.second>getStore().gameSettings.find ("iMaxActivateDist")->i)
@ -577,7 +576,7 @@ namespace MWWorld
// \todo cell change for non-player ref // \todo cell change for non-player ref
// \todo this should go into the new scene class and eventually into the objects/actors classes. // \todo this should go into the new scene class and eventually into the objects/actors classes.
mScene.getMgr()->getSceneNode (ptr.getRefData().getHandle())-> mRendering.getMgr()->getSceneNode (ptr.getRefData().getHandle())->
setPosition (Ogre::Vector3 (x, y, z)); setPosition (Ogre::Vector3 (x, y, z));
} }
@ -652,7 +651,7 @@ namespace MWWorld
bool World::toggleRenderMode (RenderMode mode) bool World::toggleRenderMode (RenderMode mode)
{ {
return mScene.toggleRenderMode (mode); return mDebugging.toggleRenderMode (mode);
} }
std::pair<std::string, const ESM::Potion *> World::createRecord (const ESM::Potion& record) std::pair<std::string, const ESM::Potion *> World::createRecord (const ESM::Potion& record)

View file

@ -65,7 +65,8 @@ namespace MWWorld
private: private:
MWRender::MWScene mScene; MWRender::RenderingManager mRendering;
MWRender::Debugging mDebugging;
MWWorld::Scene *mWorldScene; MWWorld::Scene *mWorldScene;
MWWorld::Player *mPlayer; MWWorld::Player *mPlayer;
ESM::ESMReader mEsm; ESM::ESMReader mEsm;
@ -75,7 +76,6 @@ namespace MWWorld
MWWorld::PhysicsSystem *mPhysics; MWWorld::PhysicsSystem *mPhysics;
bool mSky; bool mSky;
Environment& mEnvironment; Environment& mEnvironment;
MWRender::RenderingManager *mRenderingManager;
int mNextDynamicRecord; int mNextDynamicRecord;
Cells mCells; Cells mCells;