Changeset 21
- Timestamp:
- Mar 1, 2014, 5:39:22 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Languages/xtactics.po
r20 r21 34 34 msgstr "" 35 35 36 #: uformmain.splayerwins 37 msgid "Player %s wins" 38 msgstr "" 39 -
trunk/UFormMain.pas
r20 r21 76 76 UFormNew, UFormMove; 77 77 78 resourcestring 79 SPlayerWins = 'Player %s wins'; 80 78 81 {$R *.lfm} 79 82 … … 84 87 if Game.Running then 85 88 with Game.CurrentPlayer do begin 86 View := Bounds(View.Left, View.Top, PaintBox1.Width, 87 PaintBox1.Height); 89 ViewSize := Point(PaintBox1.Width, PaintBox1.Height); 88 90 Paint(PaintBox1); 89 91 end; … … 98 100 if Assigned(Game.CurrentPlayer) then 99 101 with Game.CurrentPlayer do 100 View := Bounds(View.Left + (View.Right - View.Left) div 2 - PaintBox1.Width div 2, 101 View.Top + (View.Bottom - View.Top) div 2 - PaintBox1.Height div 2, 102 PaintBox1.Width, PaintBox1.Height); 102 ViewSize := Point(PaintBox1.Width, PaintBox1.Height); 103 103 Redraw; 104 104 end; 105 105 106 106 procedure TFormMain.Timer1Timer(Sender: TObject); 107 var 108 NewCaption: string; 107 109 begin 108 110 if RedrawPending then begin 109 111 RedrawPending := False; 110 112 PaintBox1.Repaint; 111 Caption := Game.CurrentPlayer.Name + ' - turn ' + IntToStr(Game.TurnCounter) + ' - xTactics'; 113 114 NewCaption := 'xTactics'; 115 if Assigned(Game.CurrentPlayer) then 116 NewCaption := Game.CurrentPlayer.Name + ' - turn ' + IntToStr(Game.TurnCounter) + ' - ' + NewCaption; 117 Caption := NewCaption; 112 118 end; 113 119 end; … … 128 134 procedure TFormMain.DoOnWin(Player: TPlayer); 129 135 begin 130 ShowMessage( 'Player ' + Player.Name + ' wins');136 ShowMessage(Format(SPlayerWins, [Player.Name])); 131 137 end; 132 138 … … 188 194 189 195 procedure TFormMain.FormShow(Sender: TObject); 190 begin 196 var 197 I: Integer; 198 begin 199 for I := 0 to Game.Players.Count - 1 do 200 TPlayer(Game.Players[I]).ViewSize := Point(PaintBox1.Canvas.Width, PaintBox1.Canvas.Height); 191 201 Game.New; 202 Game.Running := True; 192 203 Redraw; 193 204 end; … … 199 210 if Game.CurrentPlayer.Mode = pmHuman then begin 200 211 StartMousePoint := Point(X, Y); 201 StartViewPoint := Point(Game.CurrentPlayer.View.Left, Game.CurrentPlayer.View.Top);212 StartViewPoint := Game.CurrentPlayer.CellPos; 202 213 MoveActive := True; 203 214 end; … … 215 226 if MoveActive then begin 216 227 if Game.CurrentPlayer.Mode = pmHuman then begin 217 Game.CurrentPlayer.View := Bounds(StartViewPoint.X + StartMousePoint.X - X, 218 StartViewPoint.Y + StartMousePoint.Y - Y, 219 Game.CurrentPlayer.View.Right - Game.CurrentPlayer.View.Left, 220 Game.CurrentPlayer.View.Bottom - Game.CurrentPlayer.View.Top); 228 Game.CurrentPlayer.CellPos := Point(Trunc(StartViewPoint.X + (StartMousePoint.X - X) / Game.CurrentPlayer.ViewZoom), 229 Trunc(StartViewPoint.Y + (StartMousePoint.Y - Y) / Game.CurrentPlayer.ViewZoom)); 221 230 Redraw; 222 231 end; … … 242 251 begin 243 252 with Game.CurrentPlayer do begin 244 D := Point(Trunc(MousePos.X - Game.CurrentPlayer.View.Left / ViewZoom),245 Trunc(MousePos.Y - Game.CurrentPlayer.View.Top / ViewZoom));253 //D := Point(Trunc(MousePos.X - View.Left / ViewZoom), 254 // Trunc(MousePos.Y - View.Top / ViewZoom)); 246 255 ViewZoom := ViewZoom / ZoomFactor; 247 256 //View := Bounds(Trunc((D.X - MousePos.X) * ViewZoom), -
trunk/UGame.pas
r20 r21 55 55 DefaultCellSize: TPoint; 56 56 Cells: array of array of TCell; 57 function PosToCell(Pos: TPoint; Rect: TRect; Zoom: Double 58 ): TCell; 59 function CellToPos(Cell: TCell; Rect: TRect; Zoom: Double 60 ): TPoint; 57 function PosToCell(Pos: TPoint; Rect: TRect; Zoom: Double): TCell; 58 function CellToPos(Cell: TCell; Rect: TRect; Zoom: Double): TPoint; 61 59 function GetHexagonPolygon(Pos: TPoint; HexSize: TPoint): TPointArray; 62 60 procedure Paint(Canvas: TCanvas; Rect: TRect; Zoom: Double; SelectedCell: TCell); … … 77 75 Game: TGame; 78 76 Name: string; 79 View: TRect; 77 CellPos: TPoint; 78 ViewSize: TPoint; 80 79 Color: TColor; 81 80 ViewZoom: Double; … … 85 84 TotalCells: Integer; 86 85 StartUnits: Integer; 86 function CanvasToCellPos(Pos: TPoint): TPoint; 87 function CellToCanvasPos(Pos: TPoint): TPoint; 88 function CanvasToCellRect(Pos: TRect): TRect; 89 function CellToCanvasRect(Pos: TRect): TRect; 87 90 procedure ComputerTurn; 88 91 procedure SelectCell(Pos: TPoint); … … 222 225 { TPlayer } 223 226 227 function TPlayer.CanvasToCellPos(Pos: TPoint): TPoint; 228 begin 229 Result := Point(Trunc(Pos.X / ViewZoom + CellPos.X), 230 Trunc(Pos.Y / ViewZoom + CellPos.Y)); 231 end; 232 233 function TPlayer.CellToCanvasPos(Pos: TPoint): TPoint; 234 begin 235 Result := Point(Trunc((Pos.X - CellPos.X) * ViewZoom), 236 Trunc((Pos.Y - CellPos.Y) * ViewZoom)); 237 end; 238 239 function TPlayer.CanvasToCellRect(Pos: TRect): TRect; 240 begin 241 Result.TopLeft := CanvasToCellPos(Pos.TopLeft); 242 Result.BottomRight := CanvasToCellPos(Pos.BottomRight); 243 end; 244 245 function TPlayer.CellToCanvasRect(Pos: TRect): TRect; 246 begin 247 Result.TopLeft := CellToCanvasPos(Pos.TopLeft); 248 Result.BottomRight := CellToCanvasPos(Pos.BottomRight); 249 end; 250 224 251 procedure TPlayer.ComputerTurn; 225 252 begin … … 230 257 var 231 258 NewSelectedCell: TCell; 232 begin 233 NewSelectedCell := Game.Map.PosToCell(Pos, View, ViewZoom); 259 TopLeft: TPoint; 260 BottomRight: TPoint; 261 begin 262 NewSelectedCell := Game.Map.PosToCell(CanvasToCellPos(Pos), CanvasToCellRect(Bounds(0, 0, ViewSize.X, ViewSize.Y)), ViewZoom); 234 263 if Assigned(NewSelectedCell) then begin 235 264 if Assigned(SelectedCell) and IsCellsNeighbor(NewSelectedCell, SelectedCell) then begin … … 247 276 procedure TPlayer.Paint(PaintBox: TPaintBox); 248 277 begin 249 Game.Map.Paint(PaintBox.Canvas, View, ViewZoom, SelectedCell);278 Game.Map.Paint(PaintBox.Canvas, CanvasToCellRect(Bounds(0, 0, ViewSize.X, ViewSize.Y)), ViewZoom, SelectedCell); 250 279 end; 251 280 … … 460 489 ViewZoom := 1; 461 490 // Center board 462 View := Bounds(-(View.Right - View.Left) div 2 + Map.GetPixelSize.X div 2, 463 -(View.Bottom - View.Top) div 2 + Map.GetPixelSize.Y div 2, 464 View.Right - View.Left, 465 View.Bottom - View.Top); 491 CellPos := Point(Trunc(Map.GetPixelSize.X div 2 - ViewSize.X div 2 / ViewZoom), 492 Trunc(Map.GetPixelSize.Y div 2 - ViewSize.Y div 2 / ViewZoom)); 466 493 end; 467 494 CurrentPlayer := TPlayer(Players[0]); … … 516 543 Points: array of TPoint; 517 544 begin 545 // TODO: This is implemented as simple sequence lookup. It needs some faster algorithm 518 546 Result := nil; 519 547 CellSize := FloatPoint(DefaultCellSize.X / 1.15 * Zoom, DefaultCellSize.Y / 1.35 * Zoom);
Note:
See TracChangeset
for help on using the changeset viewer.