formatting, added Water::setHeight

actorid
scrawl 13 years ago
parent 39b3afb98f
commit f497813043

@ -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)

@ -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;

@ -1,92 +1,88 @@
#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())
Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); {
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); try
} catch(...) { {
} Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1);
mTop = cell->water; Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false);
} catch(...) {}
mIsUnderwater = false; mTop = cell->water;
//mCamera->addListener(this);
mIsUnderwater = false;
mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0);
mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0);
Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z);
Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z);
mWater = mSceneManager->createEntity("water");
mWater = mSceneManager->createEntity("water");
mWater->setMaterialName("Examples/Water0");
mWater->setMaterialName("Examples/Water0");
mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode();
mWaterNode->setPosition(0, mTop, 0);
mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode();
mWaterNode->setPosition(0, mTop, 0);
if(!(cell->data.flags & cell->Interior))
{
mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY));
}
mWaterNode->attachObject(mWater);
}
Water::~Water() {
Ogre::MeshManager::getSingleton().remove("water");
mWaterNode->detachObject(mWater);
mSceneManager->destroyEntity(mWater);
mSceneManager->destroySceneNode(mWaterNode);
Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport);
}
void Water::changeCell(const ESM::Cell* cell){
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 }
mWaterNode->setPosition(0, mTop, 0); mWaterNode->attachObject(mWater);
} }
Water::~Water()
{
Ogre::MeshManager::getSingleton().remove("water");
mWaterNode->detachObject(mWater);
mSceneManager->destroyEntity(mWater);
mSceneManager->destroySceneNode(mWaterNode);
void Water::checkUnderwater(float y) { Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport);
}
if (mIsUnderwater && y > mTop) { void Water::changeCell(const ESM::Cell* cell)
try { {
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); mTop = cell->water;
} catch(...) {
}
mIsUnderwater = false;
}
if (!mIsUnderwater && y < mTop) { if(!(cell->data.flags & cell->Interior))
try { mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY));
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); else
} catch(...) { setHeight(mTop);
} }
mIsUnderwater = true;
void Water::setHeight(const float height)
{
mTop = height;
mWaterNode->setPosition(0, height, 0);
} }
}
void Water::checkUnderwater(float y)
Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ {
Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); if (mIsUnderwater && y > mTop)
{
return out; try {
} Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false);
} catch(...) {}
mIsUnderwater = false;
}
if (!mIsUnderwater && y < mTop)
{
try {
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true);
} catch(...) {}
mIsUnderwater = true;
}
}
Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY)
{
return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2));
}
} }

@ -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);
}; };
} }

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

@ -112,6 +112,8 @@ namespace MWWorld
Ptr::CellStore *getExterior (int x, int y); Ptr::CellStore *getExterior (int x, int y);
Ptr::CellStore *getInterior (const std::string& name); Ptr::CellStore *getInterior (const std::string& name);
void setWaterHeight(const float height);
void adjustSky(); void adjustSky();

Loading…
Cancel
Save