hedgewars/uFLGameConfig.pas
branchqmlfrontend
changeset 10428 7c25297720f1
parent 10426 727a154cf784
child 10430 899a30018ede
equal deleted inserted replaced
10426:727a154cf784 10428:7c25297720f1
     1 unit uFLGameConfig;
     1 unit uFLGameConfig;
     2 
       
     3 interface
     2 interface
       
     3 uses uFLTypes;
     4 
     4 
     5 procedure resetGameConfig; cdecl; export;
     5 procedure resetGameConfig; cdecl; export;
     6 procedure runQuickGame; cdecl; export;
     6 procedure runQuickGame; cdecl; export;
     7 procedure getPreview; cdecl; export;
     7 procedure getPreview; cdecl; export;
     8 
     8 
       
     9 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; export;
       
    10 
     9 implementation
    11 implementation
       
    12 uses uFLIPC, hwengine;
       
    13 
       
    14 var guiCallbackPointer: pointer;
       
    15     guiCallbackFunction: TGUICallback;
    10 
    16 
    11 const
    17 const
    12     MAXCONFIGS = 5;
    18     MAXCONFIGS = 5;
    13     MAXARGS = 32;
    19     MAXARGS = 32;
    14 
    20 
    52 
    58 
    53     with pConfig^ do
    59     with pConfig^ do
    54         for i:= 0 to Pred(MAXARGS) do
    60         for i:= 0 to Pred(MAXARGS) do
    55         begin
    61         begin
    56             if arguments[i][0] = #255 then 
    62             if arguments[i][0] = #255 then 
    57                 arguments[i][255] = #0
    63                 arguments[i][255]:= #0
    58             else
    64             else
    59                 arguments[i][byte(arguments[i][0]) + 1] = #0;
    65                 arguments[i][byte(arguments[i][0]) + 1]:= #0;
    60             argv[i]:= @arguments[i][1]
    66             argv[i]:= @arguments[i][1]
    61         end;
    67         end;
    62 
    68 
    63     RunEngine(pConfig^.argumentsNumber, @pConfig^.argv);
    69     RunEngine(pConfig^.argumentsNumber, @pConfig^.argv);
    64 end;
    70 end;
    79         gameType:= gtPreview;
    85         gameType:= gtPreview;
    80         arguments[0]:= '';
    86         arguments[0]:= '';
    81         arguments[1]:= '--internal';
    87         arguments[1]:= '--internal';
    82         arguments[2]:= '--landpreview';
    88         arguments[2]:= '--landpreview';
    83         argumentsNumber:= 3;
    89         argumentsNumber:= 3;
       
    90 
       
    91         queueExecution;
       
    92 
       
    93         ipcToEngine('eseed ' + seed);
       
    94         ipcToEngine('e$mapgen 0');
       
    95         ipcToEngine('!');
    84     end;
    96     end;
       
    97 end;
    85 
    98 
    86     queueExecution
    99 procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword);
       
   100 begin
       
   101     if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len)
       
   102 end;
       
   103 
       
   104 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; export;
       
   105 begin
       
   106     guiCallbackPointer:= p;
       
   107     guiCallbackFunction:= f;
       
   108 
       
   109     registerIPCCallback(nil, @engineMessageCallback)
    87 end;
   110 end;
    88 
   111 
    89 end.
   112 end.