diff --git a/CMakeLists.txt b/CMakeLists.txt index 723d10b347..aa69790284 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,7 @@ source_group(libs\\mangle FILES ${MANGLE_ALL}) set(OENGINE_OGRE ${LIBDIR}/openengine/ogre/renderer.cpp ${LIBDIR}/openengine/ogre/mouselook.cpp + ${LIBDIR}/openengine/ogre/fader.cpp ) set(OENGINE_GUI ${LIBDIR}/openengine/gui/events.cpp diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index c8dca2d3aa..89a3f00fb4 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -162,6 +162,9 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // report focus object (for debugging) if (mReportFocus) updateFocusReport (mEnvironment.mFrameDuration); + + // update ogre renderer + mOgre->update(evt.timeSinceLastFrame); } catch (const std::exception& e) { diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 2b670f3f29..2d31cded9b 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -72,6 +72,11 @@ MWRender::Player& RenderingManager::getPlayer(){ return (*mPlayer); } +OEngine::Render::Fader* RenderingManager::getFader() +{ + return mRendering.getFader(); +} + void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ mObjects.removeCell(store); mActors.removeCell(store); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 084f89cb09..3ba60486b3 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -63,6 +64,8 @@ class RenderingManager: private RenderingInterface { void toggleLight(); bool toggleRenderMode(int mode); + + OEngine::Render::Fader* getFader(); void removeCell (MWWorld::Ptr::CellStore *store); diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index baa13e6851..5bfffd3a26 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -123,6 +123,57 @@ namespace MWScript "Wireframe Rendering -> On" : "Wireframe Rendering -> Off"); } }; + + class OpFadeIn : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeIn(time); + } + }; + + class OpFadeOut : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeOut(time); + } + }; + + class OpFadeTo : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float alpha = runtime[0].mFloat; + runtime.pop(); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeTo(alpha, time); + } + }; const int opcodeXBox = 0x200000c; const int opcodeOnActivate = 0x200000d; @@ -133,6 +184,9 @@ namespace MWScript const int opcodeUnlockExplicit = 0x200008d; const int opcodeToggleCollisionDebug = 0x2000132; const int opcodeToggleWireframe = 0x200013b; + const int opcodeFadeIn = 0x200013c; + const int opcodeFadeOut = 0x200013d; + const int opcodeFadeTo = 0x200013e; void registerExtensions (Compiler::Extensions& extensions) { @@ -147,6 +201,9 @@ namespace MWScript extensions.registerInstruction ("tcg", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("twf", "", opcodeToggleWireframe); extensions.registerInstruction ("togglewireframe", "", opcodeToggleWireframe); + extensions.registerInstruction ("fadein", "f", opcodeFadeIn); + extensions.registerInstruction ("fadeout", "f", opcodeFadeOut); + extensions.registerInstruction ("fadeto", "ff", opcodeFadeTo); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -160,6 +217,9 @@ namespace MWScript interpreter.installSegment5 (opcodeUnlockExplicit, new OpUnlock); interpreter.installSegment5 (opcodeToggleCollisionDebug, new OpToggleCollisionDebug); interpreter.installSegment5 (opcodeToggleWireframe, new OpToggleWireframe); + interpreter.installSegment5 (opcodeFadeIn, new OpFadeIn); + interpreter.installSegment5 (opcodeFadeOut, new OpFadeOut); + interpreter.installSegment5 (opcodeFadeTo, new OpFadeTo); } } } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 17c2279536..a79f8ac222 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -688,4 +688,9 @@ namespace MWWorld { mWorldScene->update (duration); } + + OEngine::Render::Fader* World::getFader() + { + return mRendering->getFader(); + } } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 68c09ce14e..31e0163089 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -20,6 +20,7 @@ #include "localscripts.hpp" #include +#include namespace Ogre { @@ -102,6 +103,8 @@ namespace MWWorld Environment& environment, const std::string& encoding); ~World(); + + OEngine::Render::Fader* getFader(); Ptr::CellStore *getExterior (int x, int y); diff --git a/libs/openengine b/libs/openengine index 6c7e5d00e4..b77f5c06cc 160000 --- a/libs/openengine +++ b/libs/openengine @@ -1 +1 @@ -Subproject commit 6c7e5d00e4f5bf954afe15f10e56f03520abfee4 +Subproject commit b77f5c06cc3fd818a5efbbb42d6c2a079fa91143