hedgewars/hwengine.pas
branchqmlfrontend
changeset 12876 b544bbbd0696
parent 12860 e33bcb9d5e9c
child 12883 adb1fccc706a
equal deleted inserted replaced
12863:fe16fa088b69 12876:b544bbbd0696
    34      {$IFDEF ANDROID}, GLUnit{$ENDIF}
    34      {$IFDEF ANDROID}, GLUnit{$ENDIF}
    35      {$IFDEF WIN32}, dynlibs{$ENDIF}
    35      {$IFDEF WIN32}, dynlibs{$ENDIF}
    36      ;
    36      ;
    37 
    37 
    38 function  RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export;
    38 function  RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export;
       
    39 function GameTick(delta: Longword): boolean; cdecl; export;
       
    40 
    39 procedure preInitEverything();
    41 procedure preInitEverything();
    40 procedure initEverything(complete:boolean);
    42 procedure initEverything(complete:boolean);
    41 procedure freeEverything(complete:boolean);
    43 procedure freeEverything(complete:boolean);
    42 
    44 
    43 implementation
    45 implementation
   359         WriteLnToConsole(msgOK);
   361         WriteLnToConsole(msgOK);
   360         end;
   362         end;
   361 
   363 
   362     if not allOK then exit;
   364     if not allOK then exit;
   363     //SDL_StartTextInput();
   365     //SDL_StartTextInput();
   364     SDL_ShowCursor(0);
   366     //SDL_ShowCursor(0);
   365 
   367 
   366 
   368 
   367 {$IFDEF USE_VIDEO_RECORDING}
   369 {$IFDEF USE_VIDEO_RECORDING}
   368     if GameType = gmtRecord then
   370     if GameType = gmtRecord then
   369         InitOffscreenOpenGL()
   371         InitOffscreenOpenGL()
   437         RecorderMainLoop();
   439         RecorderMainLoop();
   438         exit;
   440         exit;
   439     end;
   441     end;
   440 {$ENDIF}
   442 {$ENDIF}
   441 
   443 
   442     MainLoop;
   444     //MainLoop;
   443 end;
   445 end;
   444 
   446 
   445 procedure Game;
   447 procedure Game;
   446 begin
   448 begin
   447     initEverything(true);
   449     initEverything(true);
   587 
   589 
   588     sendUI(mtGameFinished, nil, 0);
   590     sendUI(mtGameFinished, nil, 0);
   589     EngineThread:= 0
   591     EngineThread:= 0
   590 end;
   592 end;
   591 
   593 
       
   594 type TRunState = (rsVoid, rsInit, rsRun);
       
   595 var runState: TRunState;
   592 
   596 
   593 function RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export;
   597 function RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export;
   594 var t: PSDL_Thread;
   598 var t: PSDL_Thread;
   595 begin
   599 begin
   596     operatingsystem_parameter_argc:= argc;
   600     operatingsystem_parameter_argc:= argc;
   597     operatingsystem_parameter_argv:= argv;
   601     operatingsystem_parameter_argv:= argv;
       
   602 
       
   603     runState:= rsInit;
   598 
   604 
   599 {$IFDEF WIN32}
   605 {$IFDEF WIN32}
   600     ShcoreLibHandle := LoadLibrary('Shcore.dll');
   606     ShcoreLibHandle := LoadLibrary('Shcore.dll');
   601     if (ShcoreLibHandle <> 0) then
   607     if (ShcoreLibHandle <> 0) then
   602     begin
   608     begin
   616 
   622 
   617     if GameType = gmtSyntax then
   623     if GameType = gmtSyntax then
   618         RunEngine:= HaltUsageError
   624         RunEngine:= HaltUsageError
   619     else
   625     else
   620     begin
   626     begin
   621         t:= SDL_CreateThread(@EngineThread, 'engine', nil);
   627         //t:= SDL_CreateThread(@EngineThread, 'engine', nil);
   622         SDL_DetachThread(t);
   628         //SDL_DetachThread(t);
   623         RunEngine:= 0
   629         RunEngine:= 0
   624     end
   630     end
   625 end;
   631 end;
   626 
   632 
       
   633 function GameTick(delta: Longword): boolean; cdecl; export;
       
   634 begin
       
   635     GameTick:= true;
       
   636     case runState of
       
   637         rsInit: begin
       
   638                 system.writeln('[[]] rsInit');
       
   639         initEverything(true);
       
   640         SendIPC('TG');
       
   641         GameRoutine;
       
   642         runState:= rsRun;
       
   643             end;
       
   644         rsRun: begin
       
   645                 system.writeln('[[]] rsRun');
       
   646                 if DoTimer(delta) then begin
       
   647                     system.writeln('[[]] Cleaning up');
       
   648                     // clean up all the memory allocated
       
   649                     freeEverything(true);
       
   650                     runState:= rsVoid;
       
   651                     GameTick:= false
       
   652                 end;
       
   653             end;
       
   654     end;
       
   655 end;
       
   656 
   627 end.
   657 end.