hedgewars/uFLGameConfig.pas
branchqmlfrontend
changeset 10448 4cb727e029fa
parent 10446 7ae44f42a689
child 10450 bf9e30b4ef9b
equal deleted inserted replaced
10446:7ae44f42a689 10448:4cb727e029fa
     2 interface
     2 interface
     3 uses uFLTypes;
     3 uses uFLTypes;
     4 
     4 
     5 procedure resetGameConfig; cdecl;
     5 procedure resetGameConfig; cdecl;
     6 procedure runQuickGame; cdecl;
     6 procedure runQuickGame; cdecl;
       
     7 procedure runLocalGame; cdecl;
     7 procedure getPreview; cdecl;
     8 procedure getPreview; cdecl;
     8 
     9 
     9 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl;
    10 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl;
    10 
    11 
    11 procedure setSeed(seed: PChar); cdecl;
    12 procedure setSeed(seed: PChar); cdecl;
    13 
    14 
    14 procedure tryAddTeam(teamName: PChar);
    15 procedure tryAddTeam(teamName: PChar);
    15 procedure tryRemoveTeam(teamName: PChar);
    16 procedure tryRemoveTeam(teamName: PChar);
    16 
    17 
    17 implementation
    18 implementation
    18 uses uFLIPC, hwengine, uFLUtils, uFLTeams;
    19 uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData;
    19 
    20 
    20 var guiCallbackPointer: pointer;
    21 var guiCallbackPointer: pointer;
    21     guiCallbackFunction: TGUICallback;
    22     guiCallbackFunction: TGUICallback;
    22 
    23 
    23 const
    24 const
   102 procedure setSeed(seed: PChar); cdecl;
   103 procedure setSeed(seed: PChar); cdecl;
   103 begin
   104 begin
   104     currentConfig.seed:= seed
   105     currentConfig.seed:= seed
   105 end;
   106 end;
   106 
   107 
       
   108 
   107 function getSeed: PChar; cdecl;
   109 function getSeed: PChar; cdecl;
   108 begin
   110 begin
   109     getSeed:= str2PChar(currentConfig.seed)
   111     getSeed:= str2PChar(currentConfig.seed)
       
   112 end;
       
   113 
       
   114 function getUnusedColor: shortstring;
       
   115 var i, c: Longword;
       
   116     fColorMatched: boolean;
       
   117 begin
       
   118     c:= 0;
       
   119     i:= 0;
       
   120     repeat
       
   121         repeat
       
   122             fColorMatched:= (currentConfig.teams[i].hogsNumber > 0) and (currentConfig.teams[i].color = colorsSet[c]);
       
   123             inc(i)
       
   124         until (i >= 8) or (currentConfig.teams[i].hogsNumber = 0) or fColorMatched;
       
   125 
       
   126         if fColorMatched then
       
   127         begin
       
   128             i:= 0;
       
   129             inc(c)
       
   130         end;
       
   131     until not fColorMatched;
       
   132 
       
   133     getUnusedColor:= colorsSet[c]
   110 end;
   134 end;
   111 
   135 
   112 procedure runQuickGame; cdecl;
   136 procedure runQuickGame; cdecl;
   113 begin
   137 begin
   114     with currentConfig do
   138     with currentConfig do
   115     begin
   139     begin
   116         gameType:= gtLocal;
   140         gameType:= gtLocal;
   117         arguments[0]:= '';
   141         arguments[0]:= '';
   118         arguments[1]:= '--internal';
   142         arguments[1]:= '--internal';
   119         arguments[2]:= '--nosound';
   143         arguments[2]:= '--nomusic';
   120         argumentsNumber:= 3;
   144         argumentsNumber:= 3;
   121 
   145 
   122         teams[0]:= createRandomTeam;
   146         teams[0]:= createRandomTeam;
   123         teams[0].color:= '6341088';
   147         teams[0].color:= colorsSet[0];
   124         teams[1]:= createRandomTeam;
   148         teams[1]:= createRandomTeam;
   125         teams[1].color:= '2113696';
   149         teams[1].color:= colorsSet[1];
   126         teams[1].botLevel:= 1;
   150         teams[1].botLevel:= 1;
   127 
   151 
   128         queueExecution;
   152         queueExecution;
   129     end;
   153     end;
   130 end;
   154 end;
       
   155 
   131 
   156 
   132 procedure getPreview; cdecl;
   157 procedure getPreview; cdecl;
   133 begin
   158 begin
   134     with currentConfig do
   159     with currentConfig do
   135     begin
   160     begin
   141 
   166 
   142         queueExecution;
   167         queueExecution;
   143     end;
   168     end;
   144 end;
   169 end;
   145 
   170 
       
   171 procedure runLocalGame; cdecl;
       
   172 begin
       
   173     with currentConfig do
       
   174     begin
       
   175         gameType:= gtLocal;
       
   176         arguments[0]:= '';
       
   177         arguments[1]:= '--internal';
       
   178         arguments[2]:= '--nomusic';
       
   179         argumentsNumber:= 3;
       
   180 
       
   181         queueExecution;
       
   182     end;
       
   183 end;
       
   184 
       
   185 
   146 procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword);
   186 procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword);
   147 begin
   187 begin
   148     if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len)
   188     if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len)
   149 end;
   189 end;
   150 
   190 
   159 
   199 
   160 procedure tryAddTeam(teamName: PChar);
   200 procedure tryAddTeam(teamName: PChar);
   161 var msg: ansistring;
   201 var msg: ansistring;
   162     i, hn, hedgehogsNumber: Longword;
   202     i, hn, hedgehogsNumber: Longword;
   163     team: PTeam;
   203     team: PTeam;
       
   204     c: shortstring;
   164 begin
   205 begin
   165     with currentConfig do
   206     with currentConfig do
   166     begin
   207     begin
   167         hedgehogsNumber:= 0;
   208         hedgehogsNumber:= 0;
   168         i:= 0;
   209         i:= 0;
   176         // no free space for a team or reached hogs number maximum
   217         // no free space for a team or reached hogs number maximum
   177         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   218         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   178 
   219 
   179         team:= teamByName(teamName);
   220         team:= teamByName(teamName);
   180         if team = nil then exit;
   221         if team = nil then exit;
       
   222 
       
   223         c:= getUnusedColor;
   181 
   224 
   182         teams[i]:= team^;
   225         teams[i]:= team^;
   183 
   226 
   184         if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber;
   227         if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber;
   185         if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber;
   228         if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber;
   186         teams[i].hogsNumber:= hn;
   229         teams[i].hogsNumber:= hn;
       
   230 
       
   231         teams[i].color:= c;
   187     end;
   232     end;
   188 
   233 
   189 
   234 
   190     msg:= '0' + #10 + teamName;
   235     msg:= '0' + #10 + teamName;
   191 
   236 
   193 
   238 
   194     msg:= teamName;
   239     msg:= teamName;
   195 
   240 
   196     guiCallbackFunction(guiCallbackPointer, mtRemoveTeam, @msg[1], length(msg))
   241     guiCallbackFunction(guiCallbackPointer, mtRemoveTeam, @msg[1], length(msg))
   197 end;
   242 end;
       
   243 
   198 
   244 
   199 procedure tryRemoveTeam(teamName: PChar);
   245 procedure tryRemoveTeam(teamName: PChar);
   200 var msg: ansistring;
   246 var msg: ansistring;
   201 begin
   247     i: Longword;
       
   248     tn: shortstring;
       
   249 begin
       
   250     with currentConfig do
       
   251     begin
       
   252         i:= 0;
       
   253         tn:= teamName;
       
   254         while (i < 8) and (teams[i].teamName <> tn) do
       
   255             inc(i);
       
   256 
       
   257         // team not found???
       
   258         if (i > 7) then exit;
       
   259 
       
   260         while (i < 7) and (teams[i + 1].hogsNumber > 0) do
       
   261         begin
       
   262             teams[i]:= teams[i + 1];
       
   263             inc(i)
       
   264         end;
       
   265 
       
   266         teams[i].hogsNumber:= 0
       
   267     end;
       
   268 
   202     msg:= teamName;
   269     msg:= teamName;
   203 
   270 
   204     guiCallbackFunction(guiCallbackPointer, mtRemovePlayingTeam, @msg[1], length(msg));
   271     guiCallbackFunction(guiCallbackPointer, mtRemovePlayingTeam, @msg[1], length(msg));
   205     guiCallbackFunction(guiCallbackPointer, mtAddTeam, @msg[1], length(msg))
   272     guiCallbackFunction(guiCallbackPointer, mtAddTeam, @msg[1], length(msg))
   206 end;
   273 end;