hedgewars/hwengine.pas
changeset 7026 8d1724e1337e
parent 7025 831a25c74c7b
child 7027 f264ad9d8965
equal deleted inserted replaced
7025:831a25c74c7b 7026:8d1724e1337e
    40 procedure Game(gameArgs: PPChar); cdecl; export;
    40 procedure Game(gameArgs: PPChar); cdecl; export;
    41 procedure GenLandPreview(port: Longint); cdecl; export;
    41 procedure GenLandPreview(port: Longint); cdecl; export;
    42 
    42 
    43 implementation
    43 implementation
    44 {$ELSE}
    44 {$ELSE}
    45 procedure OnDestroy; forward;
       
    46 procedure initEverything(complete:boolean); forward;
    45 procedure initEverything(complete:boolean); forward;
    47 procedure freeEverything(complete:boolean); forward;
    46 procedure freeEverything(complete:boolean); forward;
    48 {$ENDIF}
    47 {$ENDIF}
    49 
    48 
    50 ////////////////////////////////
    49 ////////////////////////////////
   120             begin
   119             begin
   121             WriteLnToConsole('Screenshot failed.');
   120             WriteLnToConsole('Screenshot failed.');
   122             AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)');
   121             AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)');
   123             end
   122             end
   124         end;
   123         end;
   125 end;
       
   126 
       
   127 ////////////////////
       
   128 procedure OnDestroy;
       
   129 begin
       
   130     WriteLnToConsole('Freeing resources...');
       
   131     FreeActionsList();
       
   132     StoreRelease(false);
       
   133     ControllerClose();
       
   134     CloseIPC();
       
   135     TTF_Quit();
       
   136 {$IFDEF SDL13}
       
   137     SDL_GL_DeleteContext(SDLGLcontext);
       
   138     SDL_DestroyWindow(SDLwindow);
       
   139     SDLGLcontext:= nil;
       
   140     SDLwindow:= nil;
       
   141 {$ENDIF}
       
   142     SDL_Quit();
       
   143 end;
   124 end;
   144 
   125 
   145 ///////////////////
   126 ///////////////////
   146 procedure MainLoop;
   127 procedure MainLoop;
   147 var event: TSDL_Event;
   128 var event: TSDL_Event;
   381         end
   362         end
   382     else
   363     else
   383         LoadRecordFromFile(recordFileName);
   364         LoadRecordFromFile(recordFileName);
   384 
   365 
   385     ScriptOnGameInit;
   366     ScriptOnGameInit;
   386 
       
   387     s:= 'eproto ' + inttostr(cNetProtoVersion);
   367     s:= 'eproto ' + inttostr(cNetProtoVersion);
   388     SendIPCRaw(@s[0], Length(s) + 1); // send proto version
   368     SendIPCRaw(@s[0], Length(s) + 1); // send proto version
   389 
   369 
   390     InitTeams();
   370     InitTeams();
   391     AssignStores();
   371     AssignStores();
   392     InitSound();
   372     InitSound();
   393 
   373 
   394     isDeveloperMode:= false;
   374     isDeveloperMode:= false;
   395     TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
   375     TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
   396     ParseCommand('rotmask', true);
   376     ParseCommand('rotmask', true);
   397 
       
   398     MainLoop();
   377     MainLoop();
   399 
   378 
   400     // clean up SDL and GL context
   379     // clean up all the memory allocated
   401     OnDestroy();
       
   402     // clean up all the other memory allocated
       
   403     freeEverything(true);
   380     freeEverything(true);
   404     if alsoShutdownFrontend then
   381     if alsoShutdownFrontend then
   405         halt;
   382         halt;
   406 end;
   383 end;
   407 
   384 
   412     if complete then
   389     if complete then
   413         cLogfileBase:= 'game'
   390         cLogfileBase:= 'game'
   414     else
   391     else
   415         cLogfileBase:= 'preview';
   392         cLogfileBase:= 'preview';
   416 
   393 
   417     // uConsts does not need initialization as they are all consts
   394     uUtils.initModule;      // this opens the debug file, must be the first
   418     uUtils.initModule;
       
   419     uMisc.initModule;
   395     uMisc.initModule;
   420     uVariables.initModule;
   396     uVariables.initModule;
   421     uConsole.initModule;    // MUST happen after uMisc
   397     uConsole.initModule;
   422     uCommands.initModule;
   398     uCommands.initModule;
   423     uCommandHandlers.initModule;
   399     uCommandHandlers.initModule;
   424 
   400 
   425     uLand.initModule;
   401     uLand.initModule;
   426     uLandPainted.initModule;
   402     uLandPainted.initModule;
   427 
       
   428     uIO.initModule;
   403     uIO.initModule;
   429 
   404 
   430     if complete then
   405     if complete then
   431         begin
   406     begin
   432 {$IFDEF ANDROID}GLUnit.init;{$ENDIF}
   407 {$IFDEF ANDROID}GLUnit.init;{$ENDIF}
   433 {$IFDEF SDL13}uTouch.initModule;{$ENDIF}
   408 {$IFDEF SDL13}uTouch.initModule;{$ENDIF}
   434         uAI.initModule;
   409         uAI.initModule;
   435         //uAIActions does not need initialization
   410         //uAIActions does not need initialization
   436         //uAIAmmoTests does not need initialization
   411         //uAIAmmoTests does not need initialization
   454         uStore.initModule;
   429         uStore.initModule;
   455         uTeams.initModule;
   430         uTeams.initModule;
   456         uVisualGears.initModule;
   431         uVisualGears.initModule;
   457         uWorld.initModule;
   432         uWorld.initModule;
   458         uCaptions.initModule;
   433         uCaptions.initModule;
   459         end;
   434     end;
   460 end;
   435 end;
   461 
   436 
   462 procedure freeEverything (complete:boolean);
   437 procedure freeEverything (complete:boolean);
   463 begin
   438 begin
   464     if complete then
   439     if complete then
   465         begin
   440     begin
       
   441         WriteLnToConsole('Freeing resources...');
       
   442         uAI.freeModule;
       
   443         uAIMisc.freeModule;         //stub
   466         uCaptions.freeModule;
   444         uCaptions.freeModule;
   467         uWorld.freeModule;
   445         uWorld.freeModule;
   468         uVisualGears.freeModule;
   446         uVisualGears.freeModule;
   469         uTeams.freeModule;
   447         uTeams.freeModule;
   470         uStore.freeModule;          //stub
   448         uInputHandler.freeModule;
   471         uStats.freeModule;          //stub
   449         uStats.freeModule;          //stub
   472         uSound.freeModule;
   450         uSound.freeModule;
   473         uScript.freeModule;
   451         uScript.freeModule;
   474         uRandom.freeModule;         //stub
   452         uRandom.freeModule;         //stub
   475         //uLocale does not need to be freed
   453         //uLocale does not need to be freed
   476         //uLandTemplates does not need to be freed
   454         //uLandTemplates does not need to be freed
   477         uLandTexture.freeModule;
   455         uLandTexture.freeModule;
   478         //uLandObjects does not need to be freed
   456         //uLandObjects does not need to be freed
   479         //uLandGraphics does not need to be freed
   457         //uLandGraphics does not need to be freed
   480         uInputHandler.freeModule;           //stub
       
   481         uGears.freeModule;
   458         uGears.freeModule;
   482         //uGame does not need to be freed
   459         //uGame does not need to be freed
   483         //uFloat does not need to be freed
   460         //uFloat does not need to be freed
   484         uCollisions.freeModule;     //stub
   461         uCollisions.freeModule;     //stub
   485         uChat.freeModule;
   462         uChat.freeModule;
   486         uAmmos.freeModule;
   463         uAmmos.freeModule;
   487         uAIMisc.freeModule;         //stub
       
   488         //uAIAmmoTests does not need to be freed
   464         //uAIAmmoTests does not need to be freed
   489         //uAIActions does not need to be freed
   465         //uAIActions does not need to be freed
   490         uAI.freeModule;             //stub
   466         uStore.freeModule;
   491         end;
   467     end;
   492 
   468 
   493     uIO.freeModule;             //stub
   469     uIO.freeModule;
   494     uLand.freeModule;
   470     uLand.freeModule;
   495     uLandPainted.freeModule;
   471     uLandPainted.freeModule;
   496 
   472 
   497     uCommandHandlers.freeModule;
   473     uCommandHandlers.freeModule;
   498     uCommands.freeModule;
   474     uCommands.freeModule;
   502     uMisc.freeModule;           // uMisc closes the debug log.
   478     uMisc.freeModule;           // uMisc closes the debug log.
   503 end;
   479 end;
   504 
   480 
   505 /////////////////////////
   481 /////////////////////////
   506 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   482 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   507 var
   483 var Preview: TPreview;
   508     Preview: TPreview;
       
   509 begin
   484 begin
   510     initEverything(false);
   485     initEverything(false);
   511 {$IFDEF HWLIBRARY}
   486 {$IFDEF HWLIBRARY}
   512     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   487     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   513     ipcPort:= port;
   488     ipcPort:= port;
   520     Preview:= GenPreview();
   495     Preview:= GenPreview();
   521     WriteLnToConsole('Sending preview...');
   496     WriteLnToConsole('Sending preview...');
   522     SendIPCRaw(@Preview, sizeof(Preview));
   497     SendIPCRaw(@Preview, sizeof(Preview));
   523     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   498     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   524     WriteLnToConsole('Preview sent, disconnect');
   499     WriteLnToConsole('Preview sent, disconnect');
   525     CloseIPC();
       
   526     freeEverything(false);
   500     freeEverything(false);
   527 end;
   501 end;
   528 
   502 
   529 {$IFNDEF HWLIBRARY}
   503 {$IFNDEF HWLIBRARY}
   530 /////////////////////
   504 /////////////////////