hedgewars/uFLGameConfig.pas
branchqmlfrontend
changeset 11444 91f8c6ff5bab
parent 11443 5182d44fb733
child 11446 321d0ce43568
equal deleted inserted replaced
11443:5182d44fb733 11444:91f8c6ff5bab
    27 procedure netSetMazeSize(mazesize: LongInt);
    27 procedure netSetMazeSize(mazesize: LongInt);
    28 procedure netSetTemplate(template: LongInt);
    28 procedure netSetTemplate(template: LongInt);
    29 procedure netSetAmmo(name: shortstring; definition: ansistring);
    29 procedure netSetAmmo(name: shortstring; definition: ansistring);
    30 procedure netSetScheme(scheme: TScheme);
    30 procedure netSetScheme(scheme: TScheme);
    31 procedure netAddTeam(team: TTeam);
    31 procedure netAddTeam(team: TTeam);
       
    32 procedure netAcceptedTeam(teamName: shortstring);
    32 procedure netSetTeamColor(team: shortstring; color: Longword);
    33 procedure netSetTeamColor(team: shortstring; color: Longword);
    33 procedure netSetHedgehogsNumber(team: shortstring; hogsNumber: Longword);
    34 procedure netSetHedgehogsNumber(team: shortstring; hogsNumber: Longword);
    34 procedure netRemoveTeam(teamName: shortstring);
    35 procedure netRemoveTeam(teamName: shortstring);
    35 procedure netResetTeams();
    36 procedure netResetTeams();
    36 procedure updatePreviewIfNeeded;
    37 procedure updatePreviewIfNeeded;
    37 
    38 
    38 procedure sendConfig(config: PGameConfig);
    39 procedure sendConfig(config: PGameConfig);
    39 
    40 
    40 implementation
    41 implementation
    41 uses uFLIPC, uFLUtils, uFLTeams, uFLThemes, uFLSChemes, uFLAmmo, uFLUICallback, uFLRunQueue;
    42 uses uFLIPC, uFLUtils, uFLTeams, uFLThemes, uFLSChemes, uFLAmmo, uFLUICallback, uFLRunQueue, uFLNet;
    42 
    43 
    43 var
    44 var
    44     currentConfig: TGameConfig;
    45     currentConfig: TGameConfig;
    45     previewNeedsUpdate: boolean;
    46     previewNeedsUpdate: boolean;
    46 
    47 
   190 var msg: ansistring;
   191 var msg: ansistring;
   191     i, hn, hedgehogsNumber: Longword;
   192     i, hn, hedgehogsNumber: Longword;
   192     team: PTeam;
   193     team: PTeam;
   193     c: Longword;
   194     c: Longword;
   194 begin
   195 begin
       
   196     team:= teamByName(teamName);
       
   197     if team = nil then exit;
       
   198 
       
   199     if isConnected then
       
   200         sendTeam(team^)
       
   201     else
   195     with currentConfig do
   202     with currentConfig do
   196     begin
   203     begin
   197         hedgehogsNumber:= 0;
   204         hedgehogsNumber:= 0;
   198         i:= 0;
   205         i:= 0;
   199 
   206 
   203             inc(hedgehogsNumber, teams[i].hogsNumber)
   210             inc(hedgehogsNumber, teams[i].hogsNumber)
   204         end;
   211         end;
   205 
   212 
   206         // no free space for a team or reached hogs number maximum
   213         // no free space for a team or reached hogs number maximum
   207         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   214         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   208 
       
   209         team:= teamByName(teamName);
       
   210         if team = nil then exit;
       
   211 
   215 
   212         c:= getUnusedColor;
   216         c:= getUnusedColor;
   213 
   217 
   214         teams[i]:= team^;
   218         teams[i]:= team^;
   215 
   219 
   445         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   449         if (i > 7) or (hedgehogsNumber >= 48) then exit;
   446 
   450 
   447         c:= getUnusedColor;
   451         c:= getUnusedColor;
   448 
   452 
   449         teams[i]:= team;
   453         teams[i]:= team;
       
   454         teams[i].extDriven:= true;
   450 
   455 
   451         if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber;
   456         if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber;
   452         if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber;
   457         if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber;
   453         teams[i].hogsNumber:= hn;
   458         teams[i].hogsNumber:= hn;
   454 
   459 
   457         msg:= '0' + #10 + team.teamName;
   462         msg:= '0' + #10 + team.teamName;
   458         sendUI(mtAddPlayingTeam, @msg[1], length(msg));
   463         sendUI(mtAddPlayingTeam, @msg[1], length(msg));
   459 
   464 
   460         msg:= team.teamName + #10 + colorsSet[teams[i].color];
   465         msg:= team.teamName + #10 + colorsSet[teams[i].color];
   461         sendUI(mtTeamColor, @msg[1], length(msg));
   466         sendUI(mtTeamColor, @msg[1], length(msg));
       
   467     end
       
   468 end;
       
   469 
       
   470 procedure netAcceptedTeam(teamName: shortstring);
       
   471 var msg: ansistring;
       
   472     i, hn, hedgehogsNumber: Longword;
       
   473     c: Longword;
       
   474     team: PTeam;
       
   475 begin
       
   476     with currentConfig do
       
   477     begin
       
   478         team:= teamByName(teamName);
       
   479         // no such team???
       
   480         if team = nil then exit;
       
   481 
       
   482         hedgehogsNumber:= 0;
       
   483         i:= 0;
       
   484 
       
   485         while (i < 8) and (teams[i].hogsNumber > 0) do
       
   486         begin
       
   487             inc(i);
       
   488             inc(hedgehogsNumber, teams[i].hogsNumber)
       
   489         end;
       
   490 
       
   491         // no free space for a team - server bug???
       
   492         if (i > 7) or (hedgehogsNumber >= 48) then exit;
       
   493 
       
   494         c:= getUnusedColor;
       
   495 
       
   496         teams[i]:= team^;
       
   497         teams[i].extDriven:= false;
       
   498 
       
   499         if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber;
       
   500         if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber;
       
   501         teams[i].hogsNumber:= hn;
       
   502 
       
   503         teams[i].color:= c;
       
   504 
       
   505         msg:= '0' + #10 + teamName;
       
   506         sendUI(mtAddPlayingTeam, @msg[1], length(msg));
       
   507 
       
   508         msg:= teamName + #10 + colorsSet[teams[i].color];
       
   509         sendUI(mtTeamColor, @msg[1], length(msg));
       
   510 
       
   511         msg:= teamName;
       
   512         sendUI(mtRemoveTeam, @msg[1], length(msg))        
   462     end
   513     end
   463 end;
   514 end;
   464 
   515 
   465 procedure netRemoveTeam(teamName: shortstring);
   516 procedure netRemoveTeam(teamName: shortstring);
   466 var msg: shortstring;
   517 var msg: shortstring;