From ca97d1b2789bbeccc8001314345ca1ef485da750 Mon Sep 17 00:00:00 2001 From: Mathieu Schroeter Date: Sat, 26 Aug 2017 22:40:59 +0200 Subject: [PATCH] Add a --play-record arg for playing a specific demo file --- src/blupi.cxx | 20 ++++++++++++++------ src/blupi.h | 2 ++ src/event.cxx | 19 ++++++++++++++----- src/event.h | 2 +- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/blupi.cxx b/src/blupi.cxx index 62173f5..f94cdca 100644 --- a/src/blupi.cxx +++ b/src/blupi.cxx @@ -58,12 +58,13 @@ CMovie * g_pMovie = nullptr; // movie principal CDecor * g_pDecor = nullptr; std::thread * g_updateThread = nullptr; -bool g_bFullScreen = false; // false si mode de test -Sint32 g_speedRate = 1; -Sint32 g_timerInterval = 50; // inverval = 50ms -int g_rendererType = 0; -bool g_enableRecorder = false; -bool g_restoreBugs = false; // restore original < v1.9 bugs +bool g_bFullScreen = false; // false si mode de test +Sint32 g_speedRate = 1; +Sint32 g_timerInterval = 50; // inverval = 50ms +int g_rendererType = 0; +bool g_enableRecorder = false; +std::string g_playRecord; +bool g_restoreBugs = false; // restore original < v1.9 bugs enum Settings { SETTING_FULLSCREEN = 1 << 0, @@ -527,6 +528,10 @@ parseArgs (int argc, char * argv[], bool & exit) {"-c", "--enable-recorder"}, "enable the recorder feature (F3/F4)", 0}, + {"playrecord", + {"-p", "--play-record"}, + "play a record generated by F3 (--enable-recorder)", + 1}, {"restorebugs", {"-b", "--restore-bugs"}, "restore funny original bugs of older versions < v1.9", @@ -590,6 +595,9 @@ parseArgs (int argc, char * argv[], bool & exit) if (args["enablerecorder"]) g_enableRecorder = true; + if (args["playrecord"]) + g_playRecord = args["playrecord"].as (); + if (args["restorebugs"]) g_restoreBugs = true; diff --git a/src/blupi.h b/src/blupi.h index dfd933c..3801da8 100644 --- a/src/blupi.h +++ b/src/blupi.h @@ -22,6 +22,7 @@ #include #include +#include #include "config.h" @@ -30,6 +31,7 @@ extern SDL_Renderer * g_renderer; extern bool g_bFullScreen; extern bool g_restoreBugs; extern bool g_enableRecorder; +extern std::string g_playRecord; struct Point { Sint32 x; diff --git a/src/event.cxx b/src/event.cxx index 1426a36..33bfc12 100644 --- a/src/event.cxx +++ b/src/event.cxx @@ -4612,7 +4612,7 @@ CEvent::DemoRecStop () // Lit le fichier sur disque. bool -CEvent::DemoPlayStart () +CEvent::DemoPlayStart (const std::string * demoFile) { std::string filename; FILE * file = nullptr; @@ -4620,8 +4620,11 @@ CEvent::DemoPlayStart () Sint32 world, time, total; size_t nb; - filename = string_format (GetBaseDir () + "data/demo%.3d.blp", m_demoNumber); - file = fopen (filename.c_str (), "rb"); + filename = + demoFile + ? *demoFile + : string_format (GetBaseDir () + "data/demo%.3d.blp", m_demoNumber); + file = fopen (filename.c_str (), "rb"); if (file == nullptr) { DemoPlayStop (); @@ -4819,7 +4822,13 @@ CEvent::DemoStep () if (m_phase == EV_PHASE_INIT) { - if (m_demoTime > DEF_TIME_DEMO) // ~30 secondes écoulées ? + if (!g_playRecord.empty ()) + { + m_demoNumber = -1; + DemoPlayStart (&g_playRecord); + g_playRecord = ""; + } + else if (m_demoTime > DEF_TIME_DEMO) // ~30 secondes écoulées ? { m_demoNumber = 0; DemoPlayStart (); // démarre une démo automatique @@ -4885,7 +4894,7 @@ CEvent::DemoStep () TreatEventBase (event); - if (m_demoIndex >= m_demoEnd) + if (m_demoIndex >= m_demoEnd && m_demoNumber >= 0) { m_demoNumber++; // démo suivante if (!DemoPlayStart ()) // démarre la démo suivante diff --git a/src/event.h b/src/event.h index 4f31ae9..67469cb 100644 --- a/src/event.h +++ b/src/event.h @@ -175,7 +175,7 @@ protected: void DemoRecStart (); void DemoRecStop (); - bool DemoPlayStart (); + bool DemoPlayStart (const std::string * demoFile = nullptr); void DemoPlayStop (); static void WinToSDLEvent (Uint32 msg, WPARAM wParam, LPARAM lParam, SDL_Event & event);