hedgewars/hwengine.pas
branchqmlfrontend
changeset 12876 b544bbbd0696
parent 12860 e33bcb9d5e9c
child 12883 adb1fccc706a
--- 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.