diff --git a/CMakeLists.txt b/CMakeLists.txt index def78e09b..8368a3990 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,9 @@ endif() add_subdirectory (extern) add_subdirectory (components) + # This is currently only for the MSVC libmpv, might be a better place to put library or to link/find it +link_directories(${CMAKE_CURRENT_BINARY_DIR}/components) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_subdirectory(apps/freeablo) diff --git a/apps/freeablo/CMakeLists.txt b/apps/freeablo/CMakeLists.txt index 21f9d0af5..636930dfd 100644 --- a/apps/freeablo/CMakeLists.txt +++ b/apps/freeablo/CMakeLists.txt @@ -133,7 +133,7 @@ add_library(freeablo_lib # split into a library so I can link to it from tests fasavegame/gameloader.cpp ) -target_link_libraries(freeablo_lib PUBLIC NuklearMisc Render Audio Serial Input Random enet::enet) +target_link_libraries(freeablo_lib PUBLIC NuklearMisc Render Audio Video Serial Input Random enet::enet) target_include_directories(freeablo_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(freeablo main.cpp) diff --git a/apps/freeablo/engine/enginemain.cpp b/apps/freeablo/engine/enginemain.cpp index 2fadcea82..19096a483 100644 --- a/apps/freeablo/engine/enginemain.cpp +++ b/apps/freeablo/engine/enginemain.cpp @@ -64,6 +64,15 @@ namespace Engine mainThread.join(); } + void EngineMain::playVideo(const std::string& path) + { + Engine::ThreadManager::get()->playVideo(std::string(path)); + while (!Engine::ThreadManager::get()->waitForVideoComplete(100)) + { + mInputManager->update(false); + } + } + void EngineMain::runGameLoop(const bpo::variables_map& variables, const std::string& pathEXE) { FARender::Renderer& renderer = *FARender::Renderer::get(); @@ -81,6 +90,10 @@ namespace Engine return; } + // Play the intro cinematics. + playVideo("gendata/logo.smk"); + playVideo("gendata/diablo1.smk"); + FAWorld::ItemFactory itemFactory(*mExe, Random::DummyRng::instance); mPlayerFactory = boost::make_unique(*mExe, itemFactory); renderer.loadFonts(*mExe); @@ -243,6 +256,14 @@ namespace Engine void EngineMain::notify(KeyboardInputAction action) { + // Only handle the esc key when playing video. + if (Engine::ThreadManager::get()->videoInProgress()) + { + if (action == KeyboardInputAction::pause) + Engine::ThreadManager::get()->stopVideo(); + return; + } + if (mGuiManager->isPauseBlocked()) return; diff --git a/apps/freeablo/engine/enginemain.h b/apps/freeablo/engine/enginemain.h index ff0d4cc65..2b4a9366f 100644 --- a/apps/freeablo/engine/enginemain.h +++ b/apps/freeablo/engine/enginemain.h @@ -48,6 +48,7 @@ namespace Engine private: void runGameLoop(const boost::program_options::variables_map& variables, const std::string& pathEXE); + void playVideo(const std::string& path); private: static EngineMain* singletonInstance; diff --git a/apps/freeablo/engine/threadmanager.cpp b/apps/freeablo/engine/threadmanager.cpp index 4280ac887..9286f3d99 100644 --- a/apps/freeablo/engine/threadmanager.cpp +++ b/apps/freeablo/engine/threadmanager.cpp @@ -4,6 +4,7 @@ #include #include +#include