--- 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.