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