hedgewars/hwengine.pas
changeset 7850 fcbb024090a4
parent 7848 775a72905708
child 7857 2bc61f8841a1
child 7896 67217e6108fd
equal deleted inserted replaced
7849:a12155461b34 7850:fcbb024090a4
    48 {$ELSE}
    48 {$ELSE}
    49 procedure initEverything(complete:boolean); forward;
    49 procedure initEverything(complete:boolean); forward;
    50 procedure freeEverything(complete:boolean); forward;
    50 procedure freeEverything(complete:boolean); forward;
    51 {$ENDIF}
    51 {$ENDIF}
    52 
    52 
    53 ////////////////////////////////
    53 ////////////////////////////////////////////////////////////////////////////////
    54 function DoTimer(Lag: LongInt): boolean;
    54 function DoTimer(Lag: LongInt): boolean;
    55 var s: shortstring;
    55 var s: shortstring;
    56 begin
    56 begin
    57     DoTimer:= false;
    57     DoTimer:= false;
    58     inc(RealTicks, Lag);
    58     inc(RealTicks, Lag);
    59 
    59 
    60     case GameState of
    60     case GameState of
    61         gsLandGen:
    61         gsLandGen:
    62             begin
    62             begin
    63             GenMap;
    63             GenMap;
    64             uLandTexture.initModule;
    64             SetLandTexture;
    65             UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false); 
    65             UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false);
    66             uAILandMarks.initModule;
    66             setAILandMarks;
    67             ParseCommand('sendlanddigest', true);
    67             ParseCommand('sendlanddigest', true);
    68             GameState:= gsStart;
    68             GameState:= gsStart;
    69             end;
    69             end;
    70         gsStart:
    70         gsStart:
    71             begin
    71             begin
   136             AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)');
   136             AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)');
   137             end
   137             end
   138         end;
   138         end;
   139 end;
   139 end;
   140 
   140 
   141 ///////////////////
   141 ////////////////////////////////////////////////////////////////////////////////
   142 procedure MainLoop;
   142 procedure MainLoop;
   143 var event: TSDL_Event;
   143 var event: TSDL_Event;
   144     PrevTime, CurrTime: Longword;
   144     PrevTime, CurrTime: Longword;
   145     isTerminated: boolean;
   145     isTerminated: boolean;
   146 {$IFDEF SDL13}
   146 {$IFDEF SDL13}
   308     end;
   308     end;
   309     StopVideoRecording();
   309     StopVideoRecording();
   310 end;
   310 end;
   311 {$ENDIF}
   311 {$ENDIF}
   312 
   312 
   313 ///////////////
   313 ////////////////////////////////////////////////////////////////////////////////
   314 procedure Game{$IFDEF HWLIBRARY}(gameArgs: PPChar); cdecl; export{$ENDIF};
   314 procedure Game{$IFDEF HWLIBRARY}(gameArgs: PPChar); cdecl; export{$ENDIF};
   315 var p: TPathType;
   315 var p: TPathType;
   316     s: shortstring;
   316     s: shortstring;
   317     i: LongInt;
   317     i: LongInt;
   318 begin
   318 begin
   441 
   441 
   442     // clean up all the memory allocated
   442     // clean up all the memory allocated
   443     freeEverything(true);
   443     freeEverything(true);
   444 end;
   444 end;
   445 
   445 
       
   446 ////////////////////////////////////////////////////////////////////////////////
       
   447 // As a rule of thumb, every module that is listed in either initEverything or 
       
   448 // freeEverything should come in pair, even if they are stubs. Only use this 
       
   449 // section for inialising variables and remeber that game args overwrite these,
       
   450 // so handle this section with care. Pay attention to the init/free order too! 
   446 procedure initEverything (complete:boolean);
   451 procedure initEverything (complete:boolean);
   447 begin
   452 begin
   448     Randomize();
   453     Randomize();
   449 
   454 
   450     uUtils.initModule(complete);      // this opens the debug file, must be the first
   455     uUtils.initModule(complete);    // opens the debug file, must be the first
   451     uMisc.initModule;
   456     uVariables.initModule;          // inits all global variables
   452     uVariables.initModule;
   457     uConsole.initModule;            // opens stdout
   453     uConsole.initModule;
   458     uCommands.initModule;           // helps below
   454     uCommands.initModule;
   459     uCommandHandlers.initModule;    // registers all messages from frontend
   455     uCommandHandlers.initModule;
   460 
   456 
   461     uLand.initModule;               // computes land
   457     uLand.initModule;
   462     uLandPainted.initModule;        // computes drawn land
   458     uLandPainted.initModule;
   463     uIO.initModule;                 // sets up sockets
   459     uIO.initModule;
       
   460 
   464 
   461     if complete then
   465     if complete then
   462     begin
   466     begin
   463 {$IFDEF ANDROID}GLUnit.init;{$ENDIF}
   467 {$IFDEF ANDROID}GLUnit.initModule;{$ENDIF}
   464 {$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF}
   468 {$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF}
       
   469 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF}   //stub
   465         uAI.initModule;
   470         uAI.initModule;
   466         //uAIActions does not need initialization
       
   467         //uAIAmmoTests does not need initialization
       
   468         uAIMisc.initModule;
   471         uAIMisc.initModule;
       
   472         uAILandMarks.initModule;    //stub
   469         uAmmos.initModule;
   473         uAmmos.initModule;
       
   474         uCaptions.initModule;
       
   475 
   470         uChat.initModule;
   476         uChat.initModule;
   471         uCollisions.initModule;
   477         uCollisions.initModule;
   472         //uFloat does not need initialization
       
   473         //uGame does not need initialization
       
   474         uGears.initModule;
   478         uGears.initModule;
   475         uInputHandler.initModule;
   479         uInputHandler.initModule;   //stub
   476         //uLandGraphics does not need initialization
   480         uMisc.initModule;
   477         //uLandObjects does not need initialization
   481         uLandTexture.initModule;    //stub
   478         //uLandTemplates does not need initialization
       
   479         //uLocale does not need initialization
       
   480         uScript.initModule;
   482         uScript.initModule;
   481         uSound.initModule;
   483         uSound.initModule;
   482         uStats.initModule;
   484         uStats.initModule;
   483         uStore.initModule;
   485         uStore.initModule;
   484         uTeams.initModule;
   486         uTeams.initModule;
   485         uVisualGears.initModule;
   487         uVisualGears.initModule;
   486         uWorld.initModule;
   488         uWorld.initModule;
   487         uCaptions.initModule;
       
   488     end;
   489     end;
   489 end;
   490 end;
   490 
   491 
   491 procedure freeEverything (complete:boolean);
   492 procedure freeEverything (complete:boolean);
   492 begin
   493 begin
   493     if complete then
   494     if complete then
   494     begin
   495     begin
   495         WriteLnToConsole('Freeing resources...');
   496         WriteLnToConsole('Freeing resources...');
   496         uAI.freeModule;
   497         uAI.freeModule;             // AI things need to be freed first
       
   498         uAIMisc.freeModule;         //stub
   497         uAILandMarks.freeModule;
   499         uAILandMarks.freeModule;
   498         uAIMisc.freeModule;         //stub
       
   499         uCaptions.freeModule;
   500         uCaptions.freeModule;
   500         uWorld.freeModule;
   501         uWorld.freeModule;
   501         uVisualGears.freeModule;
   502         uVisualGears.freeModule;
   502         uTeams.freeModule;
   503         uTeams.freeModule;
   503         uInputHandler.freeModule;
   504         uInputHandler.freeModule;
   504         uStats.freeModule;          //stub
   505         uStats.freeModule;          //stub
   505         uSound.freeModule;
   506         uSound.freeModule;
   506         uScript.freeModule;
   507         uScript.freeModule;
   507         //uRandom does not need to be freed
   508         uMisc.freeModule;
   508         //uLocale does not need to be freed
       
   509         //uLandTemplates does not need to be freed
       
   510         uLandTexture.freeModule;
   509         uLandTexture.freeModule;
   511         //uLandObjects does not need to be freed
       
   512         //uLandGraphics does not need to be freed
       
   513         uGears.freeModule;
   510         uGears.freeModule;
   514         //uGame does not need to be freed
       
   515         //uFloat does not need to be freed
       
   516         uCollisions.freeModule;     //stub
   511         uCollisions.freeModule;     //stub
   517         uChat.freeModule;
   512         uChat.freeModule;
   518         uAmmos.freeModule;
   513         uAmmos.freeModule;
   519         //uAIAmmoTests does not need to be freed
   514         uStore.freeModule;          // closes SDL
   520         //uAIActions does not need to be freed
       
   521         uStore.freeModule;
       
   522 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF}
   515 {$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF}
       
   516 {$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF}  //stub
       
   517 {$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF}
   523     end;
   518     end;
   524 
   519 
   525     uIO.freeModule;
   520     uIO.freeModule;
   526     uLand.freeModule;
   521     uLand.freeModule;
   527     uLandPainted.freeModule;
   522     uLandPainted.freeModule;
   528 
   523 
   529     uCommandHandlers.freeModule;
   524     uCommandHandlers.freeModule;
   530     uCommands.freeModule;
   525     uCommands.freeModule;
   531     uConsole.freeModule;
   526     uConsole.freeModule;            // closes stdout
   532     uVariables.freeModule;
   527     uVariables.freeModule;
   533     uUtils.freeModule;
   528     uUtils.freeModule;              // closes debug file
   534     uMisc.freeModule;           // uMisc closes the debug log.
   529 end;
   535 end;
   530 
   536 
   531 ////////////////////////////////////////////////////////////////////////////////
   537 /////////////////////////
       
   538 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   532 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   539 var Preview: TPreview;
   533 var Preview: TPreview;
   540 begin
   534 begin
   541 {$IFDEF HWLIBRARY}
   535 {$IFDEF HWLIBRARY}
   542     initEverything(false);
   536     initEverything(false);
   555     WriteLnToConsole('Preview sent, disconnect');
   549     WriteLnToConsole('Preview sent, disconnect');
   556     freeEverything(false);
   550     freeEverything(false);
   557 end;
   551 end;
   558 
   552 
   559 {$IFNDEF HWLIBRARY}
   553 {$IFNDEF HWLIBRARY}
   560 /////////////////////
   554 ////////////////////////////////////////////////////////////////////////////////
   561 procedure DisplayUsage;
   555 procedure DisplayUsage;
   562 var i: LongInt;
   556 var i: LongInt;
   563 begin
   557 begin
   564     WriteLn(stdout, 'Wrong argument format: correct configurations is');
   558     WriteLn(stdout, 'Wrong argument format: correct configurations is');
   565     WriteLn(stdout, '');
   559     WriteLn(stdout, '');
   581         Write(stdout, ParamStr(i) + ' ');
   575         Write(stdout, ParamStr(i) + ' ');
   582         
   576         
   583     WriteLn(stdout, '');
   577     WriteLn(stdout, '');
   584 end;
   578 end;
   585 
   579 
   586 ////////////////////
   580 ////////////////////////////////////////////////////////////////////////////////
   587 {$INCLUDE "ArgParsers.inc"}
   581 {$INCLUDE "ArgParsers.inc"}
   588 
   582 
   589 procedure GetParams;
   583 procedure GetParams;
   590 begin
   584 begin
   591     if (ParamCount < 3) then
   585     if (ParamCount < 3) then