hedgewars/hwengine.pas
changeset 3525 1d7b056ff866
parent 3523 6592fbb969da
child 3594 aeca3d8f1b29
equal deleted inserted replaced
3523:6592fbb969da 3525:1d7b056ff866
    73 var isTerminated: boolean = false;
    73 var isTerminated: boolean = false;
    74     alsoShutdownFrontend: boolean = false;
    74     alsoShutdownFrontend: boolean = false;
    75 {$IFDEF HWLIBRARY}
    75 {$IFDEF HWLIBRARY}
    76 type arrayofpchar = array[0..8] of PChar;
    76 type arrayofpchar = array[0..8] of PChar;
    77 
    77 
    78 procedure initEverything;
    78 procedure initEverything(complete:boolean);
    79 procedure freeEverything;
    79 procedure freeEverything(complete:boolean);
    80 
    80 
    81 implementation
    81 implementation
    82 {$ELSE}
    82 {$ELSE}
    83 procedure OnDestroy; forward;
    83 procedure OnDestroy; forward;
    84 procedure freeEverything; forward;
    84 procedure freeEverything(complete:boolean); forward;
    85 {$ENDIF}
    85 {$ENDIF}
    86 
    86 
    87 ////////////////////////////////
    87 ////////////////////////////////
    88 procedure DoTimer(Lag: LongInt);
    88 procedure DoTimer(Lag: LongInt);
    89 {$IFNDEF IPHONEOS}
    89 {$IFNDEF IPHONEOS}
   241 {$ENDIF}
   241 {$ENDIF}
   242 var p: TPathType;
   242 var p: TPathType;
   243     s: shortstring;
   243     s: shortstring;
   244 begin
   244 begin
   245 {$IFDEF HWLIBRARY}
   245 {$IFDEF HWLIBRARY}
   246     initEverything();
   246     initEverything(true);
   247 
   247 
   248     cBits:= 32;
   248     cBits:= 32;
   249     cFullScreen:= false;
   249     cFullScreen:= false;
   250     cVSyncInUse:= true;
   250     cVSyncInUse:= true;
   251     cTimerInterval:= 8;
   251     cTimerInterval:= 8;
   329 
   329 
   330     ParseCommand('rotmask', true);
   330     ParseCommand('rotmask', true);
   331 
   331 
   332     MainLoop();
   332     MainLoop();
   333     OnDestroy();
   333     OnDestroy();
   334 {$IFDEF HWLIBRARY}freeEverything();{$ENDIF}
   334 {$IFDEF HWLIBRARY}freeEverything(true);{$ENDIF}
   335     if alsoShutdownFrontend then halt;
   335     if alsoShutdownFrontend then halt;
   336 end;
   336 end;
   337 
   337 
   338 procedure initEverything;
   338 procedure initEverything (complete:boolean);
   339 begin
   339 begin
   340     Randomize();
   340     Randomize();
   341 
   341 
   342     uConsts.initModule;
   342     uConsts.initModule;
   343     uMisc.initModule;
   343     uMisc.initModule;
   344     uConsole.initModule;    // MUST happen after uMisc
   344     uConsole.initModule;    // MUST happen after uMisc
       
   345 
       
   346     uLand.initModule;
       
   347     uIO.initModule;
   345     
   348     
   346     uAI.initModule;
   349     if complete then
   347     //uAIActions does not need initialization
   350     begin
   348     //uAIAmmoTests does not need initialization
   351         uAI.initModule;
   349     uAIMisc.initModule;
   352         //uAIActions does not need initialization
   350     uAmmos.initModule;
   353         //uAIAmmoTests does not need initialization
   351     uChat.initModule;
   354         uAIMisc.initModule;
   352     uCollisions.initModule;
   355         uAmmos.initModule;
   353     //uFloat does not need initialization
   356         uChat.initModule;
   354     //uGame does not need initialization
   357         uCollisions.initModule;
   355     uGears.initModule;
   358         //uFloat does not need initialization
   356     uIO.initModule;
   359         //uGame does not need initialization
   357     uKeys.initModule;
   360         uGears.initModule;
   358     uLand.initModule;
   361         uKeys.initModule;
   359     //uLandGraphics does not need initialization
   362         //uLandGraphics does not need initialization
   360     //uLandObjects does not need initialization
   363         //uLandObjects does not need initialization
   361     //uLandTemplates does not need initialization
   364         //uLandTemplates does not need initialization
   362     //uLandTexture does not need initialization
   365         //uLandTexture does not need initialization
   363     //uLocale does not need initialization
   366         //uLocale does not need initialization
   364     uRandom.initModule; 
   367         uRandom.initModule; 
   365     //uSHA is initialized internally
   368         //uSHA is initialized internally
   366     uSound.initModule;
   369         uScript.initModule;
   367     uStats.initModule;
   370         uSound.initModule;
   368     uStore.initModule;
   371         uStats.initModule;
   369     uTeams.initModule;
   372         uStore.initModule;
   370     uVisualGears.initModule;
   373         uTeams.initModule;
   371     uWorld.initModule;
   374         uVisualGears.initModule;
   372     uScript.initModule;
   375         uWorld.initModule;
   373 end;
   376     end;
   374 
   377 end;
   375 procedure freeEverything;
   378 
   376 begin
   379 procedure freeEverything (complete:boolean);
   377     uWorld.freeModule;
   380 begin
   378     uVisualGears.freeModule;    //stub
   381     if complete then
   379     uTeams.freeModule;
   382     begin
   380     uStore.freeModule;          //stub
   383         uWorld.freeModule;
   381     uStats.freeModule;          //stub
   384         uVisualGears.freeModule;    //stub
   382     uSound.freeModule;          //stub
   385         uTeams.freeModule;
   383     //uSHA does not need to be freed
   386         uStore.freeModule;          //stub
   384     uRandom.freeModule;         //stub
   387         uStats.freeModule;          //stub
   385     //uLocale does not need to be freed
   388         uSound.freeModule;          //stub
   386     //uLandTemplates does not need to be freed
   389         uScript.freeModule;
   387     //uLandTexture does not need to be freed
   390         //uSHA does not need to be freed
   388     //uLandObjects does not need to be freed
   391         uRandom.freeModule;         //stub
   389     //uLandGraphics does not need to be freed
   392         //uLocale does not need to be freed
       
   393         //uLandTemplates does not need to be freed
       
   394         //uLandTexture does not need to be freed
       
   395         //uLandObjects does not need to be freed
       
   396         //uLandGraphics does not need to be freed
       
   397         uKeys.freeModule;           //stub
       
   398         uGears.freeModule;
       
   399         //uGame does not need to be freed
       
   400         //uFloat does not need to be freed
       
   401         uCollisions.freeModule;     //stub
       
   402         uChat.freeModule;           //stub
       
   403         uAmmos.freeModule;
       
   404         uAIMisc.freeModule;         //stub
       
   405         //uAIAmmoTests does not need to be freed
       
   406         //uAIActions does not need to be freed
       
   407         uAI.freeModule;             //stub
       
   408     end;
       
   409     
       
   410     uIO.freeModule;             //stub
   390     uLand.freeModule;
   411     uLand.freeModule;
   391     uKeys.freeModule;           //stub
       
   392     uIO.freeModule;             //stub
       
   393     uGears.freeModule;
       
   394     //uGame does not need to be freed
       
   395     //uFloat does not need to be freed
       
   396     uCollisions.freeModule;     //stub
       
   397     uChat.freeModule;           //stub
       
   398     uAmmos.freeModule;
       
   399     uAIMisc.freeModule;         //stub
       
   400     //uAIAmmoTests does not need to be freed
       
   401     //uAIActions does not need to be freed
       
   402     uAI.freeModule;             //stub
       
   403 
   412 
   404     uConsole.freeModule;
   413     uConsole.freeModule;
       
   414     uMisc.freeModule;           // uMisc closes the debug log.
   405     uConsts.freeModule;         //stub
   415     uConsts.freeModule;         //stub
   406     uScript.freeModule;
       
   407     // uMisc closes the debug log.
       
   408     uMisc.freeModule;
       
   409 end;
   416 end;
   410 
   417 
   411 /////////////////////////
   418 /////////////////////////
   412 procedure GenLandPreview{$IFDEF IPHONEOS}(port: LongInt){$ENDIF}; {$IFDEF HWLIBRARY}cdecl; export;{$ENDIF}
   419 procedure GenLandPreview{$IFDEF IPHONEOS}(port: LongInt){$ENDIF}; {$IFDEF HWLIBRARY}cdecl; export;{$ENDIF}
   413 var Preview: TPreview;
   420 var Preview: TPreview;
   414 begin
   421 begin
   415 {$IFDEF IPHONEOS}
   422 {$IFDEF IPHONEOS}
   416     initEverything();
   423     initEverything(false);
   417     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   424     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   418     ipcPort:= port;
   425     ipcPort:= port;
   419 {$ENDIF}
   426 {$ENDIF}
   420     InitIPC;
   427     InitIPC;
   421     IPCWaitPongEvent;
   428     IPCWaitPongEvent;
   426     SendIPCRaw(@Preview, sizeof(Preview));
   433     SendIPCRaw(@Preview, sizeof(Preview));
   427     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   434     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   428     WriteLnToConsole('Preview sent, disconnect');
   435     WriteLnToConsole('Preview sent, disconnect');
   429     CloseIPC();
   436     CloseIPC();
   430 {$IFDEF IPHONEOS}
   437 {$IFDEF IPHONEOS}
   431     freeEverything();
   438     freeEverything(false);
   432 {$ENDIF}
   439 {$ENDIF}
   433 end;
   440 end;
   434 
   441 
   435 {$IFNDEF HWLIBRARY}
   442 {$IFNDEF HWLIBRARY}
   436 ////////////////////////////////
   443 ////////////////////////////////
   594 
   601 
   595 ////////////////////////////////////////////////////////////////////////////////
   602 ////////////////////////////////////////////////////////////////////////////////
   596 /////////////////////////////// m a i n ////////////////////////////////////////
   603 /////////////////////////////// m a i n ////////////////////////////////////////
   597 ////////////////////////////////////////////////////////////////////////////////
   604 ////////////////////////////////////////////////////////////////////////////////
   598 begin
   605 begin
   599     initEverything();
   606     initEverything(true);
   600     WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
   607     WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
   601     
   608     
   602     GetParams();
   609     GetParams();
   603 
   610 
   604     if GameType = gmtLandPreview then GenLandPreview()
   611     if GameType = gmtLandPreview then GenLandPreview()
   605     else if GameType = gmtSyntax then DisplayUsage()
   612     else if GameType = gmtSyntax then DisplayUsage()
   606     else Game();
   613     else Game();
   607     
   614     
   608     freeEverything();
   615     freeEverything(true);
   609     if GameType = gmtSyntax then
   616     if GameType = gmtSyntax then
   610         ExitCode:= 1
   617         ExitCode:= 1
   611     else
   618     else
   612         ExitCode:= 0;
   619         ExitCode:= 0;
   613 {$ENDIF}
   620 {$ENDIF}