1 #include "UILayout.h"
2 
3 #include "MapScreen.h"
4 #include "Soldier_Control.h"
5 #include "JAScreens.h"
6 
7 #define MIN_INTERFACE_WIDTH       640
8 #define MIN_INTERFACE_HEIGHT      480
9 
10 /**
11  * Default screen layout.
12  * It might be changed later when the window size is known for sure. */
13 UILayout g_ui(MIN_INTERFACE_WIDTH, MIN_INTERFACE_HEIGHT);
14 
15 
16 /** Constructor. */
UILayout(UINT16 screenWidth,UINT16 screenHeight)17 UILayout::UILayout(UINT16 screenWidth, UINT16 screenHeight)
18 	:m_mapScreenWidth(MIN_INTERFACE_WIDTH), m_mapScreenHeight(MIN_INTERFACE_HEIGHT),
19 	m_screenWidth(screenWidth), m_screenHeight(screenHeight)
20 {
21 	recalculatePositions();
22 }
23 
24 
25 /** Set new screen size.
26  * This method should be called before most of the application initialization is done. */
setScreenSize(UINT16 width,UINT16 height)27 bool UILayout::setScreenSize(UINT16 width, UINT16 height)
28 {
29 	if((width >= MIN_INTERFACE_WIDTH) && (height >= MIN_INTERFACE_HEIGHT))
30 	{
31 		m_screenWidth = width;
32 		m_screenHeight = height;
33 		recalculatePositions();
34 		return true;
35 	}
36 	return false;
37 }
38 
39 
40 /** Check if the screen is bigger than original 640x480. */
isBigScreen()41 bool UILayout::isBigScreen()
42 {
43 	return (m_screenWidth > 640) || (m_screenHeight > 480);
44 }
45 
46 
currentHeight()47 UINT16 UILayout::currentHeight()             { return fInMapMode ? (STD_SCREEN_Y + m_mapScreenHeight) : m_screenHeight; }
get_CLOCK_X()48 UINT16 UILayout::get_CLOCK_X()               { return fInMapMode ? (STD_SCREEN_X + 554) : 554;               }
get_CLOCK_Y()49 UINT16 UILayout::get_CLOCK_Y()               { return currentHeight() - 23;                                  }
get_RADAR_WINDOW_X()50 UINT16 UILayout::get_RADAR_WINDOW_X()        { return fInMapMode ? (STD_SCREEN_X + 543) : 543;               }
get_RADAR_WINDOW_TM_Y()51 UINT16 UILayout::get_RADAR_WINDOW_TM_Y()     { return currentHeight() - 107;                                 }
get_INTERFACE_START_Y()52 UINT16 UILayout::get_INTERFACE_START_Y()     { return m_screenHeight - 120;                                  }
get_INV_INTERFACE_START_Y()53 UINT16 UILayout::get_INV_INTERFACE_START_Y() { return m_screenHeight - 140;                                  }
54 
55 
56 /** Recalculate UI elements' positions after changing screen size. */
recalculatePositions()57 void UILayout::recalculatePositions()
58 {
59 	UINT16 startInvY = get_INV_INTERFACE_START_Y();
60 
61 	m_stdScreenOffsetX            = (m_screenWidth - MIN_INTERFACE_WIDTH) / 2;
62 	m_stdScreenOffsetY            = (m_screenHeight - MIN_INTERFACE_HEIGHT) / 2;
63 
64 	// tactical screen inventory position
65 	m_invSlotPositionTac[HELMETPOS           ].set(344, startInvY +   6);
66 	m_invSlotPositionTac[VESTPOS             ].set(344, startInvY +  35);
67 	m_invSlotPositionTac[LEGPOS              ].set(344, startInvY +  95);
68 	m_invSlotPositionTac[HEAD1POS            ].set(226, startInvY +   6);
69 	m_invSlotPositionTac[HEAD2POS            ].set(226, startInvY +  30);
70 	m_invSlotPositionTac[HANDPOS             ].set(226, startInvY +  84);
71 	m_invSlotPositionTac[SECONDHANDPOS       ].set(226, startInvY + 108);
72 	m_invSlotPositionTac[BIGPOCK1POS         ].set(468, startInvY +   5);
73 	m_invSlotPositionTac[BIGPOCK2POS         ].set(468, startInvY +  29);
74 	m_invSlotPositionTac[BIGPOCK3POS         ].set(468, startInvY +  53);
75 	m_invSlotPositionTac[BIGPOCK4POS         ].set(468, startInvY +  77);
76 	m_invSlotPositionTac[SMALLPOCK1POS       ].set(396, startInvY +   5);
77 	m_invSlotPositionTac[SMALLPOCK2POS       ].set(396, startInvY +  29);
78 	m_invSlotPositionTac[SMALLPOCK3POS       ].set(396, startInvY +  53);
79 	m_invSlotPositionTac[SMALLPOCK4POS       ].set(396, startInvY +  77);
80 	m_invSlotPositionTac[SMALLPOCK5POS       ].set(432, startInvY +   5);
81 	m_invSlotPositionTac[SMALLPOCK6POS       ].set(432, startInvY +  29);
82 	m_invSlotPositionTac[SMALLPOCK7POS       ].set(432, startInvY +  53);
83 	m_invSlotPositionTac[SMALLPOCK8POS       ].set(432, startInvY +  77);
84 
85 	// map screen inventory position
86 	m_invSlotPositionMap[HELMETPOS           ].set(m_stdScreenOffsetX + 204, m_stdScreenOffsetY + 116);
87 	m_invSlotPositionMap[VESTPOS             ].set(m_stdScreenOffsetX + 204, m_stdScreenOffsetY + 145);
88 	m_invSlotPositionMap[LEGPOS              ].set(m_stdScreenOffsetX + 204, m_stdScreenOffsetY + 205);
89 	m_invSlotPositionMap[HEAD1POS            ].set(m_stdScreenOffsetX +  21, m_stdScreenOffsetY + 116);
90 	m_invSlotPositionMap[HEAD2POS            ].set(m_stdScreenOffsetX +  21, m_stdScreenOffsetY + 140);
91 	m_invSlotPositionMap[HANDPOS             ].set(m_stdScreenOffsetX +  21, m_stdScreenOffsetY + 194);
92 	m_invSlotPositionMap[SECONDHANDPOS       ].set(m_stdScreenOffsetX +  21, m_stdScreenOffsetY + 218);
93 	m_invSlotPositionMap[BIGPOCK1POS         ].set(m_stdScreenOffsetX +  98, m_stdScreenOffsetY + 251);
94 	m_invSlotPositionMap[BIGPOCK2POS         ].set(m_stdScreenOffsetX +  98, m_stdScreenOffsetY + 275);
95 	m_invSlotPositionMap[BIGPOCK3POS         ].set(m_stdScreenOffsetX +  98, m_stdScreenOffsetY + 299);
96 	m_invSlotPositionMap[BIGPOCK4POS         ].set(m_stdScreenOffsetX +  98, m_stdScreenOffsetY + 323);
97 	m_invSlotPositionMap[SMALLPOCK1POS       ].set(m_stdScreenOffsetX +  22, m_stdScreenOffsetY + 251);
98 	m_invSlotPositionMap[SMALLPOCK2POS       ].set(m_stdScreenOffsetX +  22, m_stdScreenOffsetY + 275);
99 	m_invSlotPositionMap[SMALLPOCK3POS       ].set(m_stdScreenOffsetX +  22, m_stdScreenOffsetY + 299);
100 	m_invSlotPositionMap[SMALLPOCK4POS       ].set(m_stdScreenOffsetX +  22, m_stdScreenOffsetY + 323);
101 	m_invSlotPositionMap[SMALLPOCK5POS       ].set(m_stdScreenOffsetX +  60, m_stdScreenOffsetY + 251);
102 	m_invSlotPositionMap[SMALLPOCK6POS       ].set(m_stdScreenOffsetX +  60, m_stdScreenOffsetY + 275);
103 	m_invSlotPositionMap[SMALLPOCK7POS       ].set(m_stdScreenOffsetX +  60, m_stdScreenOffsetY + 299);
104 	m_invSlotPositionMap[SMALLPOCK8POS       ].set(m_stdScreenOffsetX +  60, m_stdScreenOffsetY + 323);
105 
106 	m_invCamoRegion.set(SM_BODYINV_X, SM_BODYINV_Y);
107 
108 	m_progress_bar_box.set(STD_SCREEN_X + 5, 2, MIN_INTERFACE_WIDTH - 10, 12);
109 	m_moneyButtonLoc.set(343, startInvY + 11);
110 	m_MoneyButtonLocMap.set(m_stdScreenOffsetX + 174, m_stdScreenOffsetY + 115);
111 
112 	m_VIEWPORT_START_X            = 0;
113 	m_VIEWPORT_START_Y            = 0;
114 	m_VIEWPORT_WINDOW_START_Y     = 0;
115 	m_VIEWPORT_END_X              = m_screenWidth;
116 	m_VIEWPORT_END_Y              = m_screenHeight - 120;
117 	m_VIEWPORT_WINDOW_END_Y       = m_screenHeight - 120;
118 	m_tacticalMapCenterX          = (m_VIEWPORT_END_X - m_VIEWPORT_START_X) / 2;
119 	m_tacticalMapCenterY          = (m_VIEWPORT_END_Y - m_VIEWPORT_START_Y) / 2;
120 
121 	m_wordlClippingRect.set(0, 0, m_screenWidth, m_screenHeight - 120);
122 
123 	m_contractPosition.set(       m_stdScreenOffsetX + 120, m_stdScreenOffsetY +  50);
124 	m_attributePosition.set(      m_stdScreenOffsetX + 220, m_stdScreenOffsetY + 150);
125 	m_trainPosition.set(          m_stdScreenOffsetX + 160, m_stdScreenOffsetY + 150);
126 	m_vehiclePosition.set(        m_stdScreenOffsetX + 160, m_stdScreenOffsetY + 150);
127 	m_repairPosition.set(         m_stdScreenOffsetX + 160, m_stdScreenOffsetY + 150);
128 	m_assignmentPosition.set(     m_stdScreenOffsetX + 120, m_stdScreenOffsetY + 150);
129 	m_squadPosition.set(          m_stdScreenOffsetX + 160, m_stdScreenOffsetY + 150);
130 	m_versionPosition.set(        10, m_screenHeight - 15);
131 }
132 
133 /** Get X position of tactical textbox. */
getTacticalTextBoxX()134 UINT16 UILayout::getTacticalTextBoxX()
135 {
136 
137 	if ( guiCurrentScreen == MAP_SCREEN )
138 	{
139 		return STD_SCREEN_X + 110;
140 	}
141 	else
142 	{
143 		return 110;
144 	}
145 }
146 
147 /** Get Y position of tactical textbox. */
getTacticalTextBoxY()148 UINT16 UILayout::getTacticalTextBoxY()
149 {
150 	if ( guiCurrentScreen == MAP_SCREEN )
151 	{
152 		return DEFAULT_EXTERN_PANEL_Y_POS;
153 	}
154 	else
155 	{
156 		return 20;
157 	}
158 }
159