diff options
Diffstat (limited to 'engines/titanic/debugger.cpp')
-rw-r--r-- | engines/titanic/debugger.cpp | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/engines/titanic/debugger.cpp b/engines/titanic/debugger.cpp index a9da83f724..5d95ef5186 100644 --- a/engines/titanic/debugger.cpp +++ b/engines/titanic/debugger.cpp @@ -23,7 +23,9 @@ #include "titanic/debugger.h" #include "titanic/titanic.h" #include "titanic/core/tree_item.h" +#include "titanic/game/movie_tester.h" #include "titanic/pet_control/pet_control.h" +#include "titanic/support/movie.h" namespace Titanic { @@ -33,6 +35,7 @@ Debugger::Debugger(TitanicEngine *vm) : GUI::Debugger(), _vm(vm) { registerCmd("room", WRAP_METHOD(Debugger, cmdRoom)); registerCmd("pet", WRAP_METHOD(Debugger, cmdPET)); registerCmd("item", WRAP_METHOD(Debugger, cmdItem)); + registerCmd("movie", WRAP_METHOD(Debugger, cmdMovie)); } int Debugger::strToInt(const char *s) { @@ -109,7 +112,7 @@ void Debugger::listRooms() { CRoomItem *room = gm._gameState._gameLocation.getRoom(); debugPrintf("Current location: %s, %s, %s\n", room->getName().c_str(), node->getName().c_str(), view->getName().c_str()); - + debugPrintf("Available rooms:\n"); for (CTreeItem *treeItem = root; treeItem; treeItem = treeItem->scan(root)) { CRoomItem *roomItem = dynamic_cast<CRoomItem *>(treeItem); @@ -139,7 +142,7 @@ bool Debugger::cmdDump(int argc, const char **argv) { CTreeItem *root = g_vm->_window->_gameManager->_project; if (argc == 2) root = root->findByName(argv[1]); - + if (root == nullptr) { debugPrintf("Could not find item\n"); } else { @@ -204,7 +207,7 @@ bool Debugger::cmdPET(int argc, const char **argv) { return true; } } - + debugPrintf("%s [on | off]\n", argv[0]); return true; } @@ -260,4 +263,35 @@ bool Debugger::cmdItem(int argc, const char **argv) { return true; } +bool Debugger::cmdMovie(int argc, const char **argv) { + if (argc < 2) { + debugPrintf("movie filename.avi [startFrame endFrame]\n"); + return true; + } + + CViewItem *view = g_vm->_window->_gameManager->getView(); + CMovieTester *tester = static_cast<CMovieTester *>( + view->findChildInstanceOf(CMovieTester::_type)); + if (!tester) { + // No movie tester present, so create one + tester = new CMovieTester(); + tester->addUnder(view); + } + + CString filename(argv[1]); + if (!filename.hasSuffix(".avi")) + filename += ".avi"; + tester->loadMovie(filename); + + if (argc == 2) { + tester->playMovie(MOVIE_STOP_PREVIOUS); + } else { + uint startFrame = strToInt(argv[2]); + uint endFrame = strToInt(argv[2]); + tester->playMovie(startFrame, endFrame, MOVIE_STOP_PREVIOUS); + } + + return false; +} + } // End of namespace Titanic |