1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

CVideoHandler: Use EVideoType::INTRO and EVideoType::SPELLBOOK

This commit is contained in:
Alexander Wilms
2024-01-29 15:20:22 +01:00
parent 33e170d562
commit 70ce090bc4
4 changed files with 32 additions and 11 deletions

View File

@@ -430,15 +430,15 @@ void playIntro()
{ {
auto audioData = CCS->videoh->getAudio(VideoPath::builtin("3DOLOGO.SMK")); auto audioData = CCS->videoh->getAudio(VideoPath::builtin("3DOLOGO.SMK"));
int sound = CCS->soundh->playSound(audioData); int sound = CCS->soundh->playSound(audioData);
if(CCS->videoh->openAndPlayVideo(VideoPath::builtin("3DOLOGO.SMK"), 0, 1, true, true, false)) if(CCS->videoh->openAndPlayVideo(VideoPath::builtin("3DOLOGO.SMK"), 0, 1, EVideoType::INTRO))
{ {
audioData = CCS->videoh->getAudio(VideoPath::builtin("NWCLOGO.SMK")); audioData = CCS->videoh->getAudio(VideoPath::builtin("NWCLOGO.SMK"));
sound = CCS->soundh->playSound(audioData); sound = CCS->soundh->playSound(audioData);
if (CCS->videoh->openAndPlayVideo(VideoPath::builtin("NWCLOGO.SMK"), 0, 1, true, true, false)) if (CCS->videoh->openAndPlayVideo(VideoPath::builtin("NWCLOGO.SMK"), 0, 1, EVideoType::INTRO))
{ {
audioData = CCS->videoh->getAudio(VideoPath::builtin("H3INTRO.SMK")); audioData = CCS->videoh->getAudio(VideoPath::builtin("H3INTRO.SMK"));
sound = CCS->soundh->playSound(audioData); sound = CCS->soundh->playSound(audioData);
CCS->videoh->openAndPlayVideo(VideoPath::builtin("H3INTRO.SMK"), 0, 1, true, true, false); CCS->videoh->openAndPlayVideo(VideoPath::builtin("H3INTRO.SMK"), 0, 1, EVideoType::INTRO);
} }
} }
CCS->soundh->stopSound(sound); CCS->soundh->stopSound(sound);

View File

@@ -647,7 +647,7 @@ bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
SDL_Rect rect = CSDL_Ext::toSDL(pos); SDL_Rect rect = CSDL_Ext::toSDL(pos);
if(overlayVideo) if(overlay)
{ {
SDL_RenderFillRect(mainRenderer, &rect); SDL_RenderFillRect(mainRenderer, &rect);
} }
@@ -679,9 +679,24 @@ bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
return true; return true;
} }
bool CVideoPlayer::openAndPlayVideo(const VideoPath & name, int x, int y, bool stopOnKey, bool scale, bool overlay) bool CVideoPlayer::openAndPlayVideo(const VideoPath & name, int x, int y, EVideoType videoType)
{ {
overlayVideo = overlay; bool scale;
bool stopOnKey;
switch(videoType)
{
case EVideoType::INTRO:
stopOnKey = true;
scale = true;
overlay = false;
break;
case EVideoType::SPELLBOOK:
default:
stopOnKey = false;
scale = false;
overlay = true;
}
open(name, false, true, scale); open(name, false, true, scale);
bool ret = playVideo(x, y, stopOnKey); bool ret = playVideo(x, y, stopOnKey);
close(); close();

View File

@@ -15,6 +15,12 @@
struct SDL_Surface; struct SDL_Surface;
struct SDL_Texture; struct SDL_Texture;
enum class EVideoType : ui8
{
INTRO = 0, // use entire window: stopOnKey = true, scale = true, overlay = false
SPELLBOOK // overlay video: stopOnKey = false, scale = false, overlay = true
};
class IVideoPlayer : boost::noncopyable class IVideoPlayer : boost::noncopyable
{ {
public: public:
@@ -33,7 +39,7 @@ class IMainVideoPlayer : public IVideoPlayer
public: public:
virtual ~IMainVideoPlayer() = default; virtual ~IMainVideoPlayer() = default;
virtual void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true, std::function<void()> restart = nullptr){} virtual void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true, std::function<void()> restart = nullptr){}
virtual bool openAndPlayVideo(const VideoPath & name, int x, int y, bool stopOnKey = false, bool scale = false, bool overlay = true) virtual bool openAndPlayVideo(const VideoPath & name, int x, int y, EVideoType videoType)
{ {
return false; return false;
} }
@@ -89,7 +95,7 @@ class CVideoPlayer final : public IMainVideoPlayer
/// video playback currnet progress, in seconds /// video playback currnet progress, in seconds
double frameTime; double frameTime;
bool doLoop; // loop through video bool doLoop; // loop through video
bool overlayVideo; bool overlay;
bool playVideo(int x, int y, bool stopOnKey); bool playVideo(int x, int y, bool stopOnKey);
bool open(const VideoPath & fname, bool loop, bool useOverlay = false, bool scale = false); bool open(const VideoPath & fname, bool loop, bool useOverlay = false, bool scale = false);
@@ -107,7 +113,7 @@ public:
void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true, std::function<void()> onVideoRestart = nullptr) override; //moves to next frame if appropriate, and blits it or blits only if redraw parameter is set true void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true, std::function<void()> onVideoRestart = nullptr) override; //moves to next frame if appropriate, and blits it or blits only if redraw parameter is set true
// Opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played) // Opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played)
bool openAndPlayVideo(const VideoPath & name, int x, int y, bool stopOnKey = false, bool scale = false, bool overlay = true) override; bool openAndPlayVideo(const VideoPath & name, int x, int y, EVideoType videoType) override;
std::pair<std::unique_ptr<ui8 []>, si64> getAudio(const VideoPath & videoToOpen) override; std::pair<std::unique_ptr<ui8 []>, si64> getAudio(const VideoPath & videoToOpen) override;

View File

@@ -519,13 +519,13 @@ void CSpellWindow::setCurrentPage(int value)
void CSpellWindow::turnPageLeft() void CSpellWindow::turnPageLeft()
{ {
if(settings["video"]["spellbookAnimation"].Bool() && !isBigSpellbook) if(settings["video"]["spellbookAnimation"].Bool() && !isBigSpellbook)
CCS->videoh->openAndPlayVideo(VideoPath::builtin("PGTRNLFT.SMK"), pos.x+13, pos.y+15); CCS->videoh->openAndPlayVideo(VideoPath::builtin("PGTRNLFT.SMK"), pos.x+13, pos.y+15, EVideoType::SPELLBOOK);
} }
void CSpellWindow::turnPageRight() void CSpellWindow::turnPageRight()
{ {
if(settings["video"]["spellbookAnimation"].Bool() && !isBigSpellbook) if(settings["video"]["spellbookAnimation"].Bool() && !isBigSpellbook)
CCS->videoh->openAndPlayVideo(VideoPath::builtin("PGTRNRGH.SMK"), pos.x+13, pos.y+15); CCS->videoh->openAndPlayVideo(VideoPath::builtin("PGTRNRGH.SMK"), pos.x+13, pos.y+15, EVideoType::SPELLBOOK);
} }
void CSpellWindow::keyPressed(EShortcut key) void CSpellWindow::keyPressed(EShortcut key)