2012-05-30 07:17:40 -05:00
# ifdef USE_SDL
2012-01-08 11:39:03 -06:00
2012-07-06 10:53:59 -05:00
# include <map>
2018-04-30 13:13:24 -05:00
# include "common/String.h"
2016-07-17 22:37:24 -05:00
# include <ctime>
2017-11-15 19:07:00 -06:00
# include <climits>
2012-07-29 11:14:14 -05:00
# ifdef WIN
2013-06-22 08:36:10 -05:00
# define _WIN32_WINNT 0x0501 //Necessary for some macros and functions, tells windows.h to include functions only available in Windows XP or later
2012-08-08 11:42:04 -05:00
# include <direct.h>
2012-01-29 11:54:53 -06:00
# endif
2016-10-13 21:32:52 -05:00
# include "SDLCompat.h"
2017-02-20 18:15:41 -06:00
# ifdef X86_SSE
2017-02-19 18:29:41 -06:00
# include <xmmintrin.h>
2017-02-20 18:15:41 -06:00
# endif
# ifdef X86_SSE3
2017-02-19 18:29:41 -06:00
# include <pmmintrin.h>
2017-02-20 18:15:41 -06:00
# endif
2012-01-14 12:51:24 -06:00
# include <iostream>
2012-01-08 11:39:03 -06:00
# include "Config.h"
2012-07-06 10:06:26 -05:00
# include "graphics/Graphics.h"
2012-07-29 10:55:26 -05:00
# if defined(LIN)
2012-01-29 11:54:53 -06:00
# include "icon.h"
# endif
2013-05-19 01:02:42 -05:00
# include <signal.h>
2016-01-25 23:24:14 -06:00
# include <stdexcept>
2012-01-08 11:39:03 -06:00
2012-08-08 11:42:04 -05:00
# ifndef WIN
# include <unistd.h>
# endif
# include "Format.h"
2012-08-12 16:32:57 -05:00
2012-08-13 09:43:57 -05:00
# include "client/GameSave.h"
2012-08-17 10:08:03 -05:00
# include "client/SaveFile.h"
2012-06-21 19:04:55 -05:00
# include "simulation/SaveRenderer.h"
# include "client/Client.h"
2012-07-06 10:53:59 -05:00
# include "Misc.h"
2012-01-08 11:39:03 -06:00
2013-03-22 09:14:17 -05:00
# include "gui/game/GameController.h"
# include "gui/game/GameView.h"
2012-01-17 14:46:06 -06:00
2018-04-29 10:49:40 -05:00
# include "gui/font/FontEditor.h"
2013-03-22 09:14:17 -05:00
# include "gui/dialogues/ErrorMessage.h"
2016-01-31 21:30:39 -06:00
# include "gui/dialogues/ConfirmPrompt.h"
2013-03-22 09:14:17 -05:00
# include "gui/interface/Keys.h"
# include "gui/Style.h"
2012-01-29 08:44:36 -06:00
2012-01-19 07:44:59 -06:00
# include "client/HTTP.h"
2012-01-14 12:51:24 -06:00
using namespace std ;
2016-10-14 08:30:29 -05:00
# define INCLUDE_SYSWM
# include "SDLCompat.h"
2013-01-18 13:37:24 -06:00
# if defined(USE_SDL) && defined(LIN) && defined(SDL_VIDEO_DRIVER_X11)
SDL_SysWMinfo sdl_wminfo ;
2013-08-28 15:57:08 -05:00
Atom XA_CLIPBOARD , XA_TARGETS , XA_UTF8_STRING ;
2013-01-18 13:37:24 -06:00
# endif
2012-09-05 11:31:49 -05:00
int desktopWidth = 1280 , desktopHeight = 1024 ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDL_Window * sdl_window ;
SDL_Renderer * sdl_renderer ;
SDL_Texture * sdl_texture ;
2012-08-08 08:35:27 -05:00
int scale = 1 ;
bool fullscreen = false ;
2012-05-30 06:32:58 -05:00
2018-04-30 13:13:24 -05:00
void ClipboardPush ( ByteString text )
2013-01-18 13:37:24 -06:00
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDL_SetClipboardText ( text . c_str ( ) ) ;
2013-01-18 13:37:24 -06:00
}
2018-04-30 13:13:24 -05:00
ByteString ClipboardPull ( )
2013-01-18 13:37:24 -06:00
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
return ByteString ( SDL_GetClipboardText ( ) ) ;
2013-01-18 13:37:24 -06:00
}
2012-06-23 08:59:07 -05:00
# ifdef OGLI
2012-05-30 06:32:58 -05:00
void blit ( )
{
SDL_GL_SwapBuffers ( ) ;
}
# else
void blit ( pixel * vid )
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDL_UpdateTexture ( sdl_texture , NULL , vid , WINDOWW * sizeof ( Uint32 ) ) ;
SDL_RenderClear ( sdl_renderer ) ;
SDL_RenderCopy ( sdl_renderer , sdl_texture , NULL , NULL ) ;
SDL_RenderPresent ( sdl_renderer ) ;
2012-05-30 06:32:58 -05:00
}
2012-05-30 07:17:40 -05:00
# endif
2012-05-30 06:32:58 -05:00
2012-08-08 08:35:27 -05:00
int SDLOpen ( )
2012-01-08 11:39:03 -06:00
{
2012-07-29 11:14:14 -05:00
# if defined(WIN) && defined(WINCONSOLE)
2012-01-14 12:51:24 -06:00
FILE * console = fopen ( " CON " , " w " ) ;
# endif
2012-01-08 11:39:03 -06:00
if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 )
{
fprintf ( stderr , " Initializing SDL: %s \n " , SDL_GetError ( ) ) ;
2012-08-08 08:35:27 -05:00
return 1 ;
2012-01-08 11:39:03 -06:00
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDL_DisplayMode SDLDisplayMode ;
SDL_GetCurrentDisplayMode ( 0 , & SDLDisplayMode ) ;
desktopWidth = SDLDisplayMode . w ;
desktopHeight = SDLDisplayMode . h ;
2012-07-29 11:14:14 -05:00
# if defined(WIN) && defined(WINCONSOLE)
2012-01-14 12:51:24 -06:00
//On Windows, SDL redirects stdout to stdout.txt, which can be annoying when debugging, here we redirect back to the console
if ( console )
{
freopen ( " CON " , " w " , stdout ) ;
2012-02-05 10:37:36 -06:00
freopen ( " CON " , " w " , stderr ) ;
//fclose(console);
2012-01-14 12:51:24 -06:00
}
# endif
2012-07-29 11:14:14 -05:00
# ifdef WIN
2012-01-29 11:54:53 -06:00
SDL_SysWMinfo SysInfo ;
SDL_VERSION ( & SysInfo . version ) ;
if ( SDL_GetWMInfo ( & SysInfo ) < = 0 ) {
Fix some problems noted in http://www.viva64.com/en/b/0298/
I've left some of the less important items, like SearchView.cpp "'then' statement is equivalent to the 'else' statement", and RequestBroker::Request::~Request, because I don't feel like spending a few days entirely rewriting those files at the moment (which is what I'd end up doing if I started fixing minor problems and refactoring...)
GameSave::readOPS - not changed. At some point we may have to move to a larger type for element IDs (probably two or four bytes), but PT_NUM isn't likely to be raised to the maximum value of that type immediately, so this check will be needed then. There should be an elements[partsData[i]].Enabled check in there too, but it might be a bit difficult - I'm not sure how to access a Simulation object from GameSave::readOPS...
Notes on changes:
Graphics::textsize, Element_FRZW::Element_FRZW - typos
Button::Draw - the extra case was originally used to invert the icon (draw it in black instead of in white) when the button was clicked. However, the icon colour is now automatically set depending on the background colour. (Note similar conditions "if(Enabled) { if(isButtonDown || (isTogglable && toggle)) " near the start of the function - same logic but in a different place, setting icon colour indirectly).
Simulation::transform_save - unused redundant function, everything uses GameSave::Transform which does much the same thing.
PreviewView::NotifySaveChanged - should be height==YRES/2, it's checking whether the preview image is the correct size, and resizing it if it isn't.
Element_FWRK::update - no idea why that line was there, even though it was my commit that originally added it...
2014-12-25 09:55:14 -06:00
printf ( " %s : %p \n " , SDL_GetError ( ) , SysInfo . window ) ;
2012-01-29 11:54:53 -06:00
exit ( - 1 ) ;
}
HWND WindowHandle = SysInfo . window ;
2013-04-22 12:04:43 -05:00
// Use GetModuleHandle to get the Exe HMODULE/HINSTANCE
HMODULE hModExe = GetModuleHandle ( NULL ) ;
HICON hIconSmall = ( HICON ) LoadImage ( hModExe , MAKEINTRESOURCE ( 101 ) , IMAGE_ICON , 16 , 16 , LR_SHARED ) ;
HICON hIconBig = ( HICON ) LoadImage ( hModExe , MAKEINTRESOURCE ( 101 ) , IMAGE_ICON , 32 , 32 , LR_SHARED ) ;
2012-01-29 11:54:53 -06:00
SendMessage ( WindowHandle , WM_SETICON , ICON_SMALL , ( LPARAM ) hIconSmall ) ;
SendMessage ( WindowHandle , WM_SETICON , ICON_BIG , ( LPARAM ) hIconBig ) ;
# endif
2012-01-08 11:39:03 -06:00
atexit ( SDL_Quit ) ;
2012-04-22 11:13:43 -05:00
2012-08-08 08:35:27 -05:00
return 0 ;
}
2012-04-22 11:13:43 -05:00
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
void SDLSetScreen ( int newScale , bool newFullscreen )
2012-08-08 08:35:27 -05:00
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDL_DestroyTexture ( sdl_texture ) ;
SDL_DestroyRenderer ( sdl_renderer ) ;
SDL_DestroyWindow ( sdl_window ) ;
2012-08-08 08:35:27 -05:00
scale = newScale ;
fullscreen = newFullscreen ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
sdl_window = SDL_CreateWindow ( " The Powder Toy " , SDL_WINDOWPOS_CENTERED , SDL_WINDOWPOS_CENTERED , WINDOWW * newScale , WINDOWH * newScale ,
newFullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0 ) ;
2018-04-22 19:09:44 -05:00
SDL_Surface * icon = SDL_CreateRGBSurfaceFrom ( ( void * ) app_icon , 48 , 48 , 24 , 144 , 0x00FF0000 , 0x0000FF00 , 0x000000FF , 0 ) ;
//SDL_WM_SetIcon(icon, (Uint8*)app_icon_bitmap);
SDL_SetWindowIcon ( sdl_window , icon ) ;
SDL_FreeSurface ( icon ) ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
sdl_renderer = SDL_CreateRenderer ( sdl_window , - 1 , 0 ) ;
if ( newScale > 1 )
SDL_RenderSetLogicalSize ( sdl_renderer , WINDOWW , WINDOWH ) ;
2018-04-22 19:09:44 -05:00
//SDL_RenderSetIntegerScale(sdl_renderer, SDL_TRUE);
if ( newFullscreen )
{
SDL_RaiseWindow ( sdl_window ) ;
//SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
sdl_texture = SDL_CreateTexture ( sdl_renderer , SDL_PIXELFORMAT_ARGB8888 , SDL_TEXTUREACCESS_STREAMING , WINDOWW , WINDOWH ) ;
//SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
//SDL_SetWindowResizable(sdl_window, SDL_TRUE);
2016-04-01 23:10:15 -05:00
}
2016-07-23 18:15:07 -05:00
unsigned int GetTicks ( )
{
return SDL_GetTicks ( ) ;
}
2018-04-30 13:13:24 -05:00
std : : map < ByteString , ByteString > readArguments ( int argc , char * argv [ ] )
2012-07-06 10:53:59 -05:00
{
2018-04-30 13:13:24 -05:00
std : : map < ByteString , ByteString > arguments ;
2012-07-06 10:53:59 -05:00
2012-11-16 17:20:48 -06:00
//Defaults
2012-07-06 10:53:59 -05:00
arguments [ " scale " ] = " " ;
arguments [ " proxy " ] = " " ;
2012-11-16 17:20:48 -06:00
arguments [ " nohud " ] = " false " ; //the nohud, sound, and scripts commands currently do nothing.
2012-07-06 10:53:59 -05:00
arguments [ " sound " ] = " false " ;
arguments [ " kiosk " ] = " false " ;
arguments [ " scripts " ] = " false " ;
arguments [ " open " ] = " " ;
arguments [ " ddir " ] = " " ;
arguments [ " ptsave " ] = " " ;
for ( int i = 1 ; i < argc ; i + + )
{
if ( ! strncmp ( argv [ i ] , " scale: " , 6 ) & & argv [ i ] + 6 )
{
2018-04-30 13:13:24 -05:00
arguments [ " scale " ] = argv [ i ] + 6 ;
2012-07-06 10:53:59 -05:00
}
2012-08-08 12:34:37 -05:00
else if ( ! strncmp ( argv [ i ] , " proxy: " , 6 ) )
2012-07-06 10:53:59 -05:00
{
2012-08-08 12:34:37 -05:00
if ( argv [ i ] + 6 )
2018-04-30 13:13:24 -05:00
arguments [ " proxy " ] = argv [ i ] + 6 ;
2012-08-08 12:34:37 -05:00
else
arguments [ " proxy " ] = " false " ;
2012-07-06 10:53:59 -05:00
}
else if ( ! strncmp ( argv [ i ] , " nohud " , 5 ) )
{
arguments [ " nohud " ] = " true " ;
}
else if ( ! strncmp ( argv [ i ] , " kiosk " , 5 ) )
{
arguments [ " kiosk " ] = " true " ;
}
else if ( ! strncmp ( argv [ i ] , " sound " , 5 ) )
{
arguments [ " sound " ] = " true " ;
}
else if ( ! strncmp ( argv [ i ] , " scripts " , 8 ) )
{
arguments [ " scripts " ] = " true " ;
}
else if ( ! strncmp ( argv [ i ] , " open " , 5 ) & & i + 1 < argc )
{
2018-04-30 13:13:24 -05:00
arguments [ " open " ] = argv [ i + 1 ] ;
2012-07-06 10:53:59 -05:00
i + + ;
}
else if ( ! strncmp ( argv [ i ] , " ddir " , 5 ) & & i + 1 < argc )
{
2018-04-30 13:13:24 -05:00
arguments [ " ddir " ] = argv [ i + 1 ] ;
2012-07-06 10:53:59 -05:00
i + + ;
}
else if ( ! strncmp ( argv [ i ] , " ptsave " , 7 ) & & i + 1 < argc )
{
2018-04-30 13:13:24 -05:00
arguments [ " ptsave " ] = argv [ i + 1 ] ;
2012-07-06 10:53:59 -05:00
i + + ;
break ;
}
}
return arguments ;
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
/*SDLKey MapNumpad(SDLKey key)
2014-02-27 10:39:16 -06:00
{
switch ( key )
{
2016-07-19 21:42:10 -05:00
case SDLK_KP8 :
return SDLK_UP ;
case SDLK_KP2 :
return SDLK_DOWN ;
case SDLK_KP6 :
return SDLK_RIGHT ;
case SDLK_KP4 :
return SDLK_LEFT ;
case SDLK_KP7 :
return SDLK_HOME ;
case SDLK_KP1 :
return SDLK_END ;
case SDLK_KP_PERIOD :
return SDLK_DELETE ;
case SDLK_KP0 :
case SDLK_KP9 :
case SDLK_KP3 :
return SDLK_UNKNOWN ;
2014-02-27 10:39:16 -06:00
default :
return key ;
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
} */
2014-02-27 10:39:16 -06:00
2012-08-18 16:08:20 -05:00
int elapsedTime = 0 , currentTime = 0 , lastTime = 0 , currentFrame = 0 ;
unsigned int lastTick = 0 ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
float fps = 0 , delta = 1.0f ;
float inputScaleH = 1.0f , inputScaleV = 1.0f ;
2012-08-18 16:08:20 -05:00
ui : : Engine * engine = NULL ;
2016-01-31 21:30:39 -06:00
bool showDoubleScreenDialog = false ;
2012-11-16 15:50:02 -06:00
float currentWidth , currentHeight ;
2013-10-24 15:46:41 -05:00
2018-04-22 19:09:44 -05:00
int mousex = 0 , mousey = 0 ;
int mouseButton = 0 ;
bool mouseDown = false ;
2013-10-24 15:46:41 -05:00
void EventProcess ( SDL_Event event )
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
//inputScale= 1.0f;
/*if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
2014-03-12 10:05:54 -05:00
{
if ( event . key . keysym . unicode = = 0 )
2014-03-11 11:53:42 -05:00
{
2014-03-12 10:05:54 -05:00
// If unicode is zero, this could be a numpad key with numlock off, or numlock on and shift on (unicode is set to 0 by SDL or the OS in these circumstances. If numlock is on, unicode is the relevant digit character).
// For some unknown reason, event.key.keysym.mod seems to be unreliable on some computers (keysum.mod&KEY_MOD_NUM is opposite to the actual value), so check keysym.unicode instead.
// Note: unicode is always zero for SDL_KEYUP events, so this translation won't always work properly for keyup events.
2014-03-11 11:53:42 -05:00
SDLKey newKey = MapNumpad ( event . key . keysym . sym ) ;
if ( newKey ! = event . key . keysym . sym )
{
event . key . keysym . sym = newKey ;
event . key . keysym . unicode = 0 ;
}
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
} */
2013-10-24 15:46:41 -05:00
switch ( event . type )
{
case SDL_QUIT :
if ( engine - > GetFastQuit ( ) | | engine - > CloseWindow ( ) )
engine - > Exit ( ) ;
break ;
case SDL_KEYDOWN :
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
if ( ! event . key . repeat & & event . key . keysym . sym = = ' q ' & & ( event . key . keysym . mod & KMOD_CTRL ) )
2018-03-10 15:01:14 -06:00
engine - > ConfirmExit ( ) ;
else
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
engine - > onKeyPress ( event . key . keysym . sym , event . key . keysym . scancode , event . key . repeat , event . key . keysym . mod & KMOD_SHIFT , event . key . keysym . mod & KMOD_CTRL , event . key . keysym . mod & KMOD_ALT ) ;
2013-10-24 15:46:41 -05:00
break ;
case SDL_KEYUP :
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
engine - > onKeyRelease ( event . key . keysym . sym , event . key . keysym . scancode , event . key . repeat , event . key . keysym . mod & KMOD_SHIFT , event . key . keysym . mod & KMOD_CTRL , event . key . keysym . mod & KMOD_ALT ) ;
2013-10-24 15:46:41 -05:00
break ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
case SDL_TEXTINPUT :
engine - > onTextInput ( ByteString ( event . text . text ) . FromUtf8 ( ) ) ;
2013-10-24 15:46:41 -05:00
break ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
case SDL_MOUSEWHEEL :
{
int x = event . wheel . x ;
int y = event . wheel . y ;
if ( event . wheel . direction = = SDL_MOUSEWHEEL_FLIPPED )
2013-10-24 15:46:41 -05:00
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
x * = - 1 ;
y * = - 1 ;
2013-10-24 15:46:41 -05:00
}
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
bool positiveDir = y = = 0 ? x > 0 : y > 0 ;
engine - > onMouseWheel ( event . motion . x * inputScaleH , event . motion . y * inputScaleV , positiveDir ? 1 : - 1 ) ;
break ;
}
case SDL_MOUSEMOTION :
mousex = event . motion . x * inputScaleH ;
mousey = event . motion . y * inputScaleV ;
2018-04-22 19:09:44 -05:00
engine - > onMouseMove ( mousex , mousey ) ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
break ;
case SDL_MOUSEBUTTONDOWN :
mousex = event . motion . x * inputScaleH ;
mousey = event . motion . y * inputScaleV ;
2018-04-22 19:09:44 -05:00
mouseButton = event . button . button ;
engine - > onMouseClick ( event . motion . x * inputScaleH , event . motion . y * inputScaleV , mouseButton ) ;
mouseDown = true ;
SDL_CaptureMouse ( SDL_TRUE ) ;
2013-10-24 15:46:41 -05:00
break ;
case SDL_MOUSEBUTTONUP :
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
mousex = event . motion . x * inputScaleH ;
mousey = event . motion . y * inputScaleV ;
2018-04-22 19:09:44 -05:00
mouseButton = event . button . button ;
engine - > onMouseUnclick ( mousex , mousey , mouseButton ) ;
mouseDown = false ;
SDL_CaptureMouse ( SDL_FALSE ) ;
2013-10-24 15:46:41 -05:00
break ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
case SDL_WINDOWEVENT :
2013-10-24 15:46:41 -05:00
{
2018-04-22 19:09:44 -05:00
switch ( event . window . event )
{
case SDL_WINDOWEVENT_RESIZED :
{
float width = event . window . data1 ;
float height = event . window . data2 ;
currentWidth = width ;
currentHeight = height ;
// this "* scale" thing doesn't really work properly
// currently there is a bug where input doesn't scale properly after resizing, only when double scale mode is active
inputScaleH = ( float ) WINDOWW * scale / currentWidth ;
inputScaleV = ( float ) WINDOWH * scale / currentHeight ;
std : : cout < < " Changing input scale to " < < inputScaleH < < " x " < < inputScaleV < < std : : endl ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
break ;
2018-04-22 19:09:44 -05:00
}
// This would send a mouse up event when focus is lost
// Not even sdl itself will know when the mouse was released if it happens in another window
// So it will ignore the next mouse down (after tpt is re-focused) and not send any events at all
// This is more unintuitive than pretending the mouse is still down when it's not, so this code is commented out
/*case SDL_WINDOWEVENT_FOCUS_LOST:
if ( mouseDown )
{
mouseDown = false ;
engine - > onMouseUnclick ( mousex , mousey , mouseButton ) ;
}
break ; */
}
2013-10-24 15:46:41 -05:00
break ;
}
}
}
2016-01-31 21:30:39 -06:00
void DoubleScreenDialog ( )
{
2018-05-02 14:08:52 -05:00
StringBuilder message ;
2016-01-31 21:30:39 -06:00
message < < " Switching to double size mode since your screen was determined to be large enough: " ;
message < < desktopWidth < < " x " < < desktopHeight < < " detected, " < < WINDOWW * 2 < < " x " < < WINDOWH * 2 < < " required " ;
message < < " \n To undo this, hit Cancel. You can toggle double size mode in settings at any time. " ;
2018-05-02 14:08:52 -05:00
if ( ! ConfirmPrompt : : Blocking ( " Large screen detected " , message . Build ( ) ) )
2016-01-31 21:30:39 -06:00
{
Client : : Ref ( ) . SetPref ( " Scale " , 1 ) ;
engine - > SetScale ( 1 ) ;
2016-01-31 21:59:29 -06:00
# ifdef WIN
2016-01-31 21:30:39 -06:00
LoadWindowPosition ( 1 ) ;
2016-01-31 21:59:29 -06:00
# endif
2016-01-31 21:30:39 -06:00
}
}
2016-03-31 21:08:04 -05:00
2012-08-18 16:08:20 -05:00
void EngineProcess ( )
{
2015-02-03 19:13:51 -06:00
double frameTimeAvg = 0.0f , correctedFrameTimeAvg = 0.0f ;
2012-08-18 16:08:20 -05:00
SDL_Event event ;
while ( engine - > Running ( ) )
{
2015-02-03 19:13:51 -06:00
int frameStart = SDL_GetTicks ( ) ;
2012-08-19 06:16:51 -05:00
if ( engine - > Broken ( ) ) { engine - > UnBreak ( ) ; break ; }
2012-08-18 16:08:20 -05:00
event . type = 0 ;
while ( SDL_PollEvent ( & event ) )
{
2013-10-24 15:46:41 -05:00
EventProcess ( event ) ;
2012-08-18 16:08:20 -05:00
event . type = 0 ; //Clear last event
}
2012-08-19 06:16:51 -05:00
if ( engine - > Broken ( ) ) { engine - > UnBreak ( ) ; break ; }
2012-08-18 16:08:20 -05:00
engine - > Tick ( ) ;
engine - > Draw ( ) ;
2017-11-15 19:07:00 -06:00
2013-05-21 22:05:27 -05:00
if ( scale ! = engine - > Scale | | fullscreen ! = engine - > Fullscreen )
{
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDLSetScreen ( engine - > Scale , engine - > Fullscreen ) ;
2013-05-21 22:05:27 -05:00
}
# ifdef OGLI
blit ( ) ;
# else
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
blit ( engine - > g - > vid ) ;
2013-05-21 22:05:27 -05:00
# endif
2015-02-03 19:13:51 -06:00
int frameTime = SDL_GetTicks ( ) - frameStart ;
frameTimeAvg = frameTimeAvg * 0.8 + frameTime * 0.2 ;
int fpsLimit = ui : : Engine : : Ref ( ) . FpsLimit ;
if ( fpsLimit > 2 )
2012-10-05 08:21:38 -05:00
{
2015-02-03 19:13:51 -06:00
double offset = 1000.0 / fpsLimit - frameTimeAvg ;
if ( offset > 0 )
SDL_Delay ( offset + 0.5 ) ;
2012-10-05 08:21:38 -05:00
}
2015-02-03 19:13:51 -06:00
int correctedFrameTime = SDL_GetTicks ( ) - frameStart ;
correctedFrameTimeAvg = correctedFrameTimeAvg * 0.95 + correctedFrameTime * 0.05 ;
engine - > SetFps ( 1000.0 / correctedFrameTimeAvg ) ;
if ( frameStart - lastTick > 1000 )
2012-08-18 16:08:20 -05:00
{
//Run client tick every second
2012-10-05 08:21:38 -05:00
lastTick = frameStart ;
2012-08-18 16:08:20 -05:00
Client : : Ref ( ) . Tick ( ) ;
}
2016-01-31 21:30:39 -06:00
if ( showDoubleScreenDialog )
{
showDoubleScreenDialog = false ;
DoubleScreenDialog ( ) ;
}
2012-08-18 16:08:20 -05:00
}
2012-08-18 18:40:20 -05:00
# ifdef DEBUG
std : : cout < < " Breaking out of EngineProcess " < < std : : endl ;
# endif
2012-08-18 16:08:20 -05:00
}
2013-02-14 22:31:31 -06:00
int GetModifiers ( )
{
return SDL_GetModState ( ) ;
}
2013-04-22 12:04:43 -05:00
# ifdef WIN
// Returns true if the loaded position was set
// Returns false if something went wrong: SDL_GetWMInfo failed or the loaded position was invalid
2013-05-03 18:11:44 -05:00
bool LoadWindowPosition ( int scale )
2013-04-22 12:04:43 -05:00
{
SDL_SysWMinfo sysInfo ;
SDL_VERSION ( & sysInfo . version ) ;
if ( SDL_GetWMInfo ( & sysInfo ) > 0 )
{
2013-11-10 03:02:55 -06:00
int windowW = WINDOWW * scale ;
int windowH = WINDOWH * scale ;
2013-04-22 12:04:43 -05:00
2013-05-02 12:00:13 -05:00
int savedWindowX = Client : : Ref ( ) . GetPrefInteger ( " WindowX " , INT_MAX ) ;
int savedWindowY = Client : : Ref ( ) . GetPrefInteger ( " WindowY " , INT_MAX ) ;
2017-11-15 19:07:00 -06:00
2013-05-03 18:11:44 -05:00
// Center the window on the primary desktop by default
2013-05-02 12:00:13 -05:00
int newWindowX = ( desktopWidth - windowW ) / 2 ;
int newWindowY = ( desktopHeight - windowH ) / 2 ;
2013-04-22 12:04:43 -05:00
2013-05-02 12:00:13 -05:00
bool success = false ;
2013-04-22 12:04:43 -05:00
2013-05-02 12:00:13 -05:00
if ( savedWindowX ! = INT_MAX & & savedWindowY ! = INT_MAX )
2013-04-22 12:04:43 -05:00
{
POINT windowPoints [ ] = {
2013-05-02 12:00:13 -05:00
{ savedWindowX , savedWindowY } , // Top-left
{ savedWindowX + windowW , savedWindowY + windowH } // Bottom-right
2013-04-22 12:04:43 -05:00
} ;
MONITORINFO monitor ;
monitor . cbSize = sizeof ( monitor ) ;
2013-05-02 12:00:13 -05:00
if ( GetMonitorInfo ( MonitorFromPoint ( windowPoints [ 0 ] , MONITOR_DEFAULTTONEAREST ) , & monitor ) ! = 0 )
2013-04-22 12:04:43 -05:00
{
2013-05-03 18:11:44 -05:00
// Only use the saved window position if it lies inside the visible screen
2013-04-22 12:04:43 -05:00
if ( PtInRect ( & monitor . rcMonitor , windowPoints [ 0 ] ) & & PtInRect ( & monitor . rcMonitor , windowPoints [ 1 ] ) )
{
2013-05-02 12:00:13 -05:00
newWindowX = savedWindowX ;
newWindowY = savedWindowY ;
2013-04-22 12:04:43 -05:00
2013-05-02 12:00:13 -05:00
success = true ;
}
else
{
2013-05-03 18:11:44 -05:00
// Center the window on the nearest monitor
2013-05-02 12:00:13 -05:00
newWindowX = monitor . rcMonitor . left + ( monitor . rcMonitor . right - monitor . rcMonitor . left - windowW ) / 2 ;
newWindowY = monitor . rcMonitor . top + ( monitor . rcMonitor . bottom - monitor . rcMonitor . top - windowH ) / 2 ;
2013-04-22 12:04:43 -05:00
}
}
}
2017-11-15 19:07:00 -06:00
2013-05-02 12:00:13 -05:00
SetWindowPos ( sysInfo . window , 0 , newWindowX , newWindowY , 0 , 0 , SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER ) ;
2013-04-22 12:04:43 -05:00
2013-05-03 18:11:44 -05:00
// True if we didn't use the default, i.e. the position was valid
2013-05-02 12:00:13 -05:00
return success ;
2013-04-22 12:04:43 -05:00
}
return false ;
}
// Returns true if the window position was saved
bool SaveWindowPosition ( )
{
SDL_SysWMinfo sysInfo ;
SDL_VERSION ( & sysInfo . version ) ;
if ( SDL_GetWMInfo ( & sysInfo ) > 0 )
{
WINDOWPLACEMENT placement ;
placement . length = sizeof ( placement ) ;
GetWindowPlacement ( sysInfo . window , & placement ) ;
2013-05-04 09:00:45 -05:00
Client : : Ref ( ) . SetPref ( " WindowX " , ( int ) placement . rcNormalPosition . left ) ;
Client : : Ref ( ) . SetPref ( " WindowY " , ( int ) placement . rcNormalPosition . top ) ;
2013-04-22 12:04:43 -05:00
return true ;
}
return false ;
}
# endif
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
void BlueScreen ( String detailMessage )
{
2013-05-04 15:39:43 -05:00
ui : : Engine * engine = & ui : : Engine : : Ref ( ) ;
engine - > g - > fillrect ( 0 , 0 , engine - > GetWidth ( ) , engine - > GetHeight ( ) , 17 , 114 , 169 , 210 ) ;
2018-04-30 13:13:24 -05:00
String errorTitle = " ERROR " ;
String errorDetails = " Details: " + detailMessage ;
String errorHelp = " An unrecoverable fault has occurred, please report the error by visiting the website below \n "
2013-05-04 15:39:43 -05:00
" http:// " SERVER ;
int currentY = 0 , width , height ;
int errorWidth = 0 ;
2018-04-30 13:13:24 -05:00
Graphics : : textsize ( errorHelp , errorWidth , height ) ;
2017-11-15 19:07:00 -06:00
2013-05-04 15:39:43 -05:00
engine - > g - > drawtext ( ( engine - > GetWidth ( ) / 2 ) - ( errorWidth / 2 ) , ( ( engine - > GetHeight ( ) / 2 ) - 100 ) + currentY , errorTitle . c_str ( ) , 255 , 255 , 255 , 255 ) ;
2018-04-30 13:13:24 -05:00
Graphics : : textsize ( errorTitle , width , height ) ;
2013-05-04 15:39:43 -05:00
currentY + = height + 4 ;
engine - > g - > drawtext ( ( engine - > GetWidth ( ) / 2 ) - ( errorWidth / 2 ) , ( ( engine - > GetHeight ( ) / 2 ) - 100 ) + currentY , errorDetails . c_str ( ) , 255 , 255 , 255 , 255 ) ;
2018-04-30 13:13:24 -05:00
Graphics : : textsize ( errorTitle , width , height ) ;
2013-05-04 15:39:43 -05:00
currentY + = height + 4 ;
engine - > g - > drawtext ( ( engine - > GetWidth ( ) / 2 ) - ( errorWidth / 2 ) , ( ( engine - > GetHeight ( ) / 2 ) - 100 ) + currentY , errorHelp . c_str ( ) , 255 , 255 , 255 , 255 ) ;
2018-04-30 13:13:24 -05:00
Graphics : : textsize ( errorTitle , width , height ) ;
2013-05-04 15:39:43 -05:00
currentY + = height + 4 ;
2017-11-15 19:07:00 -06:00
2013-05-04 15:39:43 -05:00
//Death loop
2017-11-15 19:07:00 -06:00
SDL_Event event ;
2013-05-04 15:39:43 -05:00
while ( true )
{
while ( SDL_PollEvent ( & event ) )
if ( event . type = = SDL_QUIT )
exit ( - 1 ) ;
# ifdef OGLI
blit ( ) ;
# else
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
blit ( engine - > g - > vid ) ;
2013-05-04 15:39:43 -05:00
# endif
}
}
void SigHandler ( int signal )
{
switch ( signal ) {
case SIGSEGV :
BlueScreen ( " Memory read/write error " ) ;
break ;
case SIGFPE :
BlueScreen ( " Floating point exception " ) ;
break ;
case SIGILL :
BlueScreen ( " Program execution exception " ) ;
break ;
case SIGABRT :
BlueScreen ( " Unexpected program abort " ) ;
break ;
}
}
2012-01-08 11:39:03 -06:00
int main ( int argc , char * argv [ ] )
{
2016-04-23 10:38:58 -05:00
# if defined(_DEBUG) && defined(_MSC_VER)
_CrtSetReportMode ( _CRT_ASSERT , _CRTDBG_MODE_DEBUG ) ;
# endif
2017-11-15 19:07:00 -06:00
currentWidth = WINDOWW ;
2013-11-10 03:02:55 -06:00
currentHeight = WINDOWH ;
2012-11-16 15:50:02 -06:00
2012-01-08 11:39:03 -06:00
2018-04-30 13:13:24 -05:00
std : : map < ByteString , ByteString > arguments = readArguments ( argc , argv ) ;
2012-07-06 10:53:59 -05:00
2012-08-08 11:42:04 -05:00
if ( arguments [ " ddir " ] . length ( ) )
# ifdef WIN
_chdir ( arguments [ " ddir " ] . c_str ( ) ) ;
# else
chdir ( arguments [ " ddir " ] . c_str ( ) ) ;
# endif
int tempScale = 1 ;
bool tempFullscreen = false ;
tempScale = Client : : Ref ( ) . GetPrefInteger ( " Scale " , 1 ) ;
tempFullscreen = Client : : Ref ( ) . GetPrefBool ( " Fullscreen " , false ) ;
if ( arguments [ " kiosk " ] = = " true " )
{
tempFullscreen = true ;
Client : : Ref ( ) . SetPref ( " Fullscreen " , tempFullscreen ) ;
}
if ( arguments [ " scale " ] . length ( ) )
{
2018-05-04 15:10:39 -05:00
tempScale = arguments [ " scale " ] . ToNumber < int > ( ) ;
2012-08-08 11:42:04 -05:00
Client : : Ref ( ) . SetPref ( " Scale " , tempScale ) ;
}
2018-04-30 13:13:24 -05:00
ByteString proxyString = " " ;
2012-08-08 12:34:37 -05:00
if ( arguments [ " proxy " ] . length ( ) )
{
if ( arguments [ " proxy " ] = = " false " )
{
proxyString = " " ;
2017-11-15 19:07:00 -06:00
Client : : Ref ( ) . SetPref ( " Proxy " , " " ) ;
2012-08-08 12:34:37 -05:00
}
else
{
proxyString = ( arguments [ " proxy " ] ) ;
Client : : Ref ( ) . SetPref ( " Proxy " , arguments [ " proxy " ] ) ;
}
}
else if ( Client : : Ref ( ) . GetPrefString ( " Proxy " , " " ) . length ( ) )
{
2018-04-30 13:13:24 -05:00
proxyString = ( Client : : Ref ( ) . GetPrefByteString ( " Proxy " , " " ) ) ;
2012-08-08 12:34:37 -05:00
}
Client : : Ref ( ) . Initialise ( proxyString ) ;
2017-11-23 07:22:40 -06:00
// TODO: maybe bind the maximum allowed scale to screen size somehow
if ( tempScale < 1 | | tempScale > 10 )
2012-08-08 11:42:04 -05:00
tempScale = 1 ;
2015-01-10 21:43:33 -06:00
SDLOpen ( ) ;
2017-11-23 07:22:40 -06:00
// TODO: mabe make a nice loop that automagically finds the optimal scale
2016-07-12 23:15:33 -05:00
if ( Client : : Ref ( ) . IsFirstRun ( ) & & desktopWidth > WINDOWW * 2 + 50 & & desktopHeight > WINDOWH * 2 + 50 )
2015-05-14 22:22:20 -05:00
{
tempScale = 2 ;
Client : : Ref ( ) . SetPref ( " Scale " , 2 ) ;
2016-01-31 21:30:39 -06:00
showDoubleScreenDialog = true ;
2015-05-14 22:22:20 -05:00
}
2013-04-22 12:04:43 -05:00
# ifdef WIN
2013-05-03 18:11:44 -05:00
LoadWindowPosition ( tempScale ) ;
2013-04-22 12:04:43 -05:00
# endif
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
SDLSetScreen ( tempScale , tempFullscreen ) ;
2013-04-22 12:04:43 -05:00
2012-06-23 08:59:07 -05:00
# ifdef OGLI
2012-05-30 06:32:58 -05:00
SDL_GL_SetAttribute ( SDL_GL_DOUBLEBUFFER , 1 ) ;
2012-06-25 10:10:40 -05:00
//glScaled(2.0f, 2.0f, 1.0f);
2012-08-12 13:29:27 -05:00
# endif
2016-07-12 15:31:29 -05:00
# if defined(OGLI) && !defined(MACOSX)
2012-08-12 13:29:27 -05:00
int status = glewInit ( ) ;
if ( status ! = GLEW_OK )
{
fprintf ( stderr , " Initializing Glew: %d \n " , status ) ;
exit ( - 1 ) ;
}
2013-01-19 10:46:21 -06:00
# endif
2012-01-17 14:46:06 -06:00
ui : : Engine : : Ref ( ) . g = new Graphics ( ) ;
2012-08-08 11:42:04 -05:00
ui : : Engine : : Ref ( ) . Scale = scale ;
ui : : Engine : : Ref ( ) . Fullscreen = fullscreen ;
2012-01-15 13:35:40 -06:00
2012-08-18 16:08:20 -05:00
engine = & ui : : Engine : : Ref ( ) ;
2012-09-05 11:31:49 -05:00
engine - > SetMaxSize ( desktopWidth , desktopHeight ) ;
2013-11-10 03:02:55 -06:00
engine - > Begin ( WINDOWW , WINDOWH ) ;
2012-10-03 17:55:19 -05:00
engine - > SetFastQuit ( Client : : Ref ( ) . GetPrefBool ( " FastQuit " , true ) ) ;
2012-01-17 14:46:06 -06:00
2013-07-10 15:59:10 -05:00
# if !defined(DEBUG) && !defined(_DEBUG)
2013-05-04 15:39:43 -05:00
//Get ready to catch any dodgy errors
signal ( SIGSEGV , SigHandler ) ;
signal ( SIGFPE , SigHandler ) ;
signal ( SIGILL , SigHandler ) ;
signal ( SIGABRT , SigHandler ) ;
2012-08-08 15:32:10 -05:00
# endif
2013-05-04 15:39:43 -05:00
2017-02-20 18:15:41 -06:00
# ifdef X86_SSE
2017-02-19 18:29:41 -06:00
_MM_SET_FLUSH_ZERO_MODE ( _MM_FLUSH_ZERO_ON ) ;
2017-02-20 18:15:41 -06:00
# endif
# ifdef X86_SSE3
2017-02-19 18:29:41 -06:00
_MM_SET_DENORMALS_ZERO_MODE ( _MM_DENORMALS_ZERO_ON ) ;
2017-02-20 18:15:41 -06:00
# endif
2017-02-19 18:29:41 -06:00
2013-05-04 15:39:43 -05:00
GameController * gameController = NULL ;
2013-12-03 21:05:20 -06:00
# if !defined(DEBUG) && !defined(_DEBUG)
2013-05-04 15:39:43 -05:00
try {
# endif
2018-04-29 10:49:40 -05:00
# ifndef FONTEDITOR
2013-05-04 15:39:43 -05:00
gameController = new GameController ( ) ;
engine - > ShowWindow ( gameController - > GetView ( ) ) ;
if ( arguments [ " open " ] . length ( ) )
2012-08-08 14:24:23 -05:00
{
2013-12-03 21:05:20 -06:00
# ifdef DEBUG
2013-05-04 15:39:43 -05:00
std : : cout < < " Loading " < < arguments [ " open " ] < < std : : endl ;
2013-12-03 21:05:20 -06:00
# endif
2013-05-04 15:39:43 -05:00
if ( Client : : Ref ( ) . FileExists ( arguments [ " open " ] ) )
2012-08-08 14:24:23 -05:00
{
2013-05-04 15:39:43 -05:00
try
2012-08-08 14:24:23 -05:00
{
2013-05-04 15:39:43 -05:00
std : : vector < unsigned char > gameSaveData = Client : : Ref ( ) . ReadFile ( arguments [ " open " ] ) ;
if ( ! gameSaveData . size ( ) )
{
new ErrorMessage ( " Error " , " Could not read file " ) ;
}
else
{
SaveFile * newFile = new SaveFile ( arguments [ " open " ] ) ;
GameSave * newSave = new GameSave ( gameSaveData ) ;
newFile - > SetGameSave ( newSave ) ;
gameController - > LoadSaveFile ( newFile ) ;
delete newFile ;
}
2012-08-08 14:24:23 -05:00
}
2013-05-04 15:39:43 -05:00
catch ( std : : exception & e )
2012-08-08 14:24:23 -05:00
{
2018-04-30 13:13:24 -05:00
new ErrorMessage ( " Error " , " Could not open save file: \n " + ByteString ( e . what ( ) ) . FromUtf8 ( ) ) ;
2012-08-08 14:24:23 -05:00
}
}
2013-05-04 15:39:43 -05:00
else
2012-08-08 14:24:23 -05:00
{
2013-05-04 15:39:43 -05:00
new ErrorMessage ( " Error " , " Could not open file " ) ;
2012-08-08 14:24:23 -05:00
}
}
2013-05-04 15:39:43 -05:00
if ( arguments [ " ptsave " ] . length ( ) )
2012-08-08 15:32:10 -05:00
{
2013-05-04 15:39:43 -05:00
engine - > g - > fillrect ( ( engine - > GetWidth ( ) / 2 ) - 101 , ( engine - > GetHeight ( ) / 2 ) - 26 , 202 , 52 , 0 , 0 , 0 , 210 ) ;
engine - > g - > drawrect ( ( engine - > GetWidth ( ) / 2 ) - 100 , ( engine - > GetHeight ( ) / 2 ) - 25 , 200 , 50 , 255 , 255 , 255 , 180 ) ;
engine - > g - > drawtext ( ( engine - > GetWidth ( ) / 2 ) - ( Graphics : : textwidth ( " Loading save... " ) / 2 ) , ( engine - > GetHeight ( ) / 2 ) - 5 , " Loading save... " , style : : Colour : : InformationTitle . Red , style : : Colour : : InformationTitle . Green , style : : Colour : : InformationTitle . Blue , 255 ) ;
2013-12-03 21:05:20 -06:00
# ifdef OGLI
2013-05-04 15:39:43 -05:00
blit ( ) ;
2013-12-03 21:05:20 -06:00
# else
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
blit ( engine - > g - > vid ) ;
2013-12-03 21:05:20 -06:00
# endif
2018-04-30 13:13:24 -05:00
ByteString ptsaveArg = arguments [ " ptsave " ] ;
2013-05-04 15:39:43 -05:00
try
2012-08-08 15:32:10 -05:00
{
2018-05-01 17:32:04 -05:00
ByteString saveIdPart ;
if ( ByteString : : Split split = arguments [ " ptsave " ] . SplitBy ( ' : ' ) )
2013-05-04 15:39:43 -05:00
{
2018-05-01 17:32:04 -05:00
if ( split . Before ( ) ! = " ptsave " )
throw std : : runtime_error ( " Not a ptsave link " ) ;
saveIdPart = split . After ( ) . SplitBy ( ' # ' ) . Before ( ) ;
2013-05-04 15:39:43 -05:00
}
else
2018-05-01 17:32:04 -05:00
throw std : : runtime_error ( " Invalid save link " ) ;
if ( ! saveIdPart . size ( ) )
2013-05-04 15:39:43 -05:00
throw std : : runtime_error ( " No Save ID " ) ;
2015-08-29 12:14:17 -05:00
# ifdef DEBUG
2018-05-01 17:32:04 -05:00
std : : cout < < " Got Ptsave: id: " < < saveIdPart < < std : : endl ;
2015-08-29 12:14:17 -05:00
# endif
2018-05-04 15:10:39 -05:00
int saveId = saveIdPart . ToNumber < int > ( ) ;
2015-08-29 12:14:17 -05:00
SaveInfo * newSave = Client : : Ref ( ) . GetSave ( saveId , 0 ) ;
if ( ! newSave )
throw std : : runtime_error ( " Could not load save info " ) ;
std : : vector < unsigned char > saveData = Client : : Ref ( ) . GetSaveData ( saveId , 0 ) ;
if ( ! saveData . size ( ) )
2018-04-30 13:13:24 -05:00
throw std : : runtime_error ( ( " Could not load save \n " + Client : : Ref ( ) . GetLastError ( ) ) . ToUtf8 ( ) ) ;
2015-08-29 12:14:17 -05:00
GameSave * newGameSave = new GameSave ( saveData ) ;
newSave - > SetGameSave ( newGameSave ) ;
gameController - > LoadSave ( newSave ) ;
delete newSave ;
2013-05-04 15:39:43 -05:00
}
catch ( std : : exception & e )
2012-08-08 15:32:10 -05:00
{
2018-04-30 13:13:24 -05:00
new ErrorMessage ( " Error " , ByteString ( e . what ( ) ) . FromUtf8 ( ) ) ;
2012-08-08 15:32:10 -05:00
}
}
2018-04-29 10:49:40 -05:00
# else // FONTEDITOR
if ( argc < = 1 )
throw std : : runtime_error ( " Not enough arguments " ) ;
engine - > ShowWindow ( new FontEditor ( argv [ 1 ] ) ) ;
# endif
2015-01-31 13:09:50 -06:00
//initial mouse coords
int sdl_x , sdl_y ;
SDL_GetMouseState ( & sdl_x , & sdl_y ) ;
upgrade to SDL 2
Still currently in process, there are some issues:
Windows version doesn't work, mac version might not work, opengl might not work
Icon doesn't work (on Linux at least)
Lua will need some changes, there are some sdl 1.2 hacks in there
When entering fullscreen, the window loses focus
When holding down mouse out of bounds, mouse move events stop being sent
When letting go of mouse out of bounds, mouseup event doesn't take into account double scale mode
Clicking on startup without moving mouse will draw at 0,0 for a frame
Renderer probably won't compile because USE_SDL doesn't entirely work
... and maybe others
Some nice things were done though:
no more blit2, sdl can do the scaling itself
3d effect removed, no reason to support this joke any longer
No need to support copy/paste ourselves, sdl does it now
text handling done much better now, separate events for key presses and text input
when a new window is shown, all events ignored until next tick (ignore textinput event if window shown from key press event like console)
2018-04-15 17:53:02 -05:00
engine - > onMouseMove ( sdl_x * inputScaleH , sdl_y * inputScaleV ) ;
2013-05-04 15:39:43 -05:00
EngineProcess ( ) ;
2017-11-15 19:07:00 -06:00
2015-01-31 13:09:50 -06:00
# ifdef WIN
2013-05-04 15:39:43 -05:00
SaveWindowPosition ( ) ;
2015-01-31 13:09:50 -06:00
# endif
2013-05-04 15:39:43 -05:00
2013-12-03 21:05:20 -06:00
# if !defined(DEBUG) && !defined(_DEBUG)
2013-05-04 15:39:43 -05:00
}
2013-12-03 21:05:20 -06:00
catch ( exception & e )
2013-05-04 15:39:43 -05:00
{
2018-05-01 17:32:04 -05:00
BlueScreen ( ByteString ( e . what ( ) ) . FromUtf8 ( ) ) ;
2013-05-04 15:39:43 -05:00
}
2013-04-22 12:04:43 -05:00
# endif
2017-11-15 19:07:00 -06:00
2016-04-01 23:39:51 -05:00
Client : : Ref ( ) . SetPref ( " Scale " , ui : : Engine : : Ref ( ) . GetScale ( ) ) ;
2012-01-21 07:19:10 -06:00
ui : : Engine : : Ref ( ) . CloseWindow ( ) ;
delete gameController ;
delete ui : : Engine : : Ref ( ) . g ;
2012-06-21 19:04:55 -05:00
Client : : Ref ( ) . Shutdown ( ) ;
2012-05-30 07:17:40 -05:00
return 0 ;
2012-01-08 11:39:03 -06:00
}
2012-05-30 07:17:40 -05:00
# endif