mirror of
https://github.com/blupi-games/planetblupi
synced 2024-12-30 10:15:36 +01:00
WIP: experiment a reinit (buggy)
This commit is contained in:
parent
190147015d
commit
979dacd151
109
src/blupi.cxx
109
src/blupi.cxx
@ -86,6 +86,9 @@ struct url_data {
|
||||
};
|
||||
#endif /* USE_CURL */
|
||||
|
||||
static int Create ();
|
||||
static void Release ();
|
||||
|
||||
template <typename Out>
|
||||
static void
|
||||
split (const std::string & s, char delim, Out result)
|
||||
@ -394,6 +397,18 @@ HandleEvent (const SDL_Event & event)
|
||||
{
|
||||
switch (event.user.code)
|
||||
{
|
||||
case EV_REINIT:
|
||||
Release ();
|
||||
|
||||
Display::getDisplay ().setDisplaySize (
|
||||
Display::getDisplay ().getLogicWidth (),
|
||||
Display::getDisplay ().getLogicHeight ());
|
||||
g_zoom = 2;
|
||||
g_bFullScreen = true;
|
||||
g_settingsOverload |= SETTING_ZOOM | SETTING_FULLSCREEN;
|
||||
Create ();
|
||||
break;
|
||||
|
||||
case EV_UPDATE:
|
||||
if (!g_pEvent->IsMovie ()) // pas de film en cours ?
|
||||
{
|
||||
@ -696,40 +711,11 @@ parseArgs (int argc, char * argv[], bool & exit)
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// Main initialization function.
|
||||
|
||||
static int
|
||||
DoInit (int argc, char * argv[], bool & exit)
|
||||
Create ()
|
||||
{
|
||||
int rc = parseArgs (argc, argv, exit);
|
||||
if (exit)
|
||||
return rc;
|
||||
|
||||
Point totalDim, iconDim;
|
||||
Rect rcRect;
|
||||
bool bOK;
|
||||
|
||||
bOK = ReadConfig (); // lit le fichier config.json
|
||||
|
||||
if (!bOK) // Something wrong with config.json file?
|
||||
{
|
||||
InitFail ("Game not correctly installed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
/* Fix laggy sounds on Windows by not using winmm driver. */
|
||||
SDL_setenv ("SDL_AUDIODRIVER", "directsound", true);
|
||||
#endif /* _WIN32 */
|
||||
|
||||
auto res = SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
|
||||
if (res < 0)
|
||||
{
|
||||
SDL_Log ("Unable to initialize SDL: %s", SDL_GetError ());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Display::getDisplay ().readDisplaySize ();
|
||||
|
||||
// Create a window.
|
||||
g_window = SDL_CreateWindow (
|
||||
@ -1015,13 +1001,64 @@ DoInit (int argc, char * argv[], bool & exit)
|
||||
g_pPixmap->LoadCursors ();
|
||||
g_pPixmap->ChangeSprite (SPRITE_WAIT);
|
||||
|
||||
g_updateThread = new std::thread (CheckForUpdates);
|
||||
if (zoom != g_zoom)
|
||||
g_pEvent->SetWindowSize (g_zoom);
|
||||
g_pEvent->SetFullScreen (g_bFullScreen);
|
||||
g_pEvent->ChangePhase (EV_PHASE_INTRO1);
|
||||
|
||||
g_bTermInit = true;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
Release ()
|
||||
{
|
||||
FinishObjects ();
|
||||
|
||||
if (g_renderer)
|
||||
SDL_DestroyRenderer (g_renderer);
|
||||
|
||||
if (g_window)
|
||||
SDL_DestroyWindow (g_window);
|
||||
}
|
||||
|
||||
// Main initialization function.
|
||||
|
||||
static int
|
||||
DoInit (int argc, char * argv[], bool & exit)
|
||||
{
|
||||
int rc = parseArgs (argc, argv, exit);
|
||||
if (exit)
|
||||
return rc;
|
||||
|
||||
bool bOK;
|
||||
|
||||
bOK = ReadConfig (); // lit le fichier config.json
|
||||
|
||||
if (!bOK) // Something wrong with config.json file?
|
||||
{
|
||||
InitFail ("Game not correctly installed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
/* Fix laggy sounds on Windows by not using winmm driver. */
|
||||
SDL_setenv ("SDL_AUDIODRIVER", "directsound", true);
|
||||
#endif /* _WIN32 */
|
||||
|
||||
auto res = SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
|
||||
if (res < 0)
|
||||
{
|
||||
SDL_Log ("Unable to initialize SDL: %s", SDL_GetError ());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Display::getDisplay ().readDisplaySize ();
|
||||
|
||||
Create ();
|
||||
|
||||
g_updateThread = new std::thread (CheckForUpdates);
|
||||
g_bTermInit = true;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
@ -1061,13 +1098,7 @@ main (int argc, char * argv[])
|
||||
}
|
||||
|
||||
SDL_RemoveTimer (updateTimer);
|
||||
FinishObjects ();
|
||||
|
||||
if (g_renderer)
|
||||
SDL_DestroyRenderer (g_renderer);
|
||||
|
||||
if (g_window)
|
||||
SDL_DestroyWindow (g_window);
|
||||
Release ();
|
||||
|
||||
SDL_Quit ();
|
||||
|
||||
|
@ -399,6 +399,7 @@ enum ShiftDirection {
|
||||
#define EV_UPDATE (EV_OFFSET+1)
|
||||
#define EV_WARPMOUSE (EV_OFFSET+2)
|
||||
#define EV_CHECKUPDATE (EV_OFFSET+3)
|
||||
#define EV_REINIT (EV_OFFSET+4)
|
||||
|
||||
#define EV_DECOR1 (EV_OFFSET+20)
|
||||
#define EV_DECOR2 (EV_OFFSET+21)
|
||||
|
@ -31,8 +31,14 @@ Display::readDisplaySize ()
|
||||
if (res < 0)
|
||||
return;
|
||||
|
||||
this->width = displayMode.w;
|
||||
this->height = displayMode.h;
|
||||
this->setDisplaySize (displayMode.w, displayMode.h);
|
||||
}
|
||||
|
||||
void
|
||||
Display::setDisplaySize (Sint32 width, Sint32 height)
|
||||
{
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
|
||||
if (this->width < this->getLogicWidth ())
|
||||
this->width = this->getLogicWidth ();
|
||||
|
@ -16,6 +16,7 @@ public:
|
||||
static Display & getDisplay ();
|
||||
|
||||
void readDisplaySize ();
|
||||
void setDisplaySize (Sint32 width, Sint32 height);
|
||||
Sint32 getWidth ();
|
||||
Sint32 getHeight ();
|
||||
Sint32 getLogicWidth ();
|
||||
|
@ -1752,8 +1752,16 @@ CEvent::SetFullScreen (bool bFullScreen, double prevScale)
|
||||
/* It seems that the fullscreen switching works better when the window
|
||||
* is at the top left corner of the current display.
|
||||
*/
|
||||
SDL_SetWindowPosition (
|
||||
g_window, displayBounds[displayIndex].x, displayBounds[displayIndex].y);
|
||||
//SDL_SetWindowPosition (
|
||||
// g_window, displayBounds[displayIndex].x, displayBounds[displayIndex].y);
|
||||
|
||||
int w, h;
|
||||
SDL_GetWindowSize (g_window, &w, &h);
|
||||
if (w != Display::getDisplay ().getWidth ())
|
||||
{
|
||||
CEvent::PushUserEvent (EV_REINIT);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SetWindowFullscreen (
|
||||
@ -1761,7 +1769,9 @@ CEvent::SetFullScreen (bool bFullScreen, double prevScale)
|
||||
: SDL_WINDOW_FULLSCREEN)
|
||||
: 0);
|
||||
SDL_SetWindowBordered (g_window, bFullScreen ? SDL_FALSE : SDL_TRUE);
|
||||
#ifndef DEBUG
|
||||
SDL_SetWindowGrab (g_window, bFullScreen ? SDL_TRUE : SDL_FALSE);
|
||||
#endif /* !DEBUG */
|
||||
|
||||
m_pPixmap->LoadCursors ();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user