Changeset 165 for trunk/UGame.pas
- Timestamp:
- Nov 22, 2017, 4:48:33 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UGame.pas
r164 r165 7 7 uses 8 8 Classes, SysUtils, ExtCtrls, Graphics, XMLConf, XMLRead, XMLWrite, 9 DOM, Math, LazFileUtils, UXMLUtils, Dialogs, Types, LCLType, LCLIntf, fgl; 9 DOM, Math, LazFileUtils, UXMLUtils, Dialogs, Types, LCLType, LCLIntf, fgl, 10 UGeometry; 10 11 11 12 const … … 60 61 Mark: Boolean; // Temporary value 61 62 Weight: Integer; // Temporary value 63 Angle: Double; // Temporary value 62 64 Links: TCellLinks; 65 procedure ConnectTo(Cell: TCell); 66 procedure DisconnectFrom(Cell: TCell); 63 67 procedure Check; 64 68 function NeighboringToVoid: Boolean; … … 93 97 procedure ClearMark; 94 98 procedure ClearWeight; 99 function ToString: ansistring; override; 95 100 end; 96 101 … … 115 120 procedure LoadFromNode(Node: TDOMNode); 116 121 procedure SaveToNode(Node: TDOMNode); 122 end; 123 124 { TCellLinkParams } 125 126 TCellLinkParams = class 127 Cell1: TCell; 128 Cell2: TCell; 129 Distance: Double; 130 Angle: Double; 117 131 end; 118 132 … … 187 201 FNewCellId: Integer; 188 202 function GetNewCellId: Integer; virtual; 203 procedure SortNeighborsByAngle; 189 204 public 190 205 Game: TGame; … … 1032 1047 Player.Game.Map.PaintCell(Canvas, Cell.MapCell.PosPx, '', View, Cell.MapCell); 1033 1048 end; 1034 1035 {// Draw links to neighbors 1049 end; 1050 1051 { // Draw links to neighbors 1052 for Cell in Cells do begin 1036 1053 for NeighCell in Cell.MapCell.Neighbors do begin 1037 1054 Pen.Color := clYellow; … … 1039 1056 LineTo(View.CellToCanvasPos(NeighCell.PosPx)); 1040 1057 end; 1041 } 1042 end; 1043 1058 1059 Font.Color := clRed; 1060 Brush.Style := bsClear; 1061 TextOut(View.CellToCanvasPos(Cell.MapCell.PosPx).X, 1062 View.CellToCanvasPos(Cell.MapCell.PosPx).Y, IntToStr(Cell.MapCell.Id)); 1063 end; 1064 } 1044 1065 // Draw arrows 1045 1066 Pen.Color := clCream; … … 1166 1187 end; 1167 1188 1189 function TCells.ToString: ansistring; 1190 var 1191 C: TCell; 1192 begin 1193 Result := ''; 1194 for C in Self do 1195 Result := Result + IntToStr(C.Id) + ', '; 1196 end; 1197 1168 1198 { TPlayers } 1169 1199 … … 1353 1383 FSize := AValue; 1354 1384 if FUpdateCount = 0 then Generate; 1385 end; 1386 end; 1387 1388 function CompareCellAngle(const C1, C2: TCell): Integer; 1389 begin 1390 if C1.Angle < C2.Angle then Result := -1 1391 else if C1.Angle > C2.Angle then Result := 1 1392 else Result := 0; 1393 end; 1394 1395 procedure TMap.SortNeighborsByAngle; 1396 var 1397 Cell: TCell; 1398 NeighborCell: TCell; 1399 begin 1400 for Cell in Cells do begin 1401 for NeighborCell in Cell.Neighbors do 1402 NeighborCell.Angle := ArcTan2Point(Point( 1403 NeighborCell.PosPx.X - Cell.PosPx.X, 1404 NeighborCell.PosPx.Y - Cell.PosPx.Y)); 1405 1406 Cell.Neighbors.Sort(CompareCellAngle); 1355 1407 end; 1356 1408 end; … … 1896 1948 FPower := AValue; 1897 1949 //Check; 1950 end; 1951 1952 procedure TCell.ConnectTo(Cell: TCell); 1953 begin 1954 Cell.Neighbors.Add(Self); 1955 Neighbors.Add(Cell); 1956 end; 1957 1958 procedure TCell.DisconnectFrom(Cell: TCell); 1959 var 1960 I: Integer; 1961 begin 1962 I := Cell.Neighbors.IndexOf(Self); 1963 if I >= 0 then Cell.Neighbors.Delete(I) else 1964 raise Exception.Create('Can''t disconnect neigboring cells.'); 1965 I := Neighbors.IndexOf(Cell); 1966 if I >= 0 then Neighbors.Delete(I) 1967 else Exception.Create('Can''t disconnect neigboring cells.'); 1898 1968 end; 1899 1969
Note:
See TracChangeset
for help on using the changeset viewer.