1
0
Fork 0
mirror of https://github.com/galaxyhaxz/devilution synced 2025-02-23 12:44:54 +00:00
devilution/2020_03_31/Source/movie.cpp

69 lines
1.4 KiB
C++
Raw Normal View History

2020-11-28 18:24:54 -06:00
#include "diablo.h"
#include "../3rdParty/Storm/Source/storm.h"
BOOLEAN movie_playing;
BOOL loop_movie;
void play_movie(const char *pszMovie, BOOL bCanSkip)
{
WNDPROC saveProc;
MSG msg;
HANDLE hVideo;
if(!gbActive) {
return;
}
/// ASSERT: assert(ghMainWnd);
saveProc = SetWindowProc(MovieWndProc);
InvalidateRect(ghMainWnd, NULL, FALSE);
UpdateWindow(ghMainWnd);
movie_playing = TRUE;
sound_disable_music(TRUE);
stream_stop();
effects_play_sound("Sfx\\Misc\\blank.wav");
SVidPlayBegin(pszMovie, 0, 0, 0, 0, loop_movie ? 0x100C0808 : 0x10280808, &hVideo);
while(hVideo != NULL) {
if(!gbActive || bCanSkip && !movie_playing) {
break;
}
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message != WM_QUIT) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
if(!SVidPlayContinue()) {
break;
}
}
if(hVideo != NULL) {
SVidPlayEnd(hVideo);
}
saveProc = SetWindowProc(saveProc);
/// ASSERT: assert(saveProc == MovieWndProc);
sound_disable_music(FALSE);
}
LRESULT CALLBACK MovieWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_KEYDOWN:
case WM_CHAR:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
movie_playing = FALSE;
break;
case WM_SYSCOMMAND:
if(wParam == SC_CLOSE) {
movie_playing = FALSE;
return 0;
}
break;
}
return MainWndProc(hWnd, uMsg, wParam, lParam);
}