formatting, added Water::setHeight

This commit is contained in:
scrawl 2012-03-29 15:49:24 +02:00
parent 39b3afb98f
commit f497813043
6 changed files with 91 additions and 84 deletions

View file

@ -171,6 +171,12 @@ void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){
} }
void RenderingManager::setWaterHeight(const float height)
{
if (mWater)
mWater->setHeight(height);
}
void RenderingManager::skyEnable () void RenderingManager::skyEnable ()
{ {
if(mSkyManager) if(mSkyManager)

View file

@ -92,6 +92,7 @@ class RenderingManager: private RenderingInterface {
void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale);
void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation);
void checkUnderwater(); void checkUnderwater();
void setWaterHeight(const float height);
/// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell).
void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store);
@ -141,17 +142,13 @@ class RenderingManager: private RenderingInterface {
SkyManager* mSkyManager; SkyManager* mSkyManager;
Ogre::Camera* camera;
MWRender::Water *mWater; MWRender::Water *mWater;
OEngine::Render::OgreRenderer &mRendering; OEngine::Render::OgreRenderer &mRendering;
MWRender::Objects mObjects; MWRender::Objects mObjects;
MWRender::Actors mActors; MWRender::Actors mActors;
// 0 normal, 1 more bright, 2 max // 0 normal, 1 more bright, 2 max
int mAmbientMode; int mAmbientMode;

View file

@ -1,17 +1,18 @@
#include "water.hpp" #include "water.hpp"
namespace MWRender { namespace MWRender
Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { {
try { Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager())
{
try
{
Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1);
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false);
} catch(...) { } catch(...) {}
}
mTop = cell->water; mTop = cell->water;
mIsUnderwater = false; mIsUnderwater = false;
//mCamera->addListener(this);
mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0);
@ -22,71 +23,66 @@ namespace MWRender {
mWater->setMaterialName("Examples/Water0"); mWater->setMaterialName("Examples/Water0");
mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode();
mWaterNode->setPosition(0, mTop, 0); mWaterNode->setPosition(0, mTop, 0);
if(!(cell->data.flags & cell->Interior)) if(!(cell->data.flags & cell->Interior))
{ {
mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY));
} }
mWaterNode->attachObject(mWater); mWaterNode->attachObject(mWater);
} }
Water::~Water() { Water::~Water()
{
Ogre::MeshManager::getSingleton().remove("water"); Ogre::MeshManager::getSingleton().remove("water");
mWaterNode->detachObject(mWater); mWaterNode->detachObject(mWater);
mSceneManager->destroyEntity(mWater); mSceneManager->destroyEntity(mWater);
mSceneManager->destroySceneNode(mWaterNode); mSceneManager->destroySceneNode(mWaterNode);
Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport);
} }
void Water::changeCell(const ESM::Cell* cell){ void Water::changeCell(const ESM::Cell* cell)
{
mTop = cell->water; mTop = cell->water;
if(!(cell->data.flags & cell->Interior)) if(!(cell->data.flags & cell->Interior))
mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY));
else else
mWaterNode->setPosition(0, mTop, 0); setHeight(mTop);
}
void Water::setHeight(const float height)
{
mTop = height;
mWaterNode->setPosition(0, height, 0);
} }
void Water::checkUnderwater(float y)
void Water::checkUnderwater(float y) { {
if (mIsUnderwater && y > mTop)
if (mIsUnderwater && y > mTop) { {
try { try {
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false);
} catch(...) { } catch(...) {}
}
mIsUnderwater = false; mIsUnderwater = false;
} }
if (!mIsUnderwater && y < mTop) { if (!mIsUnderwater && y < mTop)
{
try { try {
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true);
} catch(...) { } catch(...) {}
}
mIsUnderwater = true; mIsUnderwater = true;
} }
} }
Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY)
{
Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2));
Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2));
return out;
} }
} }

View file

@ -35,7 +35,7 @@ namespace MWRender {
void checkUnderwater(float y); void checkUnderwater(float y);
void changeCell(const ESM::Cell* cell); void changeCell(const ESM::Cell* cell);
void setHeight(const float height);
}; };
} }

View file

@ -755,4 +755,10 @@ namespace MWWorld
{ {
return mRendering->getFader(); return mRendering->getFader();
} }
void World::setWaterHeight(const float height)
{
mRendering->setWaterHeight(height);
}
} }

View file

@ -113,6 +113,8 @@ namespace MWWorld
Ptr::CellStore *getInterior (const std::string& name); Ptr::CellStore *getInterior (const std::string& name);
void setWaterHeight(const float height);
void adjustSky(); void adjustSky();
MWWorld::Player& getPlayer(); MWWorld::Player& getPlayer();