diff -r fe16fa088b69 -r b544bbbd0696 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Wed Dec 27 00:59:26 2017 +0100 +++ b/hedgewars/hwengine.pas Tue Jan 02 23:45:18 2018 +0100 @@ -36,6 +36,8 @@ ; function RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export; +function GameTick(delta: Longword): boolean; cdecl; export; + procedure preInitEverything(); procedure initEverything(complete:boolean); procedure freeEverything(complete:boolean); @@ -361,7 +363,7 @@ if not allOK then exit; //SDL_StartTextInput(); - SDL_ShowCursor(0); + //SDL_ShowCursor(0); {$IFDEF USE_VIDEO_RECORDING} @@ -439,7 +441,7 @@ end; {$ENDIF} - MainLoop; + //MainLoop; end; procedure Game; @@ -589,6 +591,8 @@ EngineThread:= 0 end; +type TRunState = (rsVoid, rsInit, rsRun); +var runState: TRunState; function RunEngine(argc: LongInt; argv: PPChar): Longint; cdecl; export; var t: PSDL_Thread; @@ -596,6 +600,8 @@ operatingsystem_parameter_argc:= argc; operatingsystem_parameter_argv:= argv; + runState:= rsInit; + {$IFDEF WIN32} ShcoreLibHandle := LoadLibrary('Shcore.dll'); if (ShcoreLibHandle <> 0) then @@ -618,10 +624,34 @@ RunEngine:= HaltUsageError else begin - t:= SDL_CreateThread(@EngineThread, 'engine', nil); - SDL_DetachThread(t); + //t:= SDL_CreateThread(@EngineThread, 'engine', nil); + //SDL_DetachThread(t); RunEngine:= 0 end end; +function GameTick(delta: Longword): boolean; cdecl; export; +begin + GameTick:= true; + case runState of + rsInit: begin + system.writeln('[[]] rsInit'); + initEverything(true); + SendIPC('TG'); + GameRoutine; + runState:= rsRun; + end; + rsRun: begin + system.writeln('[[]] rsRun'); + if DoTimer(delta) then begin + system.writeln('[[]] Cleaning up'); + // clean up all the memory allocated + freeEverything(true); + runState:= rsVoid; + GameTick:= false + end; + end; + end; +end; + end.