summaryrefslogtreecommitdiff
path: root/src/T2DLL/UT2Coordinate.h
blob: b2d319d51e3ff872d869fc83a6709f722142d89b (plain)
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
#pragma once
#include "common.h"

class AFX_CLASS_EXPORT UT2Coordinate {
public:
	static void UnitToQD(int& ioV, int& ioH, int inZoomLevel = 0);
	static void UnitToQD(POINT& ioPoint, int inZoomLevel = 0, BOOL inExcludeRoof = false);
	static void UnitToQD(RECT& ioRect, int inZoomLevel = 0, BOOL inExcludeRoofAndFloor = false);
	static void UnitToQD(const RECT& inUnitRect, RECT& outQDRect, int inZoomLevel = 0, BOOL inExcludeRoofAndFloor = false);
	static void UnitToQDRoof(const RECT& inUnitRect, RECT& outQDRect, int inZoomLevel = 0);
	static void UnitToQDFloor(const RECT& inUnitRect, RECT& outQDRect, int inZoomLevel = 0);
	static void UnitToOffRect(const RECT& inUnitRect, RECT& outQDRect, int inHeight = 0);
	static void QDToUnit(int& ioV, int& ioH, int inZoomLevel = 0);
	static void QDToUnit(POINT& ioPoint, int inZoomLevel = 0);
	static void QDToUnit(SDimension16& ioSize, int inZoomLevel = 0);
	static void QDToUnit(RECT& ioRect, int inZoomLevel = 0);
	static void QDToUnit(const RECT& inQDRect, RECT& outUnitRect, int inZoomLevel = 0);
	static void NoRoofQDToUnit(const RECT& inQDRect, RECT& outUnitRect, int inZoomLevel = 0);
	static void BkgndToQD(int& ioV, int& ioH, int inZoomLevel = 0);
	static void BkgndToQD(POINT& ioPoint, int inZoomLevel = 0);
	static void BkgndToQD(RECT& ioRect, int inZoomLevel = 0);
	static void BkgndToQD(const RECT& inBkgndRect, RECT& outQDRect, int inZoomLevel = 0);
	static void QDToBkgnd(int& ioV, int& ioH, int inZoomLevel = 0);
	static void QDToBkgnd(POINT& ioPoint, int inZoomLevel = 0);
	static void QDToBkgnd(SDimension16& ioSize, int inZoomLevel = 0);
	static void QDToBkgnd(RECT& ioRect, int inZoomLevel = 0);
	static void QDToBkgnd(const RECT& inQDRect, RECT& outBkgndRect, int inZoomLevel = 0);
	static void UnitToBkgnd(const RECT& inUnitRect, RECT& outBkgndRect);
	static void BkgndToUnit(const RECT& inBkgndRect, RECT& outUnitRect);
	static void MakeRect(RECT& outRect, const POINT& inPoint, const SDimension16& inSize);
	static void MakeRect(RECT& outRect, const POINT& inPoint, int inWidth, int inHeight);
	static void MakeRect(RECT& outRect, int inWidth, int inHeight);
	static void MakeCenterRect(RECT& outRect, const POINT& inPoint, int inWidth, int inHeight);
	static void AddRect(RECT& ioRectA, const RECT& inRectB);
	static void SubRect(RECT& ioRectA, const RECT& inRectB);
	static void ZoomOut(RECT& ioRect, int inZoomLevel);

	static int UnitVSize(int inZoomLevel) { return 36 >> inZoomLevel; }
	static int UnitHSize(int inZoomLevel) { return 8 >> inZoomLevel; }
	static int BkgndVSize(int inZoomLevel) { return 72 >> inZoomLevel; }
	static int BkgndHSize(int inZoomLevel) { return 64 >> inZoomLevel; }
	static int CalcRoofThick(int inZoomLevel) { return 8U >> inZoomLevel; }
	static int CalcFloorThick(int inZoomLevel) { return 4U >> inZoomLevel; }
	static void QDToOff(POINT& ioPt, int inZoomLevel) {
		ioPt.y <<= inZoomLevel;
		ioPt.x <<= inZoomLevel;
	}
	static int RectWidth(const RECT& inRect) { return inRect.right - inRect.left; }
};