From 84f45b19720c62d76ab932e18af69d5152ab4599 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Fri, 20 Jan 2012 17:59:56 -0500 Subject: [PATCH] underwater view --- apps/openmw/engine.cpp | 4 +--- apps/openmw/mwrender/renderingmanager.cpp | 4 ++-- apps/openmw/mwrender/renderingmanager.hpp | 2 +- apps/openmw/mwrender/water.cpp | 18 +++++++++--------- apps/openmw/mwrender/water.hpp | 3 ++- apps/openmw/mwworld/world.cpp | 5 +++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 36d801326..4535fd820 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -310,9 +310,7 @@ void OMW::Engine::go() // This has to be added BEFORE MyGUI is initialized, as it needs // to find core.xml here. - std::cout << "Before the water\n"; - - std::cout << "After the water" << mResDir << "\n"; + //addResourcesDirectory(mResDir); addResourcesDirectory(mResDir / "mygui"); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 312b2c410..b5fce4b44 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -230,9 +230,9 @@ void RenderingManager::toggleLight() setAmbientMode(); } -void RenderingManager::checkUnderwater(){ +void RenderingManager::checkUnderwater(float y){ if(mWater){ - mWater->checkUnderwater(); + mWater->checkUnderwater(y); } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index f397d23e6..99926e400 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -71,7 +71,7 @@ class RenderingManager: private RenderingInterface { void moveObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& position); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); - void checkUnderwater(); + void checkUnderwater(float y); /// \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); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 86e9ad885..2ab2fee38 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,7 +1,7 @@ #include "water.hpp" namespace MWRender { - Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { + Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mTop(top) { try { Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); @@ -10,11 +10,13 @@ namespace MWRender { mIsUnderwater = false; mCamera->addListener(this); - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, top); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 1, 1, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, mTop); + + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); + mWater->setMaterialName("Examples/Water0"); @@ -58,24 +60,22 @@ namespace MWRender { } } - void Water::checkUnderwater() { - Ogre::Vector3 pos = mCamera->getPosition(); - if (mIsUnderwater && pos.y > 0) { + void Water::checkUnderwater(float y) { + + if (mIsUnderwater && y > mTop) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) { } - std::cout << "Removing water compositor" << "\n"; mIsUnderwater = false; } - if (!mIsUnderwater && pos.y < 0) { + if (!mIsUnderwater && y < mTop) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); } catch(...) { } mIsUnderwater = true; - std::cout << "Adding water compositor" << "\n"; } } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index b12a03357..73057cc34 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -21,6 +21,7 @@ namespace MWRender { Ogre::Vector3 mOldCameraPos; bool mIsUnderwater; + int mTop; @@ -36,7 +37,7 @@ namespace MWRender { Water (Ogre::Camera *camera, int top); ~Water(); - void checkUnderwater(); + void checkUnderwater(float y); }; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index b32f0203f..d290e093b 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -522,10 +522,11 @@ namespace MWWorld ptr.getRefData().getPosition().pos[0] = x; ptr.getRefData().getPosition().pos[1] = y; ptr.getRefData().getPosition().pos[2] = z; - if (ptr==mPlayer->getPlayer()) { - mRendering.checkUnderwater(); + //std::cout << "Current pos" << ptr.getRefData().getPosition().pos[1]; + + mRendering.checkUnderwater( ptr.getRefData().getPosition().pos[2]); Ptr::CellStore *currentCell = mWorldScene->getCurrentCell(); if (currentCell) {