hedgewars/hwengine.pas
branch0.9.19
changeset 8924 13ac59499066
parent 8912 78ea1839aac9
child 8948 c8a6f789398d
equal deleted inserted replaced
8904:6ea838b8dcd5 8924:13ac59499066
    30 {$ENDIF}
    30 {$ENDIF}
    31 
    31 
    32 uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler
    32 uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler
    33      , uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions
    33      , uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions
    34      , SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted
    34      , SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted
    35      , uPhysFSLayer, uCursor
    35      , uPhysFSLayer, uCursor, uRandom
    36      {$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF}
    36      {$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF}
    37      {$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF}
    37      {$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF}
    38      {$IFDEF ANDROID}, GLUnit{$ENDIF}
    38      {$IFDEF ANDROID}, GLUnit{$ENDIF}
    39      ;
    39      ;
    40 
    40 
    77             begin
    77             begin
    78             if HasBorder then
    78             if HasBorder then
    79                 DisableSomeWeapons;
    79                 DisableSomeWeapons;
    80             AddClouds;
    80             AddClouds;
    81             AddFlakes;
    81             AddFlakes;
       
    82             SetRandomSeed(cSeed, false);
    82             AssignHHCoords;
    83             AssignHHCoords;
    83             AddMiscGears;
    84             AddMiscGears;
    84             StoreLoad(false);
    85             StoreLoad(false);
    85             InitWorld;
    86             InitWorld;
    86             ResetKbd;
    87             ResetKbd;
   154     isTerminated:= false;
   155     isTerminated:= false;
   155     PrevTime:= SDL_GetTicks;
   156     PrevTime:= SDL_GetTicks;
   156     while isTerminated = false do
   157     while isTerminated = false do
   157     begin
   158     begin
   158         SDL_PumpEvents();
   159         SDL_PumpEvents();
   159  
   160 
   160         while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
   161         while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
   161         begin
   162         begin
   162             case event.type_ of
   163             case event.type_ of
   163 {$IFDEF SDL13}
   164 {$IFDEF SDL13}
   164                 SDL_KEYDOWN:
   165                 SDL_KEYDOWN:
   170                     else
   171                     else
   171                         ProcessKey(event.key);
   172                         ProcessKey(event.key);
   172                 SDL_KEYUP:
   173                 SDL_KEYUP:
   173                     if GameState <> gsChat then
   174                     if GameState <> gsChat then
   174                         ProcessKey(event.key);
   175                         ProcessKey(event.key);
   175                     
   176 
   176                 SDL_WINDOWEVENT:
   177                 SDL_WINDOWEVENT:
   177                     if event.window.event = SDL_WINDOWEVENT_SHOWN then
   178                     if event.window.event = SDL_WINDOWEVENT_SHOWN then
   178                     begin
   179                     begin
   179                         cHasFocus:= true;
   180                         cHasFocus:= true;
   180                         onFocusStateChanged()
   181                         onFocusStateChanged()
   196                     begin
   197                     begin
   197                         cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth);
   198                         cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth);
   198                         cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight);
   199                         cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight);
   199                         cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF};
   200                         cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF};
   200                     end;
   201                     end;
   201                         
   202 
   202                 SDL_FINGERMOTION:
   203                 SDL_FINGERMOTION:
   203                     onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId);
   204                     onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId);
   204                 
   205 
   205                 SDL_FINGERDOWN:
   206                 SDL_FINGERDOWN:
   206                     onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   207                     onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   207                 
   208 
   208                 SDL_FINGERUP:
   209                 SDL_FINGERUP:
   209                     onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   210                     onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   210 {$ELSE}
   211 {$ELSE}
   211                 SDL_KEYDOWN:
   212                 SDL_KEYDOWN:
   212                     if GameState = gsChat then
   213                     if GameState = gsChat then
   214                     else
   215                     else
   215                         ProcessKey(event.key);
   216                         ProcessKey(event.key);
   216                 SDL_KEYUP:
   217                 SDL_KEYUP:
   217                     if GameState <> gsChat then
   218                     if GameState <> gsChat then
   218                         ProcessKey(event.key);
   219                         ProcessKey(event.key);
   219                     
   220 
   220                 SDL_MOUSEBUTTONDOWN:
   221                 SDL_MOUSEBUTTONDOWN:
   221                     if GameState = gsConfirm then
   222                     if GameState = gsConfirm then
   222                     begin
   223                     begin
   223                         resetPosition();
   224                         resetPosition();
   224                         ParseCommand('quit', true);
   225                         ParseCommand('quit', true);
   225                     end
   226                     end
   226                     else
   227                     else
   227                         ProcessMouse(event.button, true);
   228                         ProcessMouse(event.button, true);
   228                     
   229 
   229                 SDL_MOUSEBUTTONUP:
   230                 SDL_MOUSEBUTTONUP:
   230                     ProcessMouse(event.button, false); 
   231                     ProcessMouse(event.button, false);
   231                     
   232 
   232                 SDL_ACTIVEEVENT:
   233                 SDL_ACTIVEEVENT:
   233                     if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
   234                     if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
   234                     begin
   235                     begin
   235                         prevFocusState:= cHasFocus;
   236                         prevFocusState:= cHasFocus;
   236                         cHasFocus:= event.active.gain = 1;
   237                         cHasFocus:= event.active.gain = 1;
   237                         if prevFocusState xor cHasFocus then
   238                         if prevFocusState xor cHasFocus then
   238                             onFocusStateChanged()
   239                             onFocusStateChanged()
   239                     end;
   240                     end;
   240                         
   241 
   241                 SDL_VIDEORESIZE:
   242                 SDL_VIDEORESIZE:
   242                 begin
   243                 begin
   243                     // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts
   244                     // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts
   244                     // Change by sheepluva:
   245                     // Change by sheepluva:
   245                     // Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values.
   246                     // Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values.
   339     initEverything(true);
   340     initEverything(true);
   340     WriteLnToConsole('Hedgewars engine ' + cVersionString + '-r' + cRevisionString +
   341     WriteLnToConsole('Hedgewars engine ' + cVersionString + '-r' + cRevisionString +
   341                      ' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion));
   342                      ' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion));
   342     AddFileLog('Prefix: "' + PathPrefix +'"');
   343     AddFileLog('Prefix: "' + PathPrefix +'"');
   343     AddFileLog('UserPrefix: "' + UserPathPrefix +'"');
   344     AddFileLog('UserPrefix: "' + UserPathPrefix +'"');
   344     
   345 
   345     for i:= 0 to ParamCount do
   346     for i:= 0 to ParamCount do
   346         AddFileLog(inttostr(i) + ': ' + ParamStr(i));
   347         AddFileLog(inttostr(i) + ': ' + ParamStr(i));
   347 
   348 
   348     WriteToConsole('Init SDL... ');
   349     WriteToConsole('Init SDL... ');
   349     if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
   350     if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
   359 {$IFDEF USE_VIDEO_RECORDING}
   360 {$IFDEF USE_VIDEO_RECORDING}
   360     if GameType = gmtRecord then
   361     if GameType = gmtRecord then
   361         InitOffscreenOpenGL()
   362         InitOffscreenOpenGL()
   362     else
   363     else
   363 {$ENDIF}
   364 {$ENDIF}
   364         begin            
   365         begin
   365         // show main window
   366         // show main window
   366         if cFullScreen then
   367         if cFullScreen then
   367             ParseCommand('fullscr 1', true)
   368             ParseCommand('fullscr 1', true)
   368         else
   369         else
   369             ParseCommand('fullscr 0', true);
   370             ParseCommand('fullscr 0', true);