Ignore:
Timestamp:
Apr 21, 2024, 10:57:18 AM (4 weeks ago)
Author:
chronos
Message:
  • Fixed: Bad unit drawing in battle dialog.
  • Modified: Code cleanup.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LocalPlayer/IsoEngine.pas

    r538 r548  
    3636      Diry: array [0..7] of Integer = (-1, 0, 1, 2, 1, 0, -1, -2);
    3737    procedure CityGrid(xm, ym: Integer; CityAllowClick: Boolean);
     38    procedure ClippedLine(X, Y, dx0, dy0: Integer; Mirror: Boolean);
    3839    function IsShoreTile(Loc: Integer): Boolean;
    3940    procedure MakeDark(Line: PPixelPointer; Length: Integer);
     
    10531054  CityInfo: TCityInfo;
    10541055  UnitInfo: TUnitInfo;
    1055   fog: Boolean;
     1056  Fog: Boolean;
    10561057  SpecialRow: Integer;
    10571058  SpecialCol: Integer;
     
    11921193
    11931194  if moEditMode in MapOptions then
    1194     fog := (Loc < 0) or (Loc >= G.lx * G.ly)
    1195     // else if CityLoc>=0 then
    1196     // fog:= (Loc<0) or (Loc>=G.lx*G.ly) or (Distance(Loc,CityLoc)>5)
     1195    Fog := (Loc < 0) or (Loc >= G.lx * G.ly)
     1196    // else if CityLoc >= 0 then
     1197    // Fog:= (Loc < 0) or (Loc >= G.lx * G.ly) or (Distance(Loc, CityLoc) > 5)
    11971198  else if ShowGrWall then
    1198     fog := Tile and fGrWall = 0
     1199    Fog := Tile and fGrWall = 0
    11991200  else
    1200     fog := FoW and (Tile and fObserved = 0);
    1201   if fog and ShowObjects then
     1201    Fog := FoW and (Tile and fObserved = 0);
     1202  if Fog and ShowObjects then
    12021203    if Loc < -G.lx then
    12031204      Sprite(HGrTerrain, X, Y + yyt, xxt * 2, yyt, 1 + 6 * (xxt * 2 + 1),
     
    12981299end;
    12991300
     1301procedure TIsoMap.ClippedLine(X, Y, dx0, dy0: Integer; Mirror: Boolean);
     1302var
     1303  x0, x1, dxmin, dymin, dxmax, dymax, N: Integer;
     1304begin
     1305  with FOutput.Canvas do
     1306  begin
     1307    dxmin := (FLeft - X) div xxt;
     1308    dymin := (RealTop - Y) div yyt;
     1309    dxmax := (FRight - X - 1) div xxt + 1;
     1310    dymax := (RealBottom - Y - 1) div yyt + 1;
     1311    N := dymax - dy0;
     1312    if Mirror then
     1313    begin
     1314      if dx0 - dxmin < N then
     1315        N := dx0 - dxmin;
     1316      if dx0 > dxmax then
     1317      begin
     1318        N := N - (dx0 - dxmax);
     1319        dy0 := dy0 + (dx0 - dxmax);
     1320        dx0 := dxmax;
     1321      end;
     1322      if dy0 < dymin then
     1323      begin
     1324        N := N - (dymin - dy0);
     1325        dx0 := dx0 - (dymin - dy0);
     1326        dy0 := dymin;
     1327      end;
     1328    end
     1329    else
     1330    begin
     1331      if dxmax - dx0 < N then
     1332        N := dxmax - dx0;
     1333      if dx0 < dxmin then
     1334      begin
     1335        N := N - (dxmin - dx0);
     1336        dy0 := dy0 + (dxmin - dx0);
     1337        dx0 := dxmin;
     1338      end;
     1339      if dy0 < dymin then
     1340      begin
     1341        N := N - (dymin - dy0);
     1342        dx0 := dx0 + (dymin - dy0);
     1343        dy0 := dymin;
     1344      end;
     1345    end;
     1346    if N <= 0 then
     1347      Exit;
     1348    if Mirror then
     1349    begin
     1350      x0 := X + dx0 * xxt - 1;
     1351      x1 := X + (dx0 - N) * xxt - 1;
     1352    end
     1353    else
     1354    begin
     1355      x0 := X + dx0 * xxt;
     1356      x1 := X + (dx0 + N) * xxt;
     1357    end;
     1358    MoveTo(x0, Y + dy0 * yyt);
     1359    LineTo(x1, Y + (dy0 + N) * yyt);
     1360  end;
     1361end;
     1362
    13001363procedure TIsoMap.PaintGrid(X, Y, nx, ny: Integer);
    1301 
    1302   procedure ClippedLine(dx0, dy0: Integer; Mirror: Boolean);
    1303   var
    1304     x0, x1, dxmin, dymin, dxmax, dymax, N: Integer;
    1305   begin
    1306     with FOutput.Canvas do
    1307     begin
    1308       dxmin := (FLeft - X) div xxt;
    1309       dymin := (RealTop - Y) div yyt;
    1310       dxmax := (FRight - X - 1) div xxt + 1;
    1311       dymax := (RealBottom - Y - 1) div yyt + 1;
    1312       N := dymax - dy0;
    1313       if Mirror then
    1314       begin
    1315         if dx0 - dxmin < N then
    1316           N := dx0 - dxmin;
    1317         if dx0 > dxmax then
    1318         begin
    1319           N := N - (dx0 - dxmax);
    1320           dy0 := dy0 + (dx0 - dxmax);
    1321           dx0 := dxmax;
    1322         end;
    1323         if dy0 < dymin then
    1324         begin
    1325           N := N - (dymin - dy0);
    1326           dx0 := dx0 - (dymin - dy0);
    1327           dy0 := dymin;
    1328         end;
    1329       end
    1330       else
    1331       begin
    1332         if dxmax - dx0 < N then
    1333           N := dxmax - dx0;
    1334         if dx0 < dxmin then
    1335         begin
    1336           N := N - (dxmin - dx0);
    1337           dy0 := dy0 + (dxmin - dx0);
    1338           dx0 := dxmin;
    1339         end;
    1340         if dy0 < dymin then
    1341         begin
    1342           N := N - (dymin - dy0);
    1343           dx0 := dx0 + (dymin - dy0);
    1344           dy0 := dymin;
    1345         end;
    1346       end;
    1347       if N <= 0 then
    1348         Exit;
    1349       if Mirror then
    1350       begin
    1351         x0 := X + dx0 * xxt - 1;
    1352         x1 := X + (dx0 - N) * xxt - 1;
    1353       end
    1354       else
    1355       begin
    1356         x0 := X + dx0 * xxt;
    1357         x1 := X + (dx0 + N) * xxt;
    1358       end;
    1359       MoveTo(x0, Y + dy0 * yyt);
    1360       LineTo(x1, Y + (dy0 + N) * yyt);
    1361     end;
    1362   end;
    1363 
    13641364var
    13651365  I: Integer;
    13661366begin
    1367   FOutput.Canvas.pen.Color := $000000; // $FF shl (8 * Random(3));
     1367  FOutput.Canvas.Pen.Color := $000000; // $FF shl (8 * Random(3));
    13681368  for I := 0 to nx div 2 do
    1369     ClippedLine(I * 2, 0, False);
     1369    ClippedLine(X, Y, I * 2, 0, False);
    13701370  for I := 1 to (nx + 1) div 2 do
    1371     ClippedLine(I * 2, 0, True);
     1371    ClippedLine(X, Y, I * 2, 0, True);
    13721372  for I := 0 to ny div 2 do
    13731373  begin
    1374     ClippedLine(0, 2 * I + 2, False);
    1375     ClippedLine(nx + 1, 2 * I + 1 + nx and 1, True);
     1374    ClippedLine(X, Y, 0, 2 * I + 2, False);
     1375    ClippedLine(X, Y, nx + 1, 2 * I + 1 + nx and 1, True);
    13761376  end;
    13771377end;
     
    14251425    if Abs(y_n) < rShade then begin
    14261426      // Darken left and right parts of elipsis
    1427       w_n := sqrt(sqr(rShade) - sqr(y_n));
    1428       wBright := trunc(w_n * xxt + 0.5);
     1427      w_n := Sqrt(Sqr(rShade) - Sqr(y_n));
     1428      wBright := Trunc(w_n * xxt + 0.5);
    14291429      Line.SetX(0);
    14301430      MakeDark(@Line, ScaleToNative(xm - wBright));
Note: See TracChangeset for help on using the changeset viewer.