Changeset 235 for trunk/UMapType.pas


Ignore:
Timestamp:
Sep 20, 2018, 11:44:42 AM (6 years ago)
Author:
chronos
Message:
  • Added: Show map multiple times side by side in cyclic mode.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UMapType.pas

    r232 r235  
    77uses
    88  Classes, SysUtils, XMLRead, XMLWrite, DOM, UGeometry, fgl, UMap;
    9 
    10 const
    11   SquareCellMulX = 1.05;
    12   SquareCellMulY = 1.05;
    13   TriangleCellMulX = 0.55;
    14   TriangleCellMulY = 1.05;
    159
    1610type
     
    3226    function GetHexagonPolygon(Pos: TPoint; Size: TPoint): TPolygon;
    3327  public
     28    function CalculatePixelRect: TRect; override;
    3429    procedure LoadFromFile(FileName: string); override;
    3530    procedure SaveToFile(FileName: string); override;
     
    4136  TSquareMap = class(TMap)
    4237  private
     38    const
     39      CellMulX = 1.05;
     40      CellMulY = 1.05;
    4341    function GetSquarePolygon(Pos: TPoint; Size: TPoint): TPolygon;
    4442  public
    4543    procedure Generate; override;
     44    function CalculatePixelRect: TRect; override;
    4645  end;
    4746
     
    5049  TTriangleMap = class(TMap)
    5150  private
     51    const
     52      CellMulX = 0.55;
     53      CellMulY = 1.05;
    5254    function GetTrianglePolygon(Pos: TPoint; Size: TPoint; Reverse: Boolean): TPolygon;
    5355  public
    5456    procedure Generate; override;
     57    function CalculatePixelRect: TRect; override;
    5558  end;
    5659
     
    6164  public
    6265    procedure Generate; override;
     66    function CalculatePixelRect: TRect; override;
    6367  end;
    6468
     
    7377  public
    7478    procedure Generate; override;
     79    function CalculatePixelRect: TRect; override;
    7580  end;
    7681
     
    147152
    148153  FPixelRect := CalculatePixelRect;
     154end;
     155
     156function TIsometricMap.CalculatePixelRect: TRect;
     157begin
     158  Result := inherited CalculatePixelRect;
     159  Result.P2 := Result.P2 - TPoint.Create(
     160    Trunc(0.45 * DefaultCellSize.X / CellMulX),
     161    Trunc(0.90 * DefaultCellSize.Y / CellMulY)
     162  );
    149163end;
    150164
     
    165179  Result.Points[4] := TPoint.Create(Trunc(Pos.X - Shift.X * Size.X), Trunc(Pos.Y + Shift.Y * Size.Y));
    166180  Result.Points[5] := TPoint.Create(Trunc(Pos.X - Shift.X * Size.X), Trunc(Pos.Y - Shift.Y * Size.Y));
     181end;
     182
     183function THexMap.CalculatePixelRect: TRect;
     184var
     185  Shift: TPointF;
     186  Angle: Double;
     187begin
     188  Result := inherited CalculatePixelRect;
     189  Angle := 30 / 180 * Pi;
     190  Shift := TPointF.Create(0.5, 0.5) * TPointF.Create(Cos(Angle), Sin(Angle));
     191  Result.P2 := Result.P2 - TPoint.Create(
     192    Trunc(0.47 * DefaultCellSize.X / CellMulX),
     193    Trunc(1.2 * Shift.Y * DefaultCellSize.Y / CellMulY)
     194  );
    167195end;
    168196
     
    293321    NewCell := TCell.Create;
    294322    NewCell.Map := Self;
    295     NewCell.PosPx := TPoint.Create(Trunc(X * DefaultCellSize.X * SquareCellMulX),
    296       Trunc(Y * DefaultCellSize.Y * SquareCellMulY));
     323    NewCell.PosPx := TPoint.Create(Trunc(X * DefaultCellSize.X * CellMulX),
     324      Trunc(Y * DefaultCellSize.Y * CellMulY));
    297325    NewCell.Polygon := GetSquarePolygon(NewCell.PosPx, DefaultCellSize);
    298326    NewCell.Id := GetNewCellId;
     
    330358
    331359  FPixelRect := CalculatePixelRect;
     360end;
     361
     362function TSquareMap.CalculatePixelRect: TRect;
     363begin
     364  Result := inherited CalculatePixelRect;
     365  Result.P2 := Result.P2 + TPoint.Create(
     366    Trunc(0.05 * DefaultCellSize.X / CellMulX),
     367    Trunc(0.05 * DefaultCellSize.Y / CellMulY)
     368  );
    332369end;
    333370
     
    413450end;
    414451
     452function TVoronoiMap.CalculatePixelRect: TRect;
     453begin
     454  Result := inherited CalculatePixelRect;
     455  Result.P2 := Result.P2 + TPoint.Create(
     456    Trunc(0.02 * DefaultCellSize.X),
     457    Trunc(0.02 * DefaultCellSize.Y)
     458  );
     459end;
     460
    415461{ TTriangleMap }
    416462
     
    447493    if Reverse then Rev := -1
    448494      else Rev := 1;
    449     NewCell.PosPx := TPoint.Create(Trunc(X * DefaultCellSize.X * TriangleCellMulX),
    450       Trunc((Y * DefaultCellSize.Y * TriangleCellMulY) - (0.1 * Rev * DefaultCellSize.Y)));
     495    NewCell.PosPx := TPoint.Create(Trunc(X * DefaultCellSize.X * CellMulX),
     496      Trunc((Y * DefaultCellSize.Y * CellMulY) - (0.1 * Rev * DefaultCellSize.Y)));
    451497    NewCell.Polygon := GetTrianglePolygon(NewCell.PosPx, DefaultCellSize, Reverse);
    452498    NewCell.Id := GetNewCellId;
     
    483529end;
    484530
     531function TTriangleMap.CalculatePixelRect: TRect;
     532begin
     533  Result := inherited CalculatePixelRect;
     534  Result.P2 := Result.P2 + TPoint.Create(
     535    Trunc(0.05 * DefaultCellSize.X / CellMulX - 0.30 * DefaultCellSize.X / CellMulX),
     536    Trunc(0.05 * DefaultCellSize.Y / CellMulY)
     537  );
     538end;
     539
    485540
    486541end.
Note: See TracChangeset for help on using the changeset viewer.