hedgewars/hwengine.pas
branchwebgl
changeset 9521 8054d9d775fd
parent 9127 e350500c4edb
parent 9468 3d07fd84c39d
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
    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, uRandom
    35      , uPhysFSLayer, uCursor, uRandom, ArgParsers, uVisualGearsHandlers, uTextures
    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      {$IFDEF WEBGL}, uWeb{$ENDIF}
    39      {$IFDEF WEBGL}, uWeb{$ENDIF}
    40      ;
    40      ;
    41 
       
    42 var isInternal: Boolean;
       
    43 
    41 
    44 {$IFDEF HWLIBRARY}
    42 {$IFDEF HWLIBRARY}
    45 procedure preInitEverything();
    43 procedure preInitEverything();
    46 procedure initEverything(complete:boolean);
    44 procedure initEverything(complete:boolean);
    47 procedure freeEverything(complete:boolean);
    45 procedure freeEverything(complete:boolean);
    52 {$ELSE}
    50 {$ELSE}
    53 procedure preInitEverything(); forward;
    51 procedure preInitEverything(); forward;
    54 procedure initEverything(complete:boolean); forward;
    52 procedure initEverything(complete:boolean); forward;
    55 procedure freeEverything(complete:boolean); forward;
    53 procedure freeEverything(complete:boolean); forward;
    56 {$ENDIF}
    54 {$ENDIF}
    57 
       
    58 {$INCLUDE "ArgParsers.inc"}
       
    59 
    55 
    60 {$IFDEF WEBGL}
    56 {$IFDEF WEBGL}
    61 procedure playFile(path: PChar); forward;
    57 procedure playFile(path: PChar); forward;
    62 function isEngineRunning():Integer; forward;
    58 function isEngineRunning():Integer; forward;
    63 procedure shutdown();forward;
    59 procedure shutdown();forward;
    88             ParseCommand('sendlanddigest', true);
    84             ParseCommand('sendlanddigest', true);
    89             GameState:= gsStart;
    85             GameState:= gsStart;
    90             end;
    86             end;
    91         gsStart:
    87         gsStart:
    92             begin
    88             begin
       
    89             SetDefaultBinds;
    93             if HasBorder then
    90             if HasBorder then
    94                 DisableSomeWeapons;
    91                 DisableSomeWeapons;
    95             AddClouds;
    92             AddClouds;
    96             AddFlakes;
    93             AddFlakes;
    97             SetRandomSeed(cSeed, false);
    94             SetRandomSeed(cSeed, false);
   164 procedure MainLoop;
   161 procedure MainLoop;
   165 var event: TSDL_Event;
   162 var event: TSDL_Event;
   166 {$IFNDEF WEBGL}
   163 {$IFNDEF WEBGL}
   167     PrevTime, CurrTime: LongInt;
   164     PrevTime, CurrTime: LongInt;
   168     isTerminated: boolean;
   165     isTerminated: boolean;
   169 {$IFDEF SDL13}
   166 {$IFDEF SDL2}
   170     previousGameState: TGameState;
   167     previousGameState: TGameState;
   171 {$ELSE}
   168 {$ELSE}
   172     prevFocusState: boolean;
   169     prevFocusState: boolean;
   173 {$ENDIF}
   170 {$ENDIF}
   174 
   171 
   183     begin
   180     begin
   184 {$ENDIF}
   181 {$ENDIF}
   185 
   182 
   186         SDL_PumpEvents();
   183         SDL_PumpEvents();
   187 
   184 
   188         while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
   185         while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL2}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
   189         begin
   186         begin
   190             case event.type_ of
   187             case event.type_ of
   191 {$IFDEF SDL13}
   188 {$IFDEF SDL2}
   192                 SDL_KEYDOWN:
   189                 SDL_KEYDOWN:
   193                     if GameState = gsChat then
   190                     if GameState = gsChat then
   194                         begin
   191                         begin
   195                     // sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3
   192                     // sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3
   196                         KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym), event.key.keysym.sym); //TODO correct for keymodifiers
   193                         KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym), event.key.keysym.sym); //TODO correct for keymodifiers
   197                         end
   194                         end
   198                     else 
   195                     else
   199                         if GameState >= gsGame then ProcessKey(event.key);
   196                         if GameState >= gsGame then ProcessKey(event.key);
   200                 SDL_KEYUP:
   197                 SDL_KEYUP:
   201                     if (GameState <> gsChat) and (GameState >= gsGame) then
   198                     if (GameState <> gsChat) and (GameState >= gsGame) then
   202                         ProcessKey(event.key);
   199                         ProcessKey(event.key);
   203 
   200 
   226                         cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight);
   223                         cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight);
   227                         cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF};
   224                         cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF};
   228                     end;
   225                     end;
   229 
   226 
   230                 SDL_FINGERMOTION:
   227                 SDL_FINGERMOTION:
   231                     onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId);
   228                     onTouchMotion(event.tfinger.x, event.tfinger.y, event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId);
   232 
   229 
   233                 SDL_FINGERDOWN:
   230                 SDL_FINGERDOWN:
   234                     onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   231                     onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
   235 
   232 
   236                 SDL_FINGERUP:
   233                 SDL_FINGERUP:
   388 
   385 
   389     WriteToConsole('Init SDL... ');
   386     WriteToConsole('Init SDL... ');
   390     if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
   387     if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
   391     WriteLnToConsole(msgOK);
   388     WriteLnToConsole(msgOK);
   392 
   389 
       
   390 {$IFDEF SDL2}
       
   391     SDL_StartTextInput();
       
   392 {$ELSE}
   393     SDL_EnableUNICODE(1);
   393     SDL_EnableUNICODE(1);
       
   394 {$ENDIF}
   394     SDL_ShowCursor(0);
   395     SDL_ShowCursor(0);
   395 
   396 
   396     WriteToConsole('Init SDL_ttf... ');
   397     WriteToConsole('Init SDL_ttf... ');
   397     SDLTry(TTF_Init() <> -1, true);
   398     SDLTry(TTF_Init() <> -1, true);
   398     WriteLnToConsole(msgOK);
   399     WriteLnToConsole(msgOK);
   448 
   449 
   449     InitSound();
   450     InitSound();
   450 
   451 
   451     isDeveloperMode:= false;
   452     isDeveloperMode:= false;
   452     TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
   453     TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
   453     ParseCommand('rotmask', true);
   454     //ParseCommand('rotmask', true);
   454 
   455 
   455 {$IFDEF USE_VIDEO_RECORDING}
   456 {$IFDEF USE_VIDEO_RECORDING}
   456     if GameType = gmtRecord then
   457     if GameType = gmtRecord then
   457     begin
   458     begin
   458         RecorderMainLoop();
   459         RecorderMainLoop();
   501     uIO.initModule;                 // sets up sockets
   502     uIO.initModule;                 // sets up sockets
   502 
   503 
   503     if complete then
   504     if complete then
   504     begin
   505     begin
   505         uPhysFSLayer.initModule;
   506         uPhysFSLayer.initModule;
       
   507         uTextures.initModule;
   506 {$IFDEF ANDROID}GLUnit.initModule;{$ENDIF}
   508 {$IFDEF ANDROID}GLUnit.initModule;{$ENDIF}
   507 {$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF}
   509 {$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF}
   508 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF}   //stub
   510 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF}   //stub
   509         uAI.initModule;
   511         uAI.initModule;
   510         uAIMisc.initModule;
   512         uAIMisc.initModule;
   513         uCaptions.initModule;
   515         uCaptions.initModule;
   514 
   516 
   515         uChat.initModule;
   517         uChat.initModule;
   516         uCollisions.initModule;
   518         uCollisions.initModule;
   517         uGears.initModule;
   519         uGears.initModule;
   518         uInputHandler.initModule;   //stub
   520         uInputHandler.initModule;
   519         uMisc.initModule;
   521         uMisc.initModule;
   520         uLandTexture.initModule;    //stub
   522         uLandTexture.initModule;    //stub
   521         uScript.initModule;
   523         uScript.initModule;
   522         uSound.initModule;
   524         uSound.initModule;
   523         uStats.initModule;
   525         uStats.initModule;
   524         uStore.initModule;
   526         uStore.initModule;
   525         uTeams.initModule;
   527         uTeams.initModule;
   526         uVisualGears.initModule;
   528         uVisualGears.initModule;
       
   529         uVisualGearsHandlers.initModule;
   527         uWorld.initModule;
   530         uWorld.initModule;
   528     end;
   531     end;
   529 end;
   532 end;
   530 
   533 
   531 procedure freeEverything (complete:boolean);
   534 procedure freeEverything (complete:boolean);
   552         uAmmos.freeModule;
   555         uAmmos.freeModule;
   553         uStore.freeModule;          // closes SDL
   556         uStore.freeModule;          // closes SDL
   554 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF}
   557 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF}
   555 {$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF}  //stub
   558 {$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF}  //stub
   556 {$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF}
   559 {$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF}
       
   560         uTextures.freeModule;
   557         uPhysFSLayer.freeModule;
   561         uPhysFSLayer.freeModule;
   558     end;
   562     end;
   559 
   563 
   560     uIO.freeModule;
   564     uIO.freeModule;
   561     uLand.freeModule;
   565     uLand.freeModule;
   605     // patch emscripten's SDL implementation
   609     // patch emscripten's SDL implementation
   606     SDL_InitPatch();
   610     SDL_InitPatch();
   607 {$ENDIF}
   611 {$ENDIF}
   608 {$ENDIF}
   612 {$ENDIF}
   609     preInitEverything();
   613     preInitEverything();
       
   614     cTagsMask:= htTeamName or htName or htHealth; // this one doesn't fit nicely w/ reset of other variables. suggestions welcome
   610     GetParams();
   615     GetParams();
   611 
   616 
   612     if GameType = gmtLandPreview then
   617     if GameType = gmtLandPreview then
   613         GenLandPreview()
   618         GenLandPreview()
   614     else if GameType <> gmtSyntax then
   619     else if GameType <> gmtSyntax then