1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
{
Copyright 2011-2017 Michalis Kamburelis.
This file is part of "Castle Game Engine".
"Castle Game Engine" is free software; see the file COPYING.txt,
included in this distribution, for details about the copyright.
"Castle Game Engine" is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
----------------------------------------------------------------------------
}
{ Game state and window. }
unit GameWindow;
interface
uses CastleWindow,
GameMap;
const
BaseWidth = 70;
BaseHeight = 36;
var
Window: TCastleWindowCustom;
{ Game time, in seconds. Updated in Update. }
GameTime: Single;
Map: TMap;
{ Calculate values suitable for ViewMoveX and ViewMoveY to
see the map point MapX, MapY exactly in the middle.
MapX, Y don't have to be in the range 0...Map.Width/Height - 1. }
procedure ViewMoveToCenterPosition(const MapX, MapY: Integer;
var MoveX, MoveY: Integer);
implementation
procedure ViewMoveToCenterPosition(const MapX, MapY: Integer;
var MoveX, MoveY: Integer);
begin
{ Set MoveX/Y such that point (0, 0) is in the middle. }
MoveX := (Window.Width div 2) - BaseWidth div 2;
MoveY := (Window.Height div 2) - BaseHeight div 2;
{ Now translate such that MapX, MapY is in the middle. }
MoveX -= MapX * BaseWidth;
MoveY -= MapY * (BaseHeight div 2);
if Odd(MapY) then
MoveX -= BaseWidth div 2;
end;
end.
|