mirror of
https://github.com/blupi-games/planetblupi
synced 2024-12-30 10:15:36 +01:00
WIP: adapt event stuff
This commit is contained in:
parent
515c8fedd9
commit
a4e75756de
42
blupi.cpp
42
blupi.cpp
@ -177,7 +177,6 @@ void UpdateFrame(void)
|
|||||||
POINT posMouse;
|
POINT posMouse;
|
||||||
int i, term, speed;
|
int i, term, speed;
|
||||||
|
|
||||||
g_pPixmap->MouseBackClear(); // enlève la souris dans "back"
|
|
||||||
posMouse = g_pEvent->GetLastMousePos();
|
posMouse = g_pEvent->GetLastMousePos();
|
||||||
|
|
||||||
phase = g_pEvent->GetPhase();
|
phase = g_pEvent->GetPhase();
|
||||||
@ -277,8 +276,6 @@ void UpdateFrame(void)
|
|||||||
if ( term == 1 ) g_pEvent->ChangePhase(WM_PHASE_LOST); // perdu
|
if ( term == 1 ) g_pEvent->ChangePhase(WM_PHASE_LOST); // perdu
|
||||||
if ( term == 2 ) g_pEvent->ChangePhase(WM_PHASE_WINMOVIE); // gagné
|
if ( term == 2 ) g_pEvent->ChangePhase(WM_PHASE_WINMOVIE); // gagné
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pPixmap->MouseBackDraw(); // remet la souris dans "back"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -360,22 +357,13 @@ static void FinishObjects(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WindowProc2 (HWND hWnd, UINT message,
|
||||||
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
|
WPARAM wParam, LPARAM lParam,
|
||||||
WPARAM wParam, LPARAM lParam)
|
const SDL_Event *event)
|
||||||
{
|
{
|
||||||
static HINSTANCE hInstance;
|
static HINSTANCE hInstance;
|
||||||
POINT mousePos, totalDim, iconDim;
|
POINT mousePos, totalDim, iconDim;
|
||||||
|
|
||||||
#if 0
|
|
||||||
if ( message != WM_TIMER )
|
|
||||||
{
|
|
||||||
char s[100];
|
|
||||||
sprintf(s, "message=%d,%d\n", message, wParam);
|
|
||||||
OutputDebug(s);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// La touche F10 envoie un autre message pour activer
|
// La touche F10 envoie un autre message pour activer
|
||||||
// le menu dans les applications Windows standard !
|
// le menu dans les applications Windows standard !
|
||||||
if ( message == WM_SYSKEYDOWN && wParam == VK_F10 )
|
if ( message == WM_SYSKEYDOWN && wParam == VK_F10 )
|
||||||
@ -388,7 +376,7 @@ LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( g_pEvent != NULL &&
|
if ( g_pEvent != NULL &&
|
||||||
g_pEvent->TreatEvent(message, wParam, lParam) ) return 0;
|
g_pEvent->TreatEvent(event) ) return 0;
|
||||||
|
|
||||||
switch( message )
|
switch( message )
|
||||||
{
|
{
|
||||||
@ -547,6 +535,11 @@ LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
|
|||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
|
||||||
|
WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
return WindowProc2 (hWnd, message, wParam, lParam, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
// Erreur dans DoInit.
|
// Erreur dans DoInit.
|
||||||
|
|
||||||
@ -668,8 +661,6 @@ static bool DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
|
|||||||
UpdateWindow(g_hWnd);
|
UpdateWindow(g_hWnd);
|
||||||
SetFocus(g_hWnd);
|
SetFocus(g_hWnd);
|
||||||
|
|
||||||
ChangeSprite(SPRITE_WAIT); // met le sablier maison
|
|
||||||
|
|
||||||
if ( !bOK ) // config.def pas correct ?
|
if ( !bOK ) // config.def pas correct ?
|
||||||
{
|
{
|
||||||
return InitFail("Game not correctly installed", false);
|
return InitFail("Game not correctly installed", false);
|
||||||
@ -812,6 +803,7 @@ static bool DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
|
|||||||
|
|
||||||
// Load all cursors
|
// Load all cursors
|
||||||
g_pPixmap->LoadCursors ();
|
g_pPixmap->LoadCursors ();
|
||||||
|
g_pPixmap->ChangeSprite (SPRITE_WAIT); // met le sablier maison
|
||||||
|
|
||||||
// Crée le gestionnaire de son.
|
// Crée le gestionnaire de son.
|
||||||
g_pSound = new CSound;
|
g_pSound = new CSound;
|
||||||
@ -866,7 +858,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
|||||||
|
|
||||||
SetTimer(g_hWnd, 1, g_timerInterval, NULL);
|
SetTimer(g_hWnd, 1, g_timerInterval, NULL);
|
||||||
|
|
||||||
while ( true )
|
while (SDL_TRUE)
|
||||||
{
|
{
|
||||||
if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
|
if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
|
||||||
{
|
{
|
||||||
@ -880,8 +872,18 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// make sure we go to sleep if we have nothing else to do
|
// make sure we go to sleep if we have nothing else to do
|
||||||
if ( !g_bActive ) WaitMessage();
|
if (!g_bActive)
|
||||||
|
WaitMessage ();
|
||||||
|
else
|
||||||
|
Sleep (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Event event;
|
||||||
|
while (SDL_PollEvent (&event))
|
||||||
|
{
|
||||||
|
WindowProc2 (nullptr, 0, 0, 0, &event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
36
button.cpp
36
button.cpp
@ -10,7 +10,7 @@
|
|||||||
#include "decor.h"
|
#include "decor.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
#include "event.h"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
@ -241,27 +241,39 @@ void CButton::SetHide(bool bHide)
|
|||||||
|
|
||||||
// Traitement d'un événement.
|
// Traitement d'un événement.
|
||||||
|
|
||||||
bool CButton::TreatEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
bool CButton::TreatEvent(const SDL_Event &event)
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
|
|
||||||
if ( m_bHide || !m_bEnable ) return false;
|
if ( m_bHide || !m_bEnable ) return false;
|
||||||
|
|
||||||
pos = ConvLongToPos(lParam);
|
//pos = ConvLongToPos(lParam);
|
||||||
|
|
||||||
switch( message )
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case WM_LBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case WM_RBUTTONDOWN:
|
if ( event.button.button != SDL_BUTTON_LEFT
|
||||||
|
&& event.button.button != SDL_BUTTON_RIGHT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pos.x = event.button.x;
|
||||||
|
pos.y = event.button.y;
|
||||||
if ( MouseDown(pos) ) return true;
|
if ( MouseDown(pos) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case SDL_MOUSEMOTION:
|
||||||
|
pos.x = event.motion.x;
|
||||||
|
pos.y = event.motion.y;
|
||||||
if ( MouseMove(pos) ) return true;
|
if ( MouseMove(pos) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
case WM_RBUTTONUP:
|
if ( event.button.button != SDL_BUTTON_LEFT
|
||||||
|
&& event.button.button != SDL_BUTTON_RIGHT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pos.x = event.button.x;
|
||||||
|
pos.y = event.button.y;
|
||||||
if ( MouseUp(pos) ) return false; // (*)
|
if ( MouseUp(pos) ) return false; // (*)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -350,7 +362,7 @@ bool CButton::MouseDown(POINT pos)
|
|||||||
m_mouseState = 1;
|
m_mouseState = 1;
|
||||||
m_bMouseDown = true;
|
m_bMouseDown = true;
|
||||||
m_bRedraw = true;
|
m_bRedraw = true;
|
||||||
PostMessage(m_hWnd, WM_UPDATE, 0, 0);
|
CEvent::PushUserEvent (WM_UPDATE);
|
||||||
|
|
||||||
m_pSound->PlayImage(SOUND_CLICK, pos);
|
m_pSound->PlayImage(SOUND_CLICK, pos);
|
||||||
return true;
|
return true;
|
||||||
@ -394,7 +406,7 @@ bool CButton::MouseMove(POINT pos)
|
|||||||
iMenu != m_selMenu )
|
iMenu != m_selMenu )
|
||||||
{
|
{
|
||||||
m_bRedraw = true;
|
m_bRedraw = true;
|
||||||
PostMessage(m_hWnd, WM_UPDATE, 0, 0);
|
CEvent::PushUserEvent (WM_UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_bMouseDown;
|
return m_bMouseDown;
|
||||||
@ -416,7 +428,7 @@ bool CButton::MouseUp(POINT pos)
|
|||||||
|
|
||||||
if ( m_message != -1 )
|
if ( m_message != -1 )
|
||||||
{
|
{
|
||||||
PostMessage(m_hWnd, m_message, 0, 0);
|
CEvent::PushUserEvent (m_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
2
button.h
2
button.h
@ -30,7 +30,7 @@ public:
|
|||||||
bool GetHide();
|
bool GetHide();
|
||||||
void SetHide(bool bHide);
|
void SetHide(bool bHide);
|
||||||
|
|
||||||
bool TreatEvent(UINT message, WPARAM wParam, LPARAM lParam);
|
bool TreatEvent(const SDL_Event &event);
|
||||||
bool MouseOnButton(POINT pos);
|
bool MouseOnButton(POINT pos);
|
||||||
int GetToolTips(POINT pos);
|
int GetToolTips(POINT pos);
|
||||||
|
|
||||||
|
6
decor.h
6
decor.h
@ -341,9 +341,9 @@ public:
|
|||||||
int StatisticGetFire();
|
int StatisticGetFire();
|
||||||
void StatisticDraw();
|
void StatisticDraw();
|
||||||
void GenerateStatictic();
|
void GenerateStatictic();
|
||||||
bool StatisticDown(POINT pos, int fwKeys);
|
bool StatisticDown(POINT pos);
|
||||||
bool StatisticMove(POINT pos, int fwKeys);
|
bool StatisticMove(POINT pos);
|
||||||
bool StatisticUp(POINT pos, int fwKeys);
|
bool StatisticUp(POINT pos);
|
||||||
int StatisticDetect(POINT pos);
|
int StatisticDetect(POINT pos);
|
||||||
|
|
||||||
// Chemin.cpp
|
// Chemin.cpp
|
||||||
|
@ -802,7 +802,7 @@ void CDecor::GenerateStatictic()
|
|||||||
|
|
||||||
// Bouton pressé dans les statistiques.
|
// Bouton pressé dans les statistiques.
|
||||||
|
|
||||||
bool CDecor::StatisticDown(POINT pos, int fwKeys)
|
bool CDecor::StatisticDown(POINT pos)
|
||||||
{
|
{
|
||||||
int hili, rank, x, y, show, icon;
|
int hili, rank, x, y, show, icon;
|
||||||
POINT cel;
|
POINT cel;
|
||||||
@ -991,7 +991,7 @@ bool CDecor::StatisticDown(POINT pos, int fwKeys)
|
|||||||
|
|
||||||
// Souris déplacée dans les statistiques.
|
// Souris déplacée dans les statistiques.
|
||||||
|
|
||||||
bool CDecor::StatisticMove(POINT pos, int fwKeys)
|
bool CDecor::StatisticMove(POINT pos)
|
||||||
{
|
{
|
||||||
int rank;
|
int rank;
|
||||||
|
|
||||||
@ -1008,7 +1008,7 @@ bool CDecor::StatisticMove(POINT pos, int fwKeys)
|
|||||||
|
|
||||||
// Bouton relâché dans les statistiques.
|
// Bouton relâché dans les statistiques.
|
||||||
|
|
||||||
bool CDecor::StatisticUp(POINT pos, int fwKeys)
|
bool CDecor::StatisticUp(POINT pos)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
517
event.cpp
517
event.cpp
@ -51,15 +51,15 @@ DescInfo;
|
|||||||
|
|
||||||
static char cheat_code[9][20] =
|
static char cheat_code[9][20] =
|
||||||
{
|
{
|
||||||
"VISION", // 0
|
"vision", // 0
|
||||||
"POWER", // 1
|
"power", // 1
|
||||||
"LONESOME", // 2
|
"lonesome", // 2
|
||||||
"ALLMISSIONS", // 3
|
"allmissions", // 3
|
||||||
"QUICK", // 4
|
"quick", // 4
|
||||||
"HELPME", // 5
|
"helpme", // 5
|
||||||
"INVINCIBLE", // 6
|
"invincible", // 6
|
||||||
"SUPERBLUPI", // 7
|
"superblupi", // 7
|
||||||
"CONSTRUIRE", // 8 (CPOTUSVJSF)
|
"construire", // 8 (CPOTUSVJSF)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1454,11 +1454,10 @@ CEvent::CEvent()
|
|||||||
m_bAccessBuild = false;
|
m_bAccessBuild = false;
|
||||||
m_bRunMovie = false;
|
m_bRunMovie = false;
|
||||||
m_bBuildModify = false;
|
m_bBuildModify = false;
|
||||||
m_bMousePress = false;
|
|
||||||
m_bMouseDown = false;
|
m_bMouseDown = false;
|
||||||
m_oldMousePos.x = 0;
|
m_oldMousePos.x = 0;
|
||||||
m_oldMousePos.y = 0;
|
m_oldMousePos.y = 0;
|
||||||
m_mouseSprite = 0;
|
m_mouseSprite = SPRITE_ARROW;
|
||||||
m_bFillMouse = false;
|
m_bFillMouse = false;
|
||||||
m_bWaitMouse = false;
|
m_bWaitMouse = false;
|
||||||
m_bHideMouse = false;
|
m_bHideMouse = false;
|
||||||
@ -1480,7 +1479,7 @@ CEvent::CEvent()
|
|||||||
m_bDemoPlay = false;
|
m_bDemoPlay = false;
|
||||||
m_pDemoBuffer = NULL;
|
m_pDemoBuffer = NULL;
|
||||||
m_demoTime = 0;
|
m_demoTime = 0;
|
||||||
m_bCtrlDown = false;
|
m_keymod = 0;
|
||||||
|
|
||||||
for ( i=0 ; i<MAXBUTTON ; i++ )
|
for ( i=0 ; i<MAXBUTTON ; i++ )
|
||||||
{
|
{
|
||||||
@ -1511,9 +1510,11 @@ CEvent::~CEvent()
|
|||||||
POINT CEvent::GetMousePos()
|
POINT CEvent::GetMousePos()
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
|
int x, y;
|
||||||
|
|
||||||
GetCursorPos(&pos);
|
SDL_GetMouseState (&x, &y);
|
||||||
ScreenToClient(m_hWnd, &pos);
|
pos.x = x;
|
||||||
|
pos.y = y;
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
@ -2401,9 +2402,9 @@ bool CEvent::DrawButtons()
|
|||||||
|
|
||||||
// Retourne le lutin à utiliser à une position donnée.
|
// Retourne le lutin à utiliser à une position donnée.
|
||||||
|
|
||||||
int CEvent::MousePosToSprite(POINT pos)
|
MouseSprites CEvent::MousePosToSprite(POINT pos)
|
||||||
{
|
{
|
||||||
int sprite;
|
MouseSprites sprite;
|
||||||
bool bUp=false, bDown=false, bLeft=false, bRight=false;
|
bool bUp=false, bDown=false, bLeft=false, bRight=false;
|
||||||
|
|
||||||
sprite = SPRITE_POINTER;
|
sprite = SPRITE_POINTER;
|
||||||
@ -2494,7 +2495,7 @@ void CEvent::MouseSprite(POINT pos)
|
|||||||
m_mouseSprite = MousePosToSprite(pos);
|
m_mouseSprite = MousePosToSprite(pos);
|
||||||
|
|
||||||
m_pPixmap->SetMousePosSprite(pos, m_mouseSprite, m_bDemoPlay);
|
m_pPixmap->SetMousePosSprite(pos, m_mouseSprite, m_bDemoPlay);
|
||||||
ChangeSprite(m_mouseSprite);
|
m_pPixmap->ChangeSprite(m_mouseSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Met ou enlève le sablier de la souris.
|
// Met ou enlève le sablier de la souris.
|
||||||
@ -2512,7 +2513,7 @@ void CEvent::WaitMouse(bool bWait)
|
|||||||
m_mouseSprite = MousePosToSprite(GetMousePos());
|
m_mouseSprite = MousePosToSprite(GetMousePos());
|
||||||
}
|
}
|
||||||
m_pPixmap->SetMouseSprite(m_mouseSprite, m_bDemoPlay);
|
m_pPixmap->SetMouseSprite(m_mouseSprite, m_bDemoPlay);
|
||||||
ChangeSprite(m_mouseSprite);
|
m_pPixmap->ChangeSprite(m_mouseSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cache ou montre la souris.
|
// Cache ou montre la souris.
|
||||||
@ -2530,18 +2531,16 @@ void CEvent::HideMouse(bool bHide)
|
|||||||
m_mouseSprite = MousePosToSprite(GetMousePos());
|
m_mouseSprite = MousePosToSprite(GetMousePos());
|
||||||
}
|
}
|
||||||
m_pPixmap->SetMouseSprite(m_mouseSprite, m_bDemoPlay);
|
m_pPixmap->SetMouseSprite(m_mouseSprite, m_bDemoPlay);
|
||||||
ChangeSprite(m_mouseSprite);
|
m_pPixmap->ChangeSprite(m_mouseSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Traite les événements pour tous les boutons.
|
// Traite les événements pour tous les boutons.
|
||||||
|
|
||||||
bool CEvent::EventButtons(UINT message, WPARAM wParam, LPARAM lParam)
|
bool CEvent::EventButtons(const SDL_Event &event, POINT pos)
|
||||||
{
|
{
|
||||||
POINT pos, test;
|
POINT test;
|
||||||
int i, lg, oldx, sound, res;
|
int i, lg, oldx, sound, res;
|
||||||
|
|
||||||
pos = ConvLongToPos(lParam);
|
|
||||||
|
|
||||||
// Cherche le tool tips à utiliser pour la souris.
|
// Cherche le tool tips à utiliser pour la souris.
|
||||||
m_textToolTips[0] = 0;
|
m_textToolTips[0] = 0;
|
||||||
oldx = m_posToolTips.x;
|
oldx = m_posToolTips.x;
|
||||||
@ -2606,15 +2605,17 @@ bool CEvent::EventButtons(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
m_bHiliInfoButton = true;
|
m_bHiliInfoButton = true;
|
||||||
|
|
||||||
if ( message == WM_LBUTTONDOWN ||
|
if (event.type == SDL_MOUSEBUTTONDOWN
|
||||||
message == WM_RBUTTONDOWN )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
if ( m_pDecor->GetInfoMode() ) sound = SOUND_CLOSE;
|
if ( m_pDecor->GetInfoMode() ) sound = SOUND_CLOSE;
|
||||||
else sound = SOUND_OPEN;
|
else sound = SOUND_OPEN;
|
||||||
m_pSound->PlayImage(sound, pos);
|
m_pSound->PlayImage(sound, pos);
|
||||||
}
|
}
|
||||||
if ( message == WM_LBUTTONUP ||
|
if (event.type == SDL_MOUSEBUTTONUP
|
||||||
message == WM_RBUTTONUP )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
// Montre ou cache les infos tout en haut.
|
// Montre ou cache les infos tout en haut.
|
||||||
m_pDecor->SetInfoMode(!m_pDecor->GetInfoMode());
|
m_pDecor->SetInfoMode(!m_pDecor->GetInfoMode());
|
||||||
@ -2630,13 +2631,15 @@ bool CEvent::EventButtons(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
m_bHiliHelpButton = true;
|
m_bHiliHelpButton = true;
|
||||||
|
|
||||||
if ( message == WM_LBUTTONDOWN ||
|
if (event.type == SDL_MOUSEBUTTONDOWN
|
||||||
message == WM_RBUTTONDOWN )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
m_pSound->PlayImage(SOUND_CLICK, pos);
|
m_pSound->PlayImage(SOUND_CLICK, pos);
|
||||||
}
|
}
|
||||||
if ( message == WM_LBUTTONUP ||
|
if (event.type == SDL_MOUSEBUTTONUP
|
||||||
message == WM_RBUTTONUP )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
// Inverse le mode aide dans les infos.
|
// Inverse le mode aide dans les infos.
|
||||||
m_bInfoHelp = !m_bInfoHelp;
|
m_bInfoHelp = !m_bInfoHelp;
|
||||||
@ -2655,13 +2658,15 @@ bool CEvent::EventButtons(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
if ( m_phase == WM_PHASE_BUILD )
|
if ( m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
if ( message == WM_LBUTTONDOWN ||
|
if (event.type == SDL_MOUSEBUTTONDOWN
|
||||||
message == WM_RBUTTONDOWN )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
m_pDecor->HideTooltips(true); // plus de tooltips pour décor
|
m_pDecor->HideTooltips(true); // plus de tooltips pour décor
|
||||||
}
|
}
|
||||||
if ( message == WM_LBUTTONUP ||
|
if (event.type == SDL_MOUSEBUTTONUP
|
||||||
message == WM_RBUTTONUP )
|
&& ( event.button.button == SDL_BUTTON_LEFT
|
||||||
|
|| event.button.button == SDL_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
m_pDecor->HideTooltips(false);
|
m_pDecor->HideTooltips(false);
|
||||||
}
|
}
|
||||||
@ -2671,13 +2676,13 @@ bool CEvent::EventButtons(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
i = 0;
|
i = 0;
|
||||||
while ( table[m_index].buttons[i].message != 0 )
|
while ( table[m_index].buttons[i].message != 0 )
|
||||||
{
|
{
|
||||||
if ( m_buttons[i].TreatEvent(message, wParam, lParam) ) return true;
|
if ( m_buttons[i].TreatEvent(event) ) return true;
|
||||||
i ++;
|
i ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
if ( m_menu.TreatEvent(message, wParam, lParam) ) return true;
|
if ( m_menu.TreatEvent(event) ) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -2785,7 +2790,7 @@ bool CEvent::ChangePhase(UINT phase)
|
|||||||
m_textToolTips[0] = 0;
|
m_textToolTips[0] = 0;
|
||||||
m_posToolTips.x = -1;
|
m_posToolTips.x = -1;
|
||||||
m_bPause = false;
|
m_bPause = false;
|
||||||
m_bCtrlDown = false;
|
m_keymod = 0;
|
||||||
m_bMouseDown = false;
|
m_bMouseDown = false;
|
||||||
m_debugPos.x = 0;
|
m_debugPos.x = 0;
|
||||||
m_debugPos.y = 0;
|
m_debugPos.y = 0;
|
||||||
@ -3252,9 +3257,6 @@ void CEvent::DecorAutoShift(POINT pos)
|
|||||||
|
|
||||||
max = 4-m_scrollSpeed; // max <- 3..1
|
max = 4-m_scrollSpeed; // max <- 3..1
|
||||||
|
|
||||||
//? if ( m_bMousePress &&
|
|
||||||
//? (m_phase == WM_PHASE_PLAY ||
|
|
||||||
//? m_phase == WM_PHASE_BUILD) )
|
|
||||||
if ( m_phase == WM_PHASE_PLAY ||
|
if ( m_phase == WM_PHASE_PLAY ||
|
||||||
m_phase == WM_PHASE_BUILD )
|
m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
@ -3366,7 +3368,7 @@ bool CEvent::IsShift()
|
|||||||
|
|
||||||
// Modifie le décor lorsque le bouton de la souris est pressé.
|
// Modifie le décor lorsque le bouton de la souris est pressé.
|
||||||
|
|
||||||
bool CEvent::PlayDown(POINT pos, int fwKeys)
|
bool CEvent::PlayDown(POINT pos, const SDL_Event &event)
|
||||||
{
|
{
|
||||||
bool bDecor = false;
|
bool bDecor = false;
|
||||||
bool bMap = false;
|
bool bMap = false;
|
||||||
@ -3386,7 +3388,7 @@ bool CEvent::PlayDown(POINT pos, int fwKeys)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pDecor->StatisticDown(pos, fwKeys);
|
m_pDecor->StatisticDown(pos);
|
||||||
|
|
||||||
if ( pos.x >= POSMAPX && pos.x <= POSMAPX+DIMMAPX &&
|
if ( pos.x >= POSMAPX && pos.x <= POSMAPX+DIMMAPX &&
|
||||||
pos.y >= POSMAPY && pos.y <= POSMAPY+DIMMAPY )
|
pos.y >= POSMAPY && pos.y <= POSMAPY+DIMMAPY )
|
||||||
@ -3403,7 +3405,7 @@ bool CEvent::PlayDown(POINT pos, int fwKeys)
|
|||||||
if ( !bDecor && !bMap ) return false;
|
if ( !bDecor && !bMap ) return false;
|
||||||
|
|
||||||
cel = m_pDecor->ConvPosToCel(pos, true);
|
cel = m_pDecor->ConvPosToCel(pos, true);
|
||||||
if ( fwKeys&MK_RBUTTON )
|
if (event.button.button == SDL_BUTTON_RIGHT)
|
||||||
{
|
{
|
||||||
if ( bMap )
|
if ( bMap )
|
||||||
{
|
{
|
||||||
@ -3430,7 +3432,7 @@ bool CEvent::PlayDown(POINT pos, int fwKeys)
|
|||||||
{
|
{
|
||||||
m_bHili = true;
|
m_bHili = true;
|
||||||
m_bMouseDown = true;
|
m_bMouseDown = true;
|
||||||
m_pDecor->BlupiHiliDown(pos, !!(fwKeys & MK_SHIFT));
|
m_pDecor->BlupiHiliDown(pos, !!(m_keymod & KMOD_SHIFT));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3443,7 +3445,7 @@ bool CEvent::PlayDown(POINT pos, int fwKeys)
|
|||||||
|
|
||||||
// Modifie le décor lorsque la souris est déplacée.
|
// Modifie le décor lorsque la souris est déplacée.
|
||||||
|
|
||||||
bool CEvent::PlayMove(POINT pos, int fwKeys)
|
bool CEvent::PlayMove(POINT pos, Uint16 mod)
|
||||||
{
|
{
|
||||||
if ( m_bMenu )
|
if ( m_bMenu )
|
||||||
{
|
{
|
||||||
@ -3456,13 +3458,13 @@ bool CEvent::PlayMove(POINT pos, int fwKeys)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pDecor->StatisticMove(pos, fwKeys);
|
m_pDecor->StatisticMove(pos);
|
||||||
|
|
||||||
if ( m_bMouseDown ) // bouton souris pressé ?
|
if ( m_bMouseDown ) // bouton souris pressé ?
|
||||||
{
|
{
|
||||||
if ( m_bHili )
|
if ( m_bHili )
|
||||||
{
|
{
|
||||||
m_pDecor->BlupiHiliMove(pos, !!(fwKeys & MK_SHIFT));
|
m_pDecor->BlupiHiliMove(pos, !!(mod & KMOD_SHIFT));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3479,7 +3481,7 @@ bool CEvent::PlayMove(POINT pos, int fwKeys)
|
|||||||
|
|
||||||
// Modifie le décor lorsque le bouton de la souris est relâché.
|
// Modifie le décor lorsque le bouton de la souris est relâché.
|
||||||
|
|
||||||
bool CEvent::PlayUp(POINT pos, int fwKeys)
|
bool CEvent::PlayUp(POINT pos, Uint16 mod)
|
||||||
{
|
{
|
||||||
static int table_sound_boing[3] =
|
static int table_sound_boing[3] =
|
||||||
{
|
{
|
||||||
@ -3488,13 +3490,13 @@ bool CEvent::PlayUp(POINT pos, int fwKeys)
|
|||||||
SOUND_BOING3,
|
SOUND_BOING3,
|
||||||
};
|
};
|
||||||
|
|
||||||
m_pDecor->StatisticUp(pos, fwKeys);
|
m_pDecor->StatisticUp(pos);
|
||||||
|
|
||||||
if ( m_bMouseDown ) // bouton souris pressé ?
|
if ( m_bMouseDown ) // bouton souris pressé ?
|
||||||
{
|
{
|
||||||
if ( m_bHili )
|
if ( m_bHili )
|
||||||
{
|
{
|
||||||
m_pDecor->BlupiHiliUp(pos, !!(fwKeys & MK_SHIFT));
|
m_pDecor->BlupiHiliUp(pos, !!(mod & KMOD_SHIFT));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3802,7 +3804,7 @@ static int tableHome[] =
|
|||||||
|
|
||||||
// Modifie le décor lorsque le bouton de la souris est pressé.
|
// Modifie le décor lorsque le bouton de la souris est pressé.
|
||||||
|
|
||||||
bool CEvent::BuildDown(POINT pos, int fwKeys, bool bMix)
|
bool CEvent::BuildDown(POINT pos, Uint16 mod, bool bMix)
|
||||||
{
|
{
|
||||||
POINT cel;
|
POINT cel;
|
||||||
int menu, channel, icon;
|
int menu, channel, icon;
|
||||||
@ -3833,7 +3835,7 @@ bool CEvent::BuildDown(POINT pos, int fwKeys, bool bMix)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fwKeys & MK_CONTROL ) // touche Ctrl enfoncée ?
|
if (mod & KMOD_CTRL) // touche Ctrl enfoncée ?
|
||||||
{
|
{
|
||||||
WaitMouse(true);
|
WaitMouse(true);
|
||||||
m_pDecor->ArrangeFill(cel, CHFLOOR, tableFloor[menu*10+m_lastFloor[menu]], true);
|
m_pDecor->ArrangeFill(cel, CHFLOOR, tableFloor[menu*10+m_lastFloor[menu]], true);
|
||||||
@ -3867,7 +3869,7 @@ bool CEvent::BuildDown(POINT pos, int fwKeys, bool bMix)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fwKeys & MK_CONTROL ) // touche Ctrl enfoncée ?
|
if (mod & KMOD_CTRL) // touche Ctrl enfoncée ?
|
||||||
{
|
{
|
||||||
WaitMouse(true);
|
WaitMouse(true);
|
||||||
m_pDecor->ArrangeFill(cel, CHOBJECT, tableObject[menu*10+m_lastObject[menu]], false);
|
m_pDecor->ArrangeFill(cel, CHOBJECT, tableObject[menu*10+m_lastObject[menu]], false);
|
||||||
@ -3898,7 +3900,7 @@ bool CEvent::BuildDown(POINT pos, int fwKeys, bool bMix)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fwKeys & MK_CONTROL ) // touche Ctrl enfoncée ?
|
if (mod & KMOD_CTRL) // touche Ctrl enfoncée ?
|
||||||
{
|
{
|
||||||
WaitMouse(true);
|
WaitMouse(true);
|
||||||
m_pDecor->ArrangeFill(cel, CHOBJECT, tableHome[menu*10+m_lastHome[menu]], false);
|
m_pDecor->ArrangeFill(cel, CHOBJECT, tableHome[menu*10+m_lastHome[menu]], false);
|
||||||
@ -3982,11 +3984,11 @@ bool CEvent::BuildDown(POINT pos, int fwKeys, bool bMix)
|
|||||||
|
|
||||||
// Modifie le décor lorsque la souris est déplacée.
|
// Modifie le décor lorsque la souris est déplacée.
|
||||||
|
|
||||||
bool CEvent::BuildMove(POINT pos, int fwKeys)
|
bool CEvent::BuildMove(POINT pos, Uint16 mod, const SDL_Event &event)
|
||||||
{
|
{
|
||||||
if ( fwKeys & MK_LBUTTON ) // bouton souris pressé ?
|
if (event.motion.state & SDL_BUTTON (SDL_BUTTON_LEFT)) // bouton souris pressé ?
|
||||||
{
|
{
|
||||||
BuildDown(pos, fwKeys, false);
|
BuildDown(pos, mod, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( GetState(WM_DECOR4) == 1 ) // pose d'un blupi
|
if ( GetState(WM_DECOR4) == 1 ) // pose d'un blupi
|
||||||
@ -4003,7 +4005,7 @@ bool CEvent::BuildMove(POINT pos, int fwKeys)
|
|||||||
|
|
||||||
// Modifie le décor lorsque le bouton de la souris est relâché.
|
// Modifie le décor lorsque le bouton de la souris est relâché.
|
||||||
|
|
||||||
bool CEvent::BuildUp(POINT pos, int fwKeys)
|
bool CEvent::BuildUp(POINT pos)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -4519,7 +4521,7 @@ void CEvent::DemoStep()
|
|||||||
SetCursorPos(pos.x, pos.y);
|
SetCursorPos(pos.x, pos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
TreatEventBase(message, wParam, lParam);
|
TreatEventBase(nullptr); // XXX: use SDL_Event
|
||||||
|
|
||||||
if ( m_demoIndex >= m_demoEnd )
|
if ( m_demoIndex >= m_demoEnd )
|
||||||
{
|
{
|
||||||
@ -4584,55 +4586,50 @@ POINT CEvent::GetLastMousePos()
|
|||||||
|
|
||||||
// Traitement d'un événement.
|
// Traitement d'un événement.
|
||||||
|
|
||||||
bool CEvent::TreatEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
bool CEvent::TreatEvent(const SDL_Event *event)
|
||||||
{
|
{
|
||||||
if ( m_bDemoPlay ) // démo en lecture ?
|
if ( m_bDemoPlay ) // démo en lecture ?
|
||||||
{
|
{
|
||||||
if ( message == WM_KEYDOWN || // l'utilisateur clique ?
|
if (event->type == SDL_KEYDOWN ||
|
||||||
message == WM_KEYUP ||
|
event->type == SDL_KEYUP ||
|
||||||
// message == WM_LBUTTONDOWN ||
|
event->type == SDL_MOUSEBUTTONUP) // is the user clicking?
|
||||||
// message == WM_RBUTTONDOWN ||
|
|
||||||
message == WM_LBUTTONUP ||
|
|
||||||
message == WM_RBUTTONUP )
|
|
||||||
{
|
{
|
||||||
DemoPlayStop();
|
DemoPlayStop ();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ( message == WM_MOUSEMOVE ) // l'utilisateur bouge ?
|
|
||||||
{
|
if (event->type == SDL_MOUSEMOTION) // is the user moving?
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TreatEventBase(message, wParam, lParam);
|
return TreatEventBase(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Traitement d'un événement.
|
// Traitement d'un événement.
|
||||||
|
|
||||||
bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
bool CEvent::TreatEventBase(const SDL_Event *event)
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
int fwKeys;
|
|
||||||
int i, sound;
|
int i, sound;
|
||||||
char c;
|
char c;
|
||||||
bool bEnable;
|
bool bEnable;
|
||||||
|
|
||||||
pos = ConvLongToPos(lParam);
|
//DemoRecEvent(message, wParam, lParam); XXX: use SDL_Event
|
||||||
fwKeys = static_cast<int> (wParam);
|
|
||||||
|
|
||||||
DemoRecEvent(message, wParam, lParam);
|
if (!event)
|
||||||
|
return false;
|
||||||
|
|
||||||
switch( message )
|
switch (event->type)
|
||||||
{
|
{
|
||||||
case WM_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
if ( wParam >= 'A' && wParam <= 'Z' )
|
if ( event->key.keysym.sym >= SDLK_a && event->key.keysym.sym <= SDLK_z )
|
||||||
{
|
{
|
||||||
if ( m_posCheat == 0 ) // première lettre ?
|
if ( m_posCheat == 0 ) // première lettre ?
|
||||||
{
|
{
|
||||||
m_rankCheat = -1;
|
m_rankCheat = -1;
|
||||||
for ( i=0 ; i<9 ; i++ )
|
for ( i=0 ; i<9 ; i++ )
|
||||||
{
|
{
|
||||||
if ( (char)wParam == cheat_code[i][0] )
|
if ( (char) event->key.keysym.sym == cheat_code[i][0] )
|
||||||
{
|
{
|
||||||
m_rankCheat = i;
|
m_rankCheat = i;
|
||||||
break;
|
break;
|
||||||
@ -4643,7 +4640,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
c = cheat_code[m_rankCheat][m_posCheat];
|
c = cheat_code[m_rankCheat][m_posCheat];
|
||||||
if ( m_posCheat != 0 && m_rankCheat == 8 ) c++; // CONSTRUIRE ?
|
if ( m_posCheat != 0 && m_rankCheat == 8 ) c++; // CONSTRUIRE ?
|
||||||
if ( (char)wParam == c )
|
if ( (char) event->key.keysym.sym == c )
|
||||||
{
|
{
|
||||||
m_posCheat ++;
|
m_posCheat ++;
|
||||||
if ( cheat_code[m_rankCheat][m_posCheat] == 0 )
|
if ( cheat_code[m_rankCheat][m_posCheat] == 0 )
|
||||||
@ -4746,15 +4743,17 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
if ( m_phase == WM_PHASE_BYE )
|
if ( m_phase == WM_PHASE_BYE )
|
||||||
{
|
{
|
||||||
PostMessage(m_hWnd, WM_CLOSE, 0, 0);
|
SDL_Event ev;
|
||||||
|
ev.type = SDL_QUIT;
|
||||||
|
SDL_PushEvent (&ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( wParam )
|
switch (event->key.keysym.sym)
|
||||||
{
|
{
|
||||||
case VK_END:
|
case SDLK_END:
|
||||||
DemoRecStop();
|
DemoRecStop();
|
||||||
return true;
|
return true;
|
||||||
case VK_ESCAPE:
|
case SDLK_ESCAPE:
|
||||||
if ( m_bRunMovie )
|
if ( m_bRunMovie )
|
||||||
{
|
{
|
||||||
StopMovie();
|
StopMovie();
|
||||||
@ -4799,11 +4798,13 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
if ( m_phase == WM_PHASE_BYE )
|
if ( m_phase == WM_PHASE_BYE )
|
||||||
{
|
{
|
||||||
PostMessage(m_hWnd, WM_CLOSE, 0, 0);
|
SDL_Event ev;
|
||||||
|
ev.type = SDL_QUIT;
|
||||||
|
SDL_PushEvent (&ev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_RETURN:
|
case SDLK_RETURN:
|
||||||
if ( m_phase == WM_PHASE_PLAY ||
|
if ( m_phase == WM_PHASE_PLAY ||
|
||||||
m_phase == WM_PHASE_READ ||
|
m_phase == WM_PHASE_READ ||
|
||||||
m_phase == WM_PHASE_WRITE ||
|
m_phase == WM_PHASE_WRITE ||
|
||||||
@ -4837,27 +4838,27 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_LEFT:
|
case SDLK_LEFT:
|
||||||
//? DecorShift(-4,4);
|
//? DecorShift(-4,4);
|
||||||
DecorShift(-2,2);
|
DecorShift(-2,2);
|
||||||
return true;
|
return true;
|
||||||
case VK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
//? DecorShift(4,-4);
|
//? DecorShift(4,-4);
|
||||||
DecorShift(2,-2);
|
DecorShift(2,-2);
|
||||||
return true;
|
return true;
|
||||||
case VK_UP:
|
case SDLK_UP:
|
||||||
//? DecorShift(-6,-6);
|
//? DecorShift(-6,-6);
|
||||||
DecorShift(-3,-3);
|
DecorShift(-3,-3);
|
||||||
return true;
|
return true;
|
||||||
case VK_DOWN:
|
case SDLK_DOWN:
|
||||||
//? DecorShift(6,6);
|
//? DecorShift(6,6);
|
||||||
DecorShift(3,3);
|
DecorShift(3,3);
|
||||||
return true;
|
return true;
|
||||||
case VK_HOME:
|
case SDLK_HOME:
|
||||||
pos = m_pDecor->GetHome();
|
pos = m_pDecor->GetHome();
|
||||||
m_pDecor->SetCoin(pos);
|
m_pDecor->SetCoin(pos);
|
||||||
return true;
|
return true;
|
||||||
case VK_SPACE:
|
case SDLK_SPACE:
|
||||||
if ( m_bRunMovie )
|
if ( m_bRunMovie )
|
||||||
{
|
{
|
||||||
StopMovie();
|
StopMovie();
|
||||||
@ -4866,7 +4867,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
m_pDecor->FlipOutline();
|
m_pDecor->FlipOutline();
|
||||||
return true;
|
return true;
|
||||||
case VK_PAUSE:
|
case SDLK_PAUSE:
|
||||||
m_bPause = !m_bPause;
|
m_bPause = !m_bPause;
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
@ -4880,8 +4881,16 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_CONTROL:
|
|
||||||
m_bCtrlDown = true;
|
case SDLK_LSHIFT:
|
||||||
|
case SDLK_RSHIFT:
|
||||||
|
m_keymod |= KMOD_SHIFT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDLK_LCTRL:
|
||||||
|
case SDLK_RCTRL:
|
||||||
|
m_keymod |= KMOD_CTRL;
|
||||||
|
OutputDebugString ("CTRL: DOWN");
|
||||||
if ( m_phase == WM_PHASE_BUILD )
|
if ( m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
m_bFillMouse = true;
|
m_bFillMouse = true;
|
||||||
@ -4892,7 +4901,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
m_bFillMouse = false;
|
m_bFillMouse = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_F1:
|
case SDLK_F1:
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
// Montre ou cache les infos tout en haut.
|
// Montre ou cache les infos tout en haut.
|
||||||
@ -4904,116 +4913,130 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
m_pDecor->SetInfoMode(!m_pDecor->GetInfoMode());
|
m_pDecor->SetInfoMode(!m_pDecor->GetInfoMode());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_F9:
|
case SDLK_F8:
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
m_pDecor->MemoPos(0, m_bCtrlDown);
|
m_pDecor->MemoPos(0, !!(m_keymod & KMOD_CTRL));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_F10:
|
case SDLK_F10:
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
m_pDecor->MemoPos(1, m_bCtrlDown);
|
m_pDecor->MemoPos(1, !!(m_keymod & KMOD_CTRL));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_F11:
|
case SDLK_F11:
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
m_pDecor->MemoPos(2, m_bCtrlDown);
|
m_pDecor->MemoPos(2, !!(m_keymod & KMOD_CTRL));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case VK_F12:
|
case SDLK_F12:
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
m_pDecor->MemoPos(3, m_bCtrlDown);
|
m_pDecor->MemoPos(3, !!(m_keymod & KMOD_CTRL));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_KEYUP:
|
case SDL_KEYUP:
|
||||||
switch( wParam )
|
switch (event->key.keysym.sym)
|
||||||
{
|
{
|
||||||
case VK_CONTROL:
|
case SDLK_LSHIFT:
|
||||||
m_bCtrlDown = false;
|
case SDLK_RSHIFT:
|
||||||
|
m_keymod &= ~KMOD_SHIFT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDLK_LCTRL:
|
||||||
|
case SDLK_RCTRL:
|
||||||
|
m_keymod &= ~KMOD_CTRL;
|
||||||
|
OutputDebugString ("CTRL: UP");
|
||||||
m_bFillMouse = false;
|
m_bFillMouse = false;
|
||||||
MouseSprite(GetMousePos());
|
MouseSprite(GetMousePos());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case WM_RBUTTONDOWN:
|
if ( event->button.button != SDL_BUTTON_LEFT
|
||||||
m_bMousePress = true;
|
&& event->button.button != SDL_BUTTON_RIGHT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pos.x = event->button.x;
|
||||||
|
pos.y = event->button.y;
|
||||||
|
|
||||||
MouseSprite(pos);
|
MouseSprite(pos);
|
||||||
//? DecorAutoShift(pos);
|
//? DecorAutoShift(pos);
|
||||||
if ( EventButtons(message, wParam, lParam) ) return true;
|
if ( EventButtons(*event, pos) ) return true;
|
||||||
if ( m_phase == WM_PHASE_BUILD )
|
if ( m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
if ( BuildDown(pos, fwKeys) ) return true;
|
if ( BuildDown(pos, m_keymod) ) return true;
|
||||||
}
|
}
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
if ( PlayDown(pos, fwKeys) ) return true;
|
if ( PlayDown(pos, *event) ) return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case SDL_MOUSEMOTION:
|
||||||
if ( m_mouseType == MOUSETYPEWINPOS &&
|
pos.x = event->motion.x;
|
||||||
(pos.x != m_oldMousePos.x ||
|
pos.y = event->motion.y;
|
||||||
pos.y != m_oldMousePos.y ) )
|
|
||||||
{
|
|
||||||
m_oldMousePos = pos;
|
|
||||||
ClientToScreen(m_hWnd, &m_oldMousePos);
|
|
||||||
SetCursorPos(m_oldMousePos.x, m_oldMousePos.y); // (*)
|
|
||||||
}
|
|
||||||
m_oldMousePos = pos;
|
m_oldMousePos = pos;
|
||||||
|
|
||||||
MouseSprite(pos);
|
MouseSprite(pos);
|
||||||
if ( EventButtons(message, wParam, lParam) ) return true;
|
if ( EventButtons(*event, pos) ) return true;
|
||||||
if ( m_phase == WM_PHASE_BUILD )
|
if ( m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
if ( BuildMove(pos, fwKeys) ) return true;
|
if ( BuildMove(pos, m_keymod, *event) ) return true;
|
||||||
}
|
}
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
if ( PlayMove(pos, fwKeys) ) return true;
|
if ( PlayMove(pos, m_keymod) ) return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_NCMOUSEMOVE:
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
if ( event->button.button != SDL_BUTTON_LEFT
|
||||||
|
&& event->button.button != SDL_BUTTON_RIGHT)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
pos.x = event->button.x;
|
||||||
case WM_RBUTTONUP:
|
pos.y = event->button.y;
|
||||||
m_bMousePress = false;
|
|
||||||
if ( EventButtons(message, wParam, lParam) ) return true;
|
if ( EventButtons(*event, pos) ) return true;
|
||||||
if ( m_phase == WM_PHASE_BUILD )
|
if ( m_phase == WM_PHASE_BUILD )
|
||||||
{
|
{
|
||||||
if ( BuildUp(pos, fwKeys) ) return true;
|
if ( BuildUp(pos) ) return true;
|
||||||
}
|
}
|
||||||
if ( m_phase == WM_PHASE_PLAY )
|
if ( m_phase == WM_PHASE_PLAY )
|
||||||
{
|
{
|
||||||
if ( PlayUp(pos, fwKeys) ) return true;
|
if ( PlayUp(pos, m_keymod) ) return true;
|
||||||
}
|
}
|
||||||
if ( m_phase == WM_PHASE_BYE )
|
if ( m_phase == WM_PHASE_BYE )
|
||||||
{
|
{
|
||||||
PostMessage(m_hWnd, WM_CLOSE, 0, 0);
|
SDL_Event ev;
|
||||||
|
ev.type = SDL_QUIT;
|
||||||
|
SDL_PushEvent (&ev);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_DEMO:
|
case SDL_USEREVENT:
|
||||||
|
switch (event->user.code)
|
||||||
|
{
|
||||||
|
case WM_PHASE_DEMO:
|
||||||
m_demoNumber = 0;
|
m_demoNumber = 0;
|
||||||
DemoPlayStart();
|
DemoPlayStart();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_SCHOOL:
|
case WM_PHASE_SCHOOL:
|
||||||
m_bSchool = true;
|
m_bSchool = true;
|
||||||
m_bPrivate = false;
|
m_bPrivate = false;
|
||||||
if ( ChangePhase(WM_PHASE_INFO) ) return true;
|
if ( ChangePhase(WM_PHASE_INFO) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_MISSION:
|
case WM_PHASE_MISSION:
|
||||||
m_bSchool = false;
|
m_bSchool = false;
|
||||||
m_bPrivate = false;
|
m_bPrivate = false;
|
||||||
if ( m_mission == 0 ) // première mission ?
|
if ( m_mission == 0 ) // première mission ?
|
||||||
@ -5026,45 +5049,45 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_PRIVATE:
|
case WM_PHASE_PRIVATE:
|
||||||
m_bSchool = false;
|
m_bSchool = false;
|
||||||
m_bPrivate = true;
|
m_bPrivate = true;
|
||||||
if ( ChangePhase(WM_PHASE_INFO) ) return true;
|
if ( ChangePhase(WM_PHASE_INFO) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_INTRO1:
|
case WM_PHASE_INTRO1:
|
||||||
case WM_PHASE_INTRO2:
|
case WM_PHASE_INTRO2:
|
||||||
case WM_PHASE_INIT:
|
case WM_PHASE_INIT:
|
||||||
case WM_PHASE_HISTORY0:
|
case WM_PHASE_HISTORY0:
|
||||||
case WM_PHASE_HISTORY1:
|
case WM_PHASE_HISTORY1:
|
||||||
case WM_PHASE_INFO:
|
case WM_PHASE_INFO:
|
||||||
case WM_PHASE_PLAY:
|
case WM_PHASE_PLAY:
|
||||||
case WM_PHASE_READ:
|
case WM_PHASE_READ:
|
||||||
case WM_PHASE_WRITE:
|
case WM_PHASE_WRITE:
|
||||||
case WM_PHASE_WRITEp:
|
case WM_PHASE_WRITEp:
|
||||||
case WM_PHASE_BUILD:
|
case WM_PHASE_BUILD:
|
||||||
case WM_PHASE_BUTTON:
|
case WM_PHASE_BUTTON:
|
||||||
case WM_PHASE_TERM:
|
case WM_PHASE_TERM:
|
||||||
case WM_PHASE_STOP:
|
case WM_PHASE_STOP:
|
||||||
case WM_PHASE_HELP:
|
case WM_PHASE_HELP:
|
||||||
case WM_PHASE_MUSIC:
|
case WM_PHASE_MUSIC:
|
||||||
case WM_PHASE_REGION:
|
case WM_PHASE_REGION:
|
||||||
case WM_PHASE_SETUP:
|
case WM_PHASE_SETUP:
|
||||||
case WM_PHASE_SETUPp:
|
case WM_PHASE_SETUPp:
|
||||||
case WM_PHASE_PLAYMOVIE:
|
case WM_PHASE_PLAYMOVIE:
|
||||||
case WM_PHASE_H0MOVIE:
|
case WM_PHASE_H0MOVIE:
|
||||||
case WM_PHASE_H1MOVIE:
|
case WM_PHASE_H1MOVIE:
|
||||||
case WM_PHASE_H2MOVIE:
|
case WM_PHASE_H2MOVIE:
|
||||||
case WM_PHASE_WINMOVIE:
|
case WM_PHASE_WINMOVIE:
|
||||||
case WM_PHASE_BYE:
|
case WM_PHASE_BYE:
|
||||||
if ( ChangePhase(message) ) return true;
|
if ( ChangePhase(event->user.code) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_UNDO:
|
case WM_PHASE_UNDO:
|
||||||
m_pDecor->UndoBack(); // revient en arrière
|
m_pDecor->UndoBack(); // revient en arrière
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PREV:
|
case WM_PREV:
|
||||||
m_pDecor->SetInvincible(false);
|
m_pDecor->SetInvincible(false);
|
||||||
m_pDecor->SetSuper(false);
|
m_pDecor->SetSuper(false);
|
||||||
if ( m_bPrivate )
|
if ( m_bPrivate )
|
||||||
@ -5093,7 +5116,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_NEXT:
|
case WM_NEXT:
|
||||||
m_pDecor->SetInvincible(false);
|
m_pDecor->SetInvincible(false);
|
||||||
m_pDecor->SetSuper(false);
|
m_pDecor->SetSuper(false);
|
||||||
if ( m_bPrivate )
|
if ( m_bPrivate )
|
||||||
@ -5126,7 +5149,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DECOR1:
|
case WM_DECOR1:
|
||||||
SetState(WM_DECOR1, 1);
|
SetState(WM_DECOR1, 1);
|
||||||
SetState(WM_DECOR2, 0);
|
SetState(WM_DECOR2, 0);
|
||||||
SetState(WM_DECOR3, 0);
|
SetState(WM_DECOR3, 0);
|
||||||
@ -5134,7 +5157,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetState(WM_DECOR5, 0);
|
SetState(WM_DECOR5, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DECOR2:
|
case WM_DECOR2:
|
||||||
SetState(WM_DECOR1, 0);
|
SetState(WM_DECOR1, 0);
|
||||||
SetState(WM_DECOR2, 1);
|
SetState(WM_DECOR2, 1);
|
||||||
SetState(WM_DECOR3, 0);
|
SetState(WM_DECOR3, 0);
|
||||||
@ -5142,7 +5165,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetState(WM_DECOR5, 0);
|
SetState(WM_DECOR5, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DECOR3:
|
case WM_DECOR3:
|
||||||
SetState(WM_DECOR1, 0);
|
SetState(WM_DECOR1, 0);
|
||||||
SetState(WM_DECOR2, 0);
|
SetState(WM_DECOR2, 0);
|
||||||
SetState(WM_DECOR3, 1);
|
SetState(WM_DECOR3, 1);
|
||||||
@ -5150,7 +5173,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetState(WM_DECOR5, 0);
|
SetState(WM_DECOR5, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DECOR4:
|
case WM_DECOR4:
|
||||||
SetState(WM_DECOR1, 0);
|
SetState(WM_DECOR1, 0);
|
||||||
SetState(WM_DECOR2, 0);
|
SetState(WM_DECOR2, 0);
|
||||||
SetState(WM_DECOR3, 0);
|
SetState(WM_DECOR3, 0);
|
||||||
@ -5158,7 +5181,7 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetState(WM_DECOR5, 0);
|
SetState(WM_DECOR5, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DECOR5:
|
case WM_DECOR5:
|
||||||
SetState(WM_DECOR1, 0);
|
SetState(WM_DECOR1, 0);
|
||||||
SetState(WM_DECOR2, 0);
|
SetState(WM_DECOR2, 0);
|
||||||
SetState(WM_DECOR3, 0);
|
SetState(WM_DECOR3, 0);
|
||||||
@ -5166,85 +5189,85 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetState(WM_DECOR5, 1);
|
SetState(WM_DECOR5, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PHASE_SKILL1:
|
case WM_PHASE_SKILL1:
|
||||||
m_pDecor->SetSkill(0);
|
m_pDecor->SetSkill(0);
|
||||||
SetState(WM_PHASE_SKILL1, true);
|
SetState(WM_PHASE_SKILL1, true);
|
||||||
SetState(WM_PHASE_SKILL2, false);
|
SetState(WM_PHASE_SKILL2, false);
|
||||||
break;
|
break;
|
||||||
case WM_PHASE_SKILL2:
|
case WM_PHASE_SKILL2:
|
||||||
m_pDecor->SetSkill(1);
|
m_pDecor->SetSkill(1);
|
||||||
SetState(WM_PHASE_SKILL1, false);
|
SetState(WM_PHASE_SKILL1, false);
|
||||||
SetState(WM_PHASE_SKILL2, true);
|
SetState(WM_PHASE_SKILL2, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_BUTTON0:
|
case WM_BUTTON0:
|
||||||
case WM_BUTTON1:
|
case WM_BUTTON1:
|
||||||
case WM_BUTTON2:
|
case WM_BUTTON2:
|
||||||
case WM_BUTTON3:
|
case WM_BUTTON3:
|
||||||
case WM_BUTTON4:
|
case WM_BUTTON4:
|
||||||
case WM_BUTTON5:
|
case WM_BUTTON5:
|
||||||
case WM_BUTTON6:
|
case WM_BUTTON6:
|
||||||
case WM_BUTTON7:
|
case WM_BUTTON7:
|
||||||
case WM_BUTTON8:
|
case WM_BUTTON8:
|
||||||
case WM_BUTTON9:
|
case WM_BUTTON9:
|
||||||
case WM_BUTTON10:
|
case WM_BUTTON10:
|
||||||
case WM_BUTTON11:
|
case WM_BUTTON11:
|
||||||
case WM_BUTTON12:
|
case WM_BUTTON12:
|
||||||
case WM_BUTTON13:
|
case WM_BUTTON13:
|
||||||
case WM_BUTTON14:
|
case WM_BUTTON14:
|
||||||
case WM_BUTTON15:
|
case WM_BUTTON15:
|
||||||
case WM_BUTTON16:
|
case WM_BUTTON16:
|
||||||
case WM_BUTTON17:
|
case WM_BUTTON17:
|
||||||
case WM_BUTTON18:
|
case WM_BUTTON18:
|
||||||
case WM_BUTTON19:
|
case WM_BUTTON19:
|
||||||
case WM_BUTTON20:
|
case WM_BUTTON20:
|
||||||
case WM_BUTTON21:
|
case WM_BUTTON21:
|
||||||
case WM_BUTTON22:
|
case WM_BUTTON22:
|
||||||
case WM_BUTTON23:
|
case WM_BUTTON23:
|
||||||
case WM_BUTTON24:
|
case WM_BUTTON24:
|
||||||
case WM_BUTTON25:
|
case WM_BUTTON25:
|
||||||
case WM_BUTTON26:
|
case WM_BUTTON26:
|
||||||
case WM_BUTTON27:
|
case WM_BUTTON27:
|
||||||
case WM_BUTTON28:
|
case WM_BUTTON28:
|
||||||
case WM_BUTTON29:
|
case WM_BUTTON29:
|
||||||
case WM_BUTTON30:
|
case WM_BUTTON30:
|
||||||
case WM_BUTTON31:
|
case WM_BUTTON31:
|
||||||
case WM_BUTTON32:
|
case WM_BUTTON32:
|
||||||
case WM_BUTTON33:
|
case WM_BUTTON33:
|
||||||
case WM_BUTTON34:
|
case WM_BUTTON34:
|
||||||
case WM_BUTTON35:
|
case WM_BUTTON35:
|
||||||
case WM_BUTTON36:
|
case WM_BUTTON36:
|
||||||
case WM_BUTTON37:
|
case WM_BUTTON37:
|
||||||
case WM_BUTTON38:
|
case WM_BUTTON38:
|
||||||
case WM_BUTTON39:
|
case WM_BUTTON39:
|
||||||
ChangeButtons(message);
|
ChangeButtons(event->user.code);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_READ0:
|
case WM_READ0:
|
||||||
case WM_READ1:
|
case WM_READ1:
|
||||||
case WM_READ2:
|
case WM_READ2:
|
||||||
case WM_READ3:
|
case WM_READ3:
|
||||||
case WM_READ4:
|
case WM_READ4:
|
||||||
case WM_READ5:
|
case WM_READ5:
|
||||||
case WM_READ6:
|
case WM_READ6:
|
||||||
case WM_READ7:
|
case WM_READ7:
|
||||||
case WM_READ8:
|
case WM_READ8:
|
||||||
case WM_READ9:
|
case WM_READ9:
|
||||||
Read(message);
|
Read(event->user.code);
|
||||||
ChangePhase(WM_PHASE_PLAY); // joue
|
ChangePhase(WM_PHASE_PLAY); // joue
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_WRITE0:
|
case WM_WRITE0:
|
||||||
case WM_WRITE1:
|
case WM_WRITE1:
|
||||||
case WM_WRITE2:
|
case WM_WRITE2:
|
||||||
case WM_WRITE3:
|
case WM_WRITE3:
|
||||||
case WM_WRITE4:
|
case WM_WRITE4:
|
||||||
case WM_WRITE5:
|
case WM_WRITE5:
|
||||||
case WM_WRITE6:
|
case WM_WRITE6:
|
||||||
case WM_WRITE7:
|
case WM_WRITE7:
|
||||||
case WM_WRITE8:
|
case WM_WRITE8:
|
||||||
case WM_WRITE9:
|
case WM_WRITE9:
|
||||||
Write(message);
|
Write(event->user.code);
|
||||||
if ( m_phase == WM_PHASE_WRITEp )
|
if ( m_phase == WM_PHASE_WRITEp )
|
||||||
{
|
{
|
||||||
ChangePhase(WM_PHASE_PLAY); // joue
|
ChangePhase(WM_PHASE_PLAY); // joue
|
||||||
@ -5255,11 +5278,12 @@ bool CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOVIE:
|
case WM_MOVIE:
|
||||||
StartMovie("movie\\essai.avi");
|
StartMovie("movie\\essai.avi");
|
||||||
ChangePhase(WM_PHASE_INIT);
|
ChangePhase(WM_PHASE_INIT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -5319,3 +5343,16 @@ void CEvent::IntroStep()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEvent::PushUserEvent (int code)
|
||||||
|
{
|
||||||
|
SDL_Event event;
|
||||||
|
|
||||||
|
event.type = SDL_USEREVENT;
|
||||||
|
event.user.code = code;
|
||||||
|
event.user.data1 = nullptr;
|
||||||
|
event.user.data2 = nullptr;
|
||||||
|
|
||||||
|
SDL_PushEvent (&event);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
35
event.h
35
event.h
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "jauge.h"
|
||||||
|
#include "menu.h"
|
||||||
|
|
||||||
|
class CMovie;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -77,13 +82,13 @@ public:
|
|||||||
void SetMenu(int button, int menu);
|
void SetMenu(int button, int menu);
|
||||||
|
|
||||||
bool DrawButtons();
|
bool DrawButtons();
|
||||||
int MousePosToSprite(POINT pos);
|
MouseSprites MousePosToSprite(POINT pos);
|
||||||
void MouseSprite(POINT pos);
|
void MouseSprite(POINT pos);
|
||||||
void WaitMouse(bool bWait);
|
void WaitMouse(bool bWait);
|
||||||
void HideMouse(bool bHide);
|
void HideMouse(bool bHide);
|
||||||
POINT GetLastMousePos();
|
POINT GetLastMousePos();
|
||||||
bool TreatEvent(UINT message, WPARAM wParam, LPARAM lParam);
|
bool TreatEvent(const SDL_Event *event);
|
||||||
bool TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam);
|
bool TreatEventBase(const SDL_Event *event);
|
||||||
|
|
||||||
void DecorAutoShift(POINT pos);
|
void DecorAutoShift(POINT pos);
|
||||||
|
|
||||||
@ -91,8 +96,6 @@ public:
|
|||||||
void StopMovie();
|
void StopMovie();
|
||||||
bool IsMovie();
|
bool IsMovie();
|
||||||
|
|
||||||
bool FlipObject();
|
|
||||||
|
|
||||||
void Read(int message);
|
void Read(int message);
|
||||||
void Write(int message);
|
void Write(int message);
|
||||||
|
|
||||||
@ -106,24 +109,27 @@ public:
|
|||||||
|
|
||||||
void IntroStep();
|
void IntroStep();
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void PushUserEvent (int code);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void DrawTextCenter(int res, int x, int y, int font=0);
|
void DrawTextCenter(int res, int x, int y, int font=0);
|
||||||
bool CreateButtons();
|
bool CreateButtons();
|
||||||
bool EventButtons(UINT message, WPARAM wParam, LPARAM lParam);
|
bool EventButtons(const SDL_Event &event, POINT pos);
|
||||||
bool MouseOnButton(POINT pos);
|
bool MouseOnButton(POINT pos);
|
||||||
int SearchPhase(UINT phase);
|
int SearchPhase(UINT phase);
|
||||||
void DecorShift(int dx, int dy);
|
void DecorShift(int dx, int dy);
|
||||||
|
|
||||||
bool PlayDown(POINT pos, int fwKeys);
|
bool PlayDown(POINT pos, const SDL_Event &event);
|
||||||
bool PlayMove(POINT pos, int fwKeys);
|
bool PlayMove(POINT pos, Uint16 mod);
|
||||||
bool PlayUp(POINT pos, int fwKeys);
|
bool PlayUp(POINT pos, Uint16 mod);
|
||||||
void ChangeButtons(int message);
|
void ChangeButtons(int message);
|
||||||
|
|
||||||
void BuildFloor(POINT cel, int insIcon);
|
void BuildFloor(POINT cel, int insIcon);
|
||||||
void BuildWater(POINT cel, int insIcon);
|
void BuildWater(POINT cel, int insIcon);
|
||||||
bool BuildDown(POINT pos, int fwKeys, bool bMix=true);
|
bool BuildDown(POINT pos, Uint16 mod, bool bMix=true);
|
||||||
bool BuildMove(POINT pos, int fwKeys);
|
bool BuildMove(POINT pos, Uint16 mod, const SDL_Event &event);
|
||||||
bool BuildUp(POINT pos, int fwKeys);
|
bool BuildUp(POINT pos);
|
||||||
|
|
||||||
void PrivateLibelle();
|
void PrivateLibelle();
|
||||||
bool ReadLibelle(int world, bool bSchool, bool bHelp);
|
bool ReadLibelle(int world, bool bSchool, bool bHelp);
|
||||||
@ -172,14 +178,13 @@ protected:
|
|||||||
int m_menuPerso;
|
int m_menuPerso;
|
||||||
POINT m_menuCel;
|
POINT m_menuCel;
|
||||||
POINT m_oldMousePos;
|
POINT m_oldMousePos;
|
||||||
bool m_bMousePress;
|
|
||||||
bool m_bMouseDown;
|
bool m_bMouseDown;
|
||||||
bool m_bHili;
|
bool m_bHili;
|
||||||
int m_fileWorld[10];
|
int m_fileWorld[10];
|
||||||
int m_fileTime[10];
|
int m_fileTime[10];
|
||||||
POINT m_posToolTips;
|
POINT m_posToolTips;
|
||||||
char m_textToolTips[50];
|
char m_textToolTips[50];
|
||||||
int m_mouseSprite;
|
MouseSprites m_mouseSprite;
|
||||||
bool m_bFillMouse;
|
bool m_bFillMouse;
|
||||||
bool m_bWaitMouse;
|
bool m_bWaitMouse;
|
||||||
bool m_bHideMouse;
|
bool m_bHideMouse;
|
||||||
@ -211,7 +216,7 @@ protected:
|
|||||||
size_t m_demoIndex;
|
size_t m_demoIndex;
|
||||||
size_t m_demoEnd;
|
size_t m_demoEnd;
|
||||||
int m_demoNumber;
|
int m_demoNumber;
|
||||||
bool m_bCtrlDown;
|
Uint16 m_keymod;
|
||||||
POINT m_debugPos;
|
POINT m_debugPos;
|
||||||
int m_introTime;
|
int m_introTime;
|
||||||
};
|
};
|
||||||
|
33
menu.cpp
33
menu.cpp
@ -13,6 +13,7 @@
|
|||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
#include "event.h"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
@ -346,27 +347,39 @@ bool CMenu::IsExist()
|
|||||||
|
|
||||||
// Traitement d'un événement.
|
// Traitement d'un événement.
|
||||||
|
|
||||||
bool CMenu::TreatEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
bool CMenu::TreatEvent(const SDL_Event &event)
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
|
|
||||||
if ( m_nbButtons == 0 ) return false;
|
if ( m_nbButtons == 0 ) return false;
|
||||||
|
|
||||||
pos = ConvLongToPos(lParam);
|
//pos = ConvLongToPos(lParam);
|
||||||
|
|
||||||
switch( message )
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case WM_LBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case WM_RBUTTONDOWN:
|
if ( event.button.button != SDL_BUTTON_LEFT
|
||||||
|
&& event.button.button != SDL_BUTTON_RIGHT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pos.x = event.button.x;
|
||||||
|
pos.y = event.button.y;
|
||||||
if ( MouseDown(pos) ) return true;
|
if ( MouseDown(pos) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case SDL_MOUSEMOTION:
|
||||||
|
pos.x = event.motion.x;
|
||||||
|
pos.y = event.motion.y;
|
||||||
if ( MouseMove(pos) ) return true;
|
if ( MouseMove(pos) ) return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
case WM_RBUTTONUP:
|
if ( event.button.button != SDL_BUTTON_LEFT
|
||||||
|
&& event.button.button != SDL_BUTTON_RIGHT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pos.x = event.button.x;
|
||||||
|
pos.y = event.button.y;
|
||||||
if ( MouseUp(pos) ) return true;
|
if ( MouseUp(pos) ) return true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -431,7 +444,7 @@ void CMenu::Message()
|
|||||||
{
|
{
|
||||||
if ( m_selRank != -1 )
|
if ( m_selRank != -1 )
|
||||||
{
|
{
|
||||||
PostMessage(m_hWnd, WM_BUTTON0+m_selRank, 0, 0);
|
CEvent::PushUserEvent (WM_BUTTON0 + m_selRank);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
menu.h
2
menu.h
@ -22,7 +22,7 @@ public:
|
|||||||
bool IsExist();
|
bool IsExist();
|
||||||
void Message();
|
void Message();
|
||||||
|
|
||||||
bool TreatEvent(UINT message, WPARAM wParam, LPARAM lParam);
|
bool TreatEvent(const SDL_Event &event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int Detect(POINT pos);
|
int Detect(POINT pos);
|
||||||
|
29
misc.cpp
29
misc.cpp
@ -12,7 +12,6 @@
|
|||||||
// Variables globales
|
// Variables globales
|
||||||
|
|
||||||
HINSTANCE g_hInstance;
|
HINSTANCE g_hInstance;
|
||||||
int g_lastSprite = 0;
|
|
||||||
extern bool g_bFullScreen; // false si mode de test
|
extern bool g_bFullScreen; // false si mode de test
|
||||||
extern int g_mouseType;
|
extern int g_mouseType;
|
||||||
extern char g_CDPath[MAX_PATH];
|
extern char g_CDPath[MAX_PATH];
|
||||||
@ -44,34 +43,6 @@ void LoadString(UINT nID, char *pBuffer, int lgBuffer)
|
|||||||
LoadString(g_hInstance, nID, pBuffer, lgBuffer);
|
LoadString(g_hInstance, nID, pBuffer, lgBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change le lutin de la souris.
|
|
||||||
|
|
||||||
void ChangeSprite(int sprite)
|
|
||||||
{
|
|
||||||
HCURSOR hCursor = nullptr;
|
|
||||||
|
|
||||||
if ( g_mouseType == MOUSETYPEGRA ) return;
|
|
||||||
if ( g_lastSprite == sprite ) return;
|
|
||||||
|
|
||||||
if ( sprite == SPRITE_ARROW ) hCursor = LoadCursor(g_hInstance, "IDC_ARROW");
|
|
||||||
if ( sprite == SPRITE_POINTER ) hCursor = LoadCursor(g_hInstance, "IDC_POINTER");
|
|
||||||
if ( sprite == SPRITE_MAP ) hCursor = LoadCursor(g_hInstance, "IDC_MAP");
|
|
||||||
if ( sprite == SPRITE_ARROWU ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWU");
|
|
||||||
if ( sprite == SPRITE_ARROWD ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWD");
|
|
||||||
if ( sprite == SPRITE_ARROWL ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWL");
|
|
||||||
if ( sprite == SPRITE_ARROWR ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWR");
|
|
||||||
if ( sprite == SPRITE_ARROWUL ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWUL");
|
|
||||||
if ( sprite == SPRITE_ARROWUR ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWUR");
|
|
||||||
if ( sprite == SPRITE_ARROWDL ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWDL");
|
|
||||||
if ( sprite == SPRITE_ARROWDR ) hCursor = LoadCursor(g_hInstance, "IDC_ARROWDR");
|
|
||||||
if ( sprite == SPRITE_WAIT ) hCursor = LoadCursor(g_hInstance, "IDC_WAIT");
|
|
||||||
if ( sprite == SPRITE_EMPTY ) hCursor = LoadCursor(g_hInstance, "IDC_EMPTY");
|
|
||||||
if ( sprite == SPRITE_FILL ) hCursor = LoadCursor(g_hInstance, "IDC_FILL");
|
|
||||||
|
|
||||||
g_lastSprite = sprite;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Conversion de la position de la souris.
|
// Conversion de la position de la souris.
|
||||||
|
|
||||||
POINT ConvLongToPos(LPARAM lParam)
|
POINT ConvLongToPos(LPARAM lParam)
|
||||||
|
1
misc.h
1
misc.h
@ -6,7 +6,6 @@
|
|||||||
extern void InitHInstance(HINSTANCE hInstance);
|
extern void InitHInstance(HINSTANCE hInstance);
|
||||||
extern void OutputDebug(char *pMessage);
|
extern void OutputDebug(char *pMessage);
|
||||||
extern void LoadString(UINT nID, char *pBuffer, int lgBuffer);
|
extern void LoadString(UINT nID, char *pBuffer, int lgBuffer);
|
||||||
extern void ChangeSprite(int sprite);
|
|
||||||
|
|
||||||
extern POINT ConvLongToPos(LPARAM lParam);
|
extern POINT ConvLongToPos(LPARAM lParam);
|
||||||
|
|
||||||
|
372
pixmap.cpp
372
pixmap.cpp
@ -32,7 +32,6 @@ CPixmap::CPixmap()
|
|||||||
m_bPalette = true;
|
m_bPalette = true;
|
||||||
|
|
||||||
m_mouseSprite = SPRITE_WAIT;
|
m_mouseSprite = SPRITE_WAIT;
|
||||||
MouseHotSpot();
|
|
||||||
m_mousePos.x = LXIMAGE/2;
|
m_mousePos.x = LXIMAGE/2;
|
||||||
m_mousePos.y = LYIMAGE/2;
|
m_mousePos.y = LYIMAGE/2;
|
||||||
m_mouseBackPos = m_mousePos;
|
m_mouseBackPos = m_mousePos;
|
||||||
@ -53,7 +52,9 @@ CPixmap::CPixmap()
|
|||||||
|
|
||||||
// initialize special effects structure
|
// initialize special effects structure
|
||||||
ZeroMemory(&m_DDbltfx, sizeof(m_DDbltfx));
|
ZeroMemory(&m_DDbltfx, sizeof(m_DDbltfx));
|
||||||
m_DDbltfx.dwSize = sizeof(m_DDbltfx);
|
m_DDbltfx.dwSize = sizeof(m_DDbltfx);
|
||||||
|
|
||||||
|
m_lpCurrentCursor = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructeur.
|
// Destructeur.
|
||||||
@ -966,7 +967,6 @@ bool CPixmap::DrawImage(int chDst, int channel, RECT rect, int mode)
|
|||||||
|
|
||||||
if ( channel == CHBACK )
|
if ( channel == CHBACK )
|
||||||
{
|
{
|
||||||
MouseBackSave(); // sauve ce qui sera sous la souris
|
|
||||||
m_bBackDisplayed = false;
|
m_bBackDisplayed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1098,12 +1098,6 @@ void CPixmap::SetMousePosSprite(POINT pos, int sprite, bool bDemoPlay)
|
|||||||
|
|
||||||
m_mousePos = pos;
|
m_mousePos = pos;
|
||||||
m_mouseSprite = sprite;
|
m_mouseSprite = sprite;
|
||||||
MouseHotSpot();
|
|
||||||
|
|
||||||
if ( !bDemoPlay )
|
|
||||||
{
|
|
||||||
MouseUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Positionne la souris.
|
// Positionne la souris.
|
||||||
@ -1114,11 +1108,6 @@ void CPixmap::SetMousePos(POINT pos, bool bDemoPlay)
|
|||||||
m_mousePos.y == pos.y ) return;
|
m_mousePos.y == pos.y ) return;
|
||||||
|
|
||||||
m_mousePos = pos;
|
m_mousePos = pos;
|
||||||
|
|
||||||
if ( !bDemoPlay )
|
|
||||||
{
|
|
||||||
MouseUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change le lutin de la souris.
|
// Change le lutin de la souris.
|
||||||
@ -1128,12 +1117,6 @@ void CPixmap::SetMouseSprite(int sprite, bool bDemoPlay)
|
|||||||
if ( m_mouseSprite == sprite ) return;
|
if ( m_mouseSprite == sprite ) return;
|
||||||
|
|
||||||
m_mouseSprite = sprite;
|
m_mouseSprite = sprite;
|
||||||
MouseHotSpot();
|
|
||||||
|
|
||||||
if ( !bDemoPlay )
|
|
||||||
{
|
|
||||||
MouseUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SetCursor (m_lpSDLCursors[sprite - 1]);
|
SDL_SetCursor (m_lpSDLCursors[sprite - 1]);
|
||||||
}
|
}
|
||||||
@ -1145,90 +1128,6 @@ void CPixmap::MouseShow(bool bShow)
|
|||||||
SDL_ShowCursor (bShow);
|
SDL_ShowCursor (bShow);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Met à jour le dessin de la souris.
|
|
||||||
|
|
||||||
void CPixmap::MouseUpdate()
|
|
||||||
{
|
|
||||||
RECT oldRect, newRect, rcRect;
|
|
||||||
|
|
||||||
if ( m_lpDDSurface[CHBLUPI] == NULL ) return;
|
|
||||||
if ( m_mouseType != MOUSETYPEGRA ) return;
|
|
||||||
if ( m_mouseSprite == SPRITE_EMPTY ) return;
|
|
||||||
|
|
||||||
oldRect.left = m_mouseBackPos.x;
|
|
||||||
oldRect.top = m_mouseBackPos.y;
|
|
||||||
oldRect.right = m_mouseBackPos.x + DIMBLUPIX;
|
|
||||||
oldRect.bottom = m_mouseBackPos.y + DIMBLUPIY;
|
|
||||||
|
|
||||||
newRect.left = m_mousePos.x - m_mouseHotSpot.x;
|
|
||||||
newRect.top = m_mousePos.y - m_mouseHotSpot.y;
|
|
||||||
newRect.right = newRect.left + DIMBLUPIX;
|
|
||||||
newRect.bottom = newRect.top + DIMBLUPIY;
|
|
||||||
|
|
||||||
MouseBackRestore(); // enlève la souris dans m_lpDDSBack
|
|
||||||
MouseBackDraw(); // dessine la souris dans m_lpDDSBack
|
|
||||||
|
|
||||||
if ( m_bBackDisplayed )
|
|
||||||
{
|
|
||||||
if ( IntersectRect(&rcRect, &oldRect, &newRect) )
|
|
||||||
{
|
|
||||||
UnionRect(&rcRect, &oldRect, &newRect);
|
|
||||||
MouseQuickDraw(rcRect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MouseQuickDraw(oldRect);
|
|
||||||
MouseQuickDraw(newRect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dessine rapidement la souris dans l'écran.
|
|
||||||
// Il s'agit en fait de dessiner un petit morceau rectangulaire
|
|
||||||
// de m_lpDDSBack dans l'écran.
|
|
||||||
|
|
||||||
bool CPixmap::MouseQuickDraw(RECT rect)
|
|
||||||
{
|
|
||||||
HRESULT ddrval;
|
|
||||||
RECT DestRect;
|
|
||||||
|
|
||||||
if ( rect.left < 0 ) rect.left = 0;
|
|
||||||
if ( rect.right > LXIMAGE ) rect.right = LXIMAGE;
|
|
||||||
if ( rect.top < 0 ) rect.top = 0;
|
|
||||||
if ( rect.bottom > LYIMAGE ) rect.bottom = LYIMAGE;
|
|
||||||
|
|
||||||
// Get screen coordinates of client window for blit
|
|
||||||
DestRect = rect;
|
|
||||||
ClientToScreen(m_hWnd, (LPPOINT)&DestRect);
|
|
||||||
ClientToScreen(m_hWnd, (LPPOINT)&DestRect+1);
|
|
||||||
|
|
||||||
// do the blit from back surface
|
|
||||||
ddrval = m_lpDDSPrimary->Blt
|
|
||||||
(
|
|
||||||
&DestRect, // destination rect
|
|
||||||
m_lpDDSBack,
|
|
||||||
&rect, // source rect
|
|
||||||
DDBLT_WAIT,
|
|
||||||
&m_DDbltfx
|
|
||||||
);
|
|
||||||
SDL_Rect srcRect, dstRect;
|
|
||||||
srcRect.x =rect.left;
|
|
||||||
srcRect.y =rect.top;
|
|
||||||
srcRect.w =rect.right - rect.left;
|
|
||||||
srcRect.h =rect.bottom - rect.top;
|
|
||||||
dstRect.x = DestRect.left;
|
|
||||||
dstRect.y = DestRect.top;
|
|
||||||
dstRect.w = DestRect.right - DestRect.left;
|
|
||||||
dstRect.h = DestRect.bottom - DestRect.top;
|
|
||||||
//SDL_BlitSurface (m_lpSDLPrimary, &srcRect, m_lpSDLBack, &dstRect);
|
|
||||||
if ( ddrval == DDERR_SURFACELOST )
|
|
||||||
{
|
|
||||||
ddrval = RestoreAll();
|
|
||||||
}
|
|
||||||
if ( ddrval != DD_OK ) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Invalide la copie sous la souris.
|
// Invalide la copie sous la souris.
|
||||||
|
|
||||||
void CPixmap::MouseInvalidate()
|
void CPixmap::MouseInvalidate()
|
||||||
@ -1236,223 +1135,6 @@ void CPixmap::MouseInvalidate()
|
|||||||
m_bMouseBack = false;
|
m_bMouseBack = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enlève la souris dans m_lpDDSBack.
|
|
||||||
|
|
||||||
void CPixmap::MouseBackClear()
|
|
||||||
{
|
|
||||||
if ( m_mouseType != MOUSETYPEGRA ) return;
|
|
||||||
MouseBackRestore(); // enlève la souris dans m_lpDDSBack
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dessine la souris dans m_lpDDSBack.
|
|
||||||
|
|
||||||
void CPixmap::MouseBackDraw()
|
|
||||||
{
|
|
||||||
POINT dst;
|
|
||||||
RECT rcRect;
|
|
||||||
|
|
||||||
if ( m_lpDDSurface[CHBLUPI] == NULL ) return;
|
|
||||||
if ( m_mouseType != MOUSETYPEGRA ) return;
|
|
||||||
if ( m_mouseSprite == SPRITE_EMPTY ) return;
|
|
||||||
|
|
||||||
MouseBackSave(); // sauve ce qui sera sous la souris
|
|
||||||
|
|
||||||
dst.x = m_mousePos.x - m_mouseHotSpot.x;
|
|
||||||
dst.y = m_mousePos.y - m_mouseHotSpot.y;
|
|
||||||
rcRect = MouseRectSprite();
|
|
||||||
|
|
||||||
if ( dst.x < 0 )
|
|
||||||
{
|
|
||||||
rcRect.left -= dst.x;
|
|
||||||
dst.x = 0;
|
|
||||||
}
|
|
||||||
if ( dst.x+DIMBLUPIX > LXIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.right -= (dst.x+DIMBLUPIX)-LXIMAGE;
|
|
||||||
}
|
|
||||||
if ( dst.y < 0 )
|
|
||||||
{
|
|
||||||
rcRect.top -= dst.y;
|
|
||||||
dst.y = 0;
|
|
||||||
}
|
|
||||||
if ( dst.y+DIMBLUPIY > LYIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.bottom -= (dst.y+DIMBLUPIY)-LYIMAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dessine le lutin dans m_lpDDSBack.
|
|
||||||
BltFast(m_lpDDSBack, nullptr, CHBLUPI, dst, rcRect, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sauve le fond sous la souris.
|
|
||||||
// m_lpDDSMouse <- m_lpDDSBack
|
|
||||||
|
|
||||||
void CPixmap::MouseBackSave()
|
|
||||||
{
|
|
||||||
HRESULT ddrval;
|
|
||||||
POINT dst;
|
|
||||||
RECT rcRect;
|
|
||||||
|
|
||||||
if ( m_lpDDSurface[CHBLUPI] == NULL ) return;
|
|
||||||
if ( m_mouseType != MOUSETYPEGRA ) return;
|
|
||||||
if ( m_mouseSprite == SPRITE_EMPTY ) return;
|
|
||||||
|
|
||||||
m_mouseBackPos.x = m_mousePos.x - m_mouseHotSpot.x;
|
|
||||||
m_mouseBackPos.y = m_mousePos.y - m_mouseHotSpot.y;
|
|
||||||
m_bMouseBack = true;
|
|
||||||
|
|
||||||
dst.x = 0;
|
|
||||||
dst.y = 0;
|
|
||||||
|
|
||||||
rcRect.left = m_mouseBackPos.x;
|
|
||||||
rcRect.top = m_mouseBackPos.y;
|
|
||||||
rcRect.right = m_mouseBackPos.x + DIMBLUPIX;
|
|
||||||
rcRect.bottom = m_mouseBackPos.y + DIMBLUPIY;
|
|
||||||
|
|
||||||
if ( rcRect.left < 0 )
|
|
||||||
{
|
|
||||||
dst.x -= rcRect.left;
|
|
||||||
rcRect.left = 0;
|
|
||||||
}
|
|
||||||
if ( rcRect.right > LXIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.right = LXIMAGE;
|
|
||||||
}
|
|
||||||
if ( rcRect.top < 0 )
|
|
||||||
{
|
|
||||||
dst.y -= rcRect.top;
|
|
||||||
rcRect.top = 0;
|
|
||||||
}
|
|
||||||
if ( rcRect.bottom > LYIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.bottom = LYIMAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
while( true )
|
|
||||||
{
|
|
||||||
ddrval = m_lpDDSMouse->BltFast(dst.x, dst.y,
|
|
||||||
m_lpDDSBack,
|
|
||||||
&rcRect, DDBLTFAST_NOCOLORKEY);
|
|
||||||
SDL_Rect srcRect, dstRect;
|
|
||||||
srcRect.x = rcRect.left;
|
|
||||||
srcRect.y = rcRect.top;
|
|
||||||
srcRect.w = rcRect.right - rcRect.left;
|
|
||||||
srcRect.h = rcRect.bottom - rcRect.top;
|
|
||||||
dstRect = srcRect;
|
|
||||||
dstRect.x = dst.x;
|
|
||||||
dstRect.y = dst.y;
|
|
||||||
if ( ddrval == DD_OK ) break;
|
|
||||||
|
|
||||||
if ( ddrval == DDERR_SURFACELOST )
|
|
||||||
{
|
|
||||||
ddrval = RestoreAll();
|
|
||||||
if ( ddrval != DD_OK ) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ddrval != DDERR_WASSTILLDRAWING ) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restitue le fond sous la souris.
|
|
||||||
// m_lpDDSBack <- m_lpDDSMouse
|
|
||||||
|
|
||||||
void CPixmap::MouseBackRestore()
|
|
||||||
{
|
|
||||||
HRESULT ddrval;
|
|
||||||
POINT dst;
|
|
||||||
RECT rcRect;
|
|
||||||
|
|
||||||
if ( m_lpDDSurface[CHBLUPI] == NULL ) return;
|
|
||||||
if ( !m_bMouseBack ) return;
|
|
||||||
|
|
||||||
dst.x = m_mouseBackPos.x;
|
|
||||||
dst.y = m_mouseBackPos.y;
|
|
||||||
|
|
||||||
rcRect.left = 0;
|
|
||||||
rcRect.top = 0;
|
|
||||||
rcRect.right = DIMBLUPIX;
|
|
||||||
rcRect.bottom = DIMBLUPIY;
|
|
||||||
|
|
||||||
if ( dst.x < 0 )
|
|
||||||
{
|
|
||||||
rcRect.left -= dst.x;
|
|
||||||
dst.x = 0;
|
|
||||||
}
|
|
||||||
if ( dst.x+DIMBLUPIX > LXIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.right -= (dst.x+DIMBLUPIX)-LXIMAGE;
|
|
||||||
}
|
|
||||||
if ( dst.y < 0 )
|
|
||||||
{
|
|
||||||
rcRect.top -= dst.y;
|
|
||||||
dst.y = 0;
|
|
||||||
}
|
|
||||||
if ( dst.y+DIMBLUPIY > LYIMAGE )
|
|
||||||
{
|
|
||||||
rcRect.bottom -= (dst.y+DIMBLUPIY)-LYIMAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
while( true )
|
|
||||||
{
|
|
||||||
ddrval = m_lpDDSBack->BltFast(dst.x, dst.y,
|
|
||||||
m_lpDDSMouse,
|
|
||||||
&rcRect, DDBLTFAST_NOCOLORKEY);
|
|
||||||
SDL_Rect srcRect, dstRect;
|
|
||||||
srcRect.x = rcRect.left;
|
|
||||||
srcRect.y = rcRect.top;
|
|
||||||
srcRect.w = rcRect.right - rcRect.left;
|
|
||||||
srcRect.h = rcRect.bottom - rcRect.top;
|
|
||||||
dstRect = srcRect;
|
|
||||||
dstRect.x = dst.x;
|
|
||||||
dstRect.y = dst.y;
|
|
||||||
if ( ddrval == DD_OK ) break;
|
|
||||||
|
|
||||||
if ( ddrval == DDERR_SURFACELOST )
|
|
||||||
{
|
|
||||||
ddrval = RestoreAll();
|
|
||||||
if ( ddrval != DD_OK ) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ddrval != DDERR_WASSTILLDRAWING ) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Affiche le contenu de m_lpDDSMouse dans le
|
|
||||||
// coin sup/gauche.
|
|
||||||
|
|
||||||
void CPixmap::MouseBackDebug()
|
|
||||||
{
|
|
||||||
HRESULT ddrval;
|
|
||||||
RECT DestRect, MapRect;
|
|
||||||
|
|
||||||
// Get screen coordinates of client window for blit
|
|
||||||
GetClientRect(m_hWnd, &DestRect);
|
|
||||||
ClientToScreen(m_hWnd, (LPPOINT)&DestRect);
|
|
||||||
ClientToScreen(m_hWnd, (LPPOINT)&DestRect+1);
|
|
||||||
|
|
||||||
MapRect.left = 0;
|
|
||||||
MapRect.top = 0;
|
|
||||||
MapRect.right = DIMBLUPIX;
|
|
||||||
MapRect.bottom = DIMBLUPIY;
|
|
||||||
|
|
||||||
DestRect.right = DestRect.left + DIMBLUPIX;
|
|
||||||
DestRect.bottom = DestRect.top + DIMBLUPIY;
|
|
||||||
|
|
||||||
// do the blit from back surface
|
|
||||||
ddrval = m_lpDDSPrimary->Blt
|
|
||||||
(
|
|
||||||
&DestRect, // destination rect
|
|
||||||
m_lpDDSMouse,
|
|
||||||
&MapRect, // source rect
|
|
||||||
DDBLT_WAIT,
|
|
||||||
&m_DDbltfx
|
|
||||||
);
|
|
||||||
if ( ddrval == DDERR_SURFACELOST )
|
|
||||||
{
|
|
||||||
ddrval = RestoreAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retourne le rectangle correspondant au sprite
|
// Retourne le rectangle correspondant au sprite
|
||||||
// de la souris dans CHBLUPI.
|
// de la souris dans CHBLUPI.
|
||||||
|
|
||||||
@ -1486,45 +1168,6 @@ RECT CPixmap::MouseRectSprite()
|
|||||||
return rcRect;
|
return rcRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialise le hot spot selon le sprite en cours.
|
|
||||||
|
|
||||||
void CPixmap::MouseHotSpot()
|
|
||||||
{
|
|
||||||
int rank;
|
|
||||||
|
|
||||||
static int table_mouse_hotspot[MAXCURSORS * 2] =
|
|
||||||
{
|
|
||||||
30, 30, // SPRITE_ARROW
|
|
||||||
20, 15, // SPRITE_POINTER
|
|
||||||
31, 26, // SPRITE_MAP
|
|
||||||
25, 14, // SPRITE_ARROWU
|
|
||||||
24, 35, // SPRITE_ARROWD
|
|
||||||
15, 24, // SPRITE_ARROWL
|
|
||||||
35, 24, // SPRITE_ARROWR
|
|
||||||
18, 16, // SPRITE_ARROWUL
|
|
||||||
32, 18, // SPRITE_ARROWUR
|
|
||||||
17, 30, // SPRITE_ARROWDL
|
|
||||||
32, 32, // SPRITE_ARROWDR
|
|
||||||
30, 30, // SPRITE_WAIT
|
|
||||||
30, 30, // SPRITE_EMPTY
|
|
||||||
21, 51, // SPRITE_FILL
|
|
||||||
};
|
|
||||||
|
|
||||||
if ( m_mouseSprite >= SPRITE_ARROW &&
|
|
||||||
m_mouseSprite <= SPRITE_FILL )
|
|
||||||
{
|
|
||||||
rank = m_mouseSprite - SPRITE_ARROW; // rank <- 0..n
|
|
||||||
|
|
||||||
m_mouseHotSpot.x = table_mouse_hotspot[rank*2+0];
|
|
||||||
m_mouseHotSpot.y = table_mouse_hotspot[rank*2+1];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_mouseHotSpot.x = 0;
|
|
||||||
m_mouseHotSpot.y = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Point CPixmap::GetCursorHotSpot (int sprite)
|
SDL_Point CPixmap::GetCursorHotSpot (int sprite)
|
||||||
{
|
{
|
||||||
static const int hotspots[MAXCURSORS * 2] =
|
static const int hotspots[MAXCURSORS * 2] =
|
||||||
@ -1646,4 +1289,13 @@ void CPixmap::LoadCursors ()
|
|||||||
// FIXME: change cursor first value to 0
|
// FIXME: change cursor first value to 0
|
||||||
m_lpSDLCursors[sprite - 1] = SDL_CreateColorCursor (surface, hotspot.x, hotspot.y);
|
m_lpSDLCursors[sprite - 1] = SDL_CreateColorCursor (surface, hotspot.x, hotspot.y);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPixmap::ChangeSprite (MouseSprites sprite)
|
||||||
|
{
|
||||||
|
if (m_lpCurrentCursor == m_lpSDLCursors[sprite - 1])
|
||||||
|
return;
|
||||||
|
|
||||||
|
SDL_SetCursor (m_lpSDLCursors[sprite - 1]);
|
||||||
|
m_lpCurrentCursor = m_lpSDLCursors[sprite - 1];
|
||||||
}
|
}
|
11
pixmap.h
11
pixmap.h
@ -55,9 +55,8 @@ public:
|
|||||||
void SetMouseSprite(int sprite, bool bDemoPlay);
|
void SetMouseSprite(int sprite, bool bDemoPlay);
|
||||||
void MouseShow(bool bShow);
|
void MouseShow(bool bShow);
|
||||||
void MouseInvalidate();
|
void MouseInvalidate();
|
||||||
void MouseBackClear();
|
|
||||||
void MouseBackDraw();
|
|
||||||
void LoadCursors ();
|
void LoadCursors ();
|
||||||
|
void ChangeSprite (MouseSprites sprite);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HRESULT RestoreAll();
|
HRESULT RestoreAll();
|
||||||
@ -65,13 +64,7 @@ protected:
|
|||||||
HRESULT BltFast(LPDIRECTDRAWSURFACE lpDD, SDL_Texture *lpSDL,
|
HRESULT BltFast(LPDIRECTDRAWSURFACE lpDD, SDL_Texture *lpSDL,
|
||||||
int channel, POINT dst, RECT rcRect, int mode);
|
int channel, POINT dst, RECT rcRect, int mode);
|
||||||
|
|
||||||
void MouseUpdate();
|
|
||||||
bool MouseQuickDraw(RECT rect);
|
|
||||||
void MouseBackSave();
|
|
||||||
void MouseBackRestore();
|
|
||||||
void MouseBackDebug();
|
|
||||||
RECT MouseRectSprite();
|
RECT MouseRectSprite();
|
||||||
void MouseHotSpot();
|
|
||||||
SDL_Point GetCursorHotSpot (int sprite);
|
SDL_Point GetCursorHotSpot (int sprite);
|
||||||
SDL_Rect GetCursorRect (int sprite);
|
SDL_Rect GetCursorRect (int sprite);
|
||||||
|
|
||||||
@ -86,7 +79,6 @@ protected:
|
|||||||
|
|
||||||
POINT m_mousePos;
|
POINT m_mousePos;
|
||||||
int m_mouseSprite;
|
int m_mouseSprite;
|
||||||
POINT m_mouseHotSpot;
|
|
||||||
POINT m_mouseBackPos;
|
POINT m_mouseBackPos;
|
||||||
bool m_bMouseBack;
|
bool m_bMouseBack;
|
||||||
bool m_bBackDisplayed;
|
bool m_bBackDisplayed;
|
||||||
@ -97,6 +89,7 @@ protected:
|
|||||||
LPDIRECTDRAWSURFACE m_lpDDSBack; // DirectDraw back surface
|
LPDIRECTDRAWSURFACE m_lpDDSBack; // DirectDraw back surface
|
||||||
SDL_Surface * m_lpSDLBack;
|
SDL_Surface * m_lpSDLBack;
|
||||||
LPDIRECTDRAWSURFACE m_lpDDSMouse; // DirectDraw back surface
|
LPDIRECTDRAWSURFACE m_lpDDSMouse; // DirectDraw back surface
|
||||||
|
SDL_Cursor * m_lpCurrentCursor;
|
||||||
SDL_Cursor * m_lpSDLCursors[MAXCURSORS];
|
SDL_Cursor * m_lpSDLCursors[MAXCURSORS];
|
||||||
SDL_Surface * m_lpSDLBlupi;
|
SDL_Surface * m_lpSDLBlupi;
|
||||||
LPDIRECTDRAWPALETTE m_lpDDPal; // the primary surface palette
|
LPDIRECTDRAWPALETTE m_lpDDPal; // the primary surface palette
|
||||||
|
Loading…
x
Reference in New Issue
Block a user