mirror of
https://github.com/galaxyhaxz/devilution
synced 2025-02-22 12:34:59 +00:00
68 lines
1.4 KiB
C++
68 lines
1.4 KiB
C++
#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);
|
|
}
|