equal
deleted
inserted
replaced
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. |