Subversion Repositories spk

Rev

Rev 242 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
// LCDDisplay.cpp: implementation of the CLCDDisplay class.
2
//
3
//////////////////////////////////////////////////////////////////////
4
 
5
#include "stdafx.h"
6
#include "LCDDisplay.h"
7
//#include "LCDCustomScreen.h"
8
 
9
//////////////////////////////////////////////////////////////////////
10
// Construction/Destruction
11
//////////////////////////////////////////////////////////////////////
12
 
13
CLCDDisplay::CLCDDisplay( CEzLcd *lcd, CX3Data *data )
14
{
15
	int i;
16
	m_bLoading = false;
17
	m_bWaiting = false;
18
	m_bStarted = false;
19
	m_iUpdateCount = 0;
20
	m_pCustomScreen = NULL;
21
 
22
	m_pLcd = lcd;
23
	m_pData = data;
24
 
25
	// icon for stats page
26
    HICON hIcon = static_cast<HICON>(LoadImage(0, _T("x3.ico"), IMAGE_ICON, 32, 32, LR_LOADFROMFILE));
27
    HANDLE icon = m_pLcd->AddIcon(hIcon, 32, 32);
28
    m_pLcd->SetOrigin(icon, 2, 15);
29
 
30
	// first stats page
31
    m_hStatsTitle1 = lcd->AddText ( LG_SCROLLING_TEXT_FAST, LG_MEDIUM, DT_CENTER, 126 );
32
    lcd->SetOrigin ( m_hStatsTitle1, 17, 2);
33
    HANDLE shipsText = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30 );
34
    lcd->SetOrigin ( shipsText, 35, 34);
35
    lcd->SetText ( shipsText, _T("Ships:") );
36
    HANDLE stationsText = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40 );
37
    lcd->SetOrigin ( stationsText, 100, 34);
38
    lcd->SetText ( stationsText, _T("Stations:") );
39
    HANDLE timeText = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 50 );
40
    lcd->SetOrigin ( timeText, 35, 14);
41
    lcd->SetText ( timeText, _T("Game Time:") );
42
    HANDLE accountText = m_pLcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40 );
43
    lcd->SetOrigin ( accountText, 35, 24);
44
    lcd->SetText ( accountText, _T("Credits:") );
45
 
46
	// varible stats
47
    m_hShipsNum = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20 );
48
    lcd->SetOrigin ( m_hShipsNum, 75, 34);
49
    m_hStationsNum = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20 );
50
    lcd->SetOrigin ( m_hStationsNum, 140, 34);
51
    m_hGameTime = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 65 );
52
    lcd->SetOrigin ( m_hGameTime, 95, 14);
53
    m_hCredits = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 65);
54
    lcd->SetOrigin ( m_hCredits, 95, 24);
55
	m_hInsurance1 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 15 );
56
	lcd->SetOrigin ( m_hInsurance1, 0, 0 );
57
	lcd->SetText ( m_hInsurance1, _T("000") );
58
 
59
 
60
	lcd->AddNewPage ();
61
    lcd->ModifyControlsOnPage(1);
62
 
63
	// second stats page
64
	m_hStatsTitle2 = lcd->AddText ( LG_SCROLLING_TEXT_FAST, LG_MEDIUM, DT_CENTER, 150 );
65
    lcd->SetOrigin ( m_hStatsTitle2, 2, 2 );
66
	for ( i = 0; i < MAXSHIPCLASS; i++ )
67
	{
68
		int x = (40 * (i % 4));
69
		int y = 14 + (10 * (i / 4));
70
	    HANDLE shipsText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 20);
71
	    lcd->SetOrigin ( shipsText, x, y);
72
		lcd->SetText ( shipsText, GetShipClassName(i) );
73
	}
74
 
75
	// class stats varibless
76
	for ( i = 0; i < MAXSHIPCLASS; i++ )
77
	{
78
		int x = 16 + (40 * (i % 4));
79
		int y = 14 + (10 * (i / 4));
80
		m_hClasses[i] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
81
		lcd->SetOrigin ( m_hClasses[i], x, y);
82
	}
83
 
84
	/*
85
	m_hClasses[1] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
86
    lcd->SetOrigin ( m_hClasses[1], 55, 24);
87
	m_hClasses[2] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
88
    lcd->SetOrigin ( m_hClasses[2], 55, 34);
89
	m_hClasses[3] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
90
    lcd->SetOrigin ( m_hClasses[3], 100, 14);
91
	m_hClasses[4] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
92
    lcd->SetOrigin ( m_hClasses[4], 100, 24);
93
	m_hClasses[5] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
94
    lcd->SetOrigin ( m_hClasses[5], 100, 34);
95
	m_hClasses[6] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
96
    lcd->SetOrigin ( m_hClasses[6], 140, 14);
97
	m_hClasses[7] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
98
    lcd->SetOrigin ( m_hClasses[7], 140, 24);
99
	m_hClasses[8] = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
100
    lcd->SetOrigin ( m_hClasses[8], 140, 34);
101
	m_hInsurance2 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 15 );*/
102
	lcd->SetOrigin ( m_hInsurance2, 0, 0 );
103
	lcd->SetText ( m_hInsurance2, _T("000") );
104
 
105
	// first combat stats, your stats
106
	m_pLcd->AddNewPage ();
107
    m_pLcd->ModifyControlsOnPage(2);
108
    m_hCombatTitle1 = lcd->AddText(LG_SCROLLING_TEXT_FAST, LG_MEDIUM, DT_CENTER, 136);
109
    lcd->SetOrigin ( m_hCombatTitle1, 12, 2);
110
    HANDLE hullText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 42);
111
    lcd->SetOrigin ( hullText, 5, 14);
112
    lcd->SetText ( hullText, _T("Hull") );
113
    HANDLE shieldText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 42);
114
    lcd->SetOrigin ( shieldText, 5, 24);
115
    lcd->SetText ( shieldText, _T("Shields") );
116
    HANDLE weapText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 42);
117
    lcd->SetOrigin ( weapText, 5, 34);
118
    lcd->SetText ( weapText, _T("Weapons") );
119
    m_hMissiles = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 10);
120
    lcd->SetOrigin ( m_hMissiles, 0, 0);
121
    lcd->SetText ( m_hMissiles, _T("") );
122
    m_hEnemies = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 10);
123
    lcd->SetOrigin ( m_hEnemies, 150, 0);
124
    lcd->SetText ( m_hEnemies, _T("") );
125
 
126
    m_hMyHull = lcd->AddProgressBar(LG_FILLED);
127
    lcd->SetProgressBarSize ( m_hMyHull, 100, 8 );
128
    lcd->SetOrigin ( m_hMyHull, 55, 14 );
129
    lcd->SetProgressBarPosition ( m_hMyHull, 0 );
130
    m_hMyShield = lcd->AddProgressBar ( LG_FILLED );
131
    lcd->SetProgressBarSize ( m_hMyShield, 100, 8 );
132
    lcd->SetOrigin ( m_hMyShield, 55, 24);
133
    lcd->SetProgressBarPosition ( m_hMyShield, 0 );
134
    m_hMyWeapon = lcd->AddProgressBar(LG_FILLED);
135
    lcd->SetProgressBarSize ( m_hMyWeapon, 100, 8 );
136
    lcd->SetOrigin ( m_hMyWeapon, 55, 34 );
137
    lcd->SetProgressBarPosition ( m_hMyWeapon, 0 );
138
 
139
	// second page of combat stats
140
	lcd->AddNewPage ();
141
    lcd->ModifyControlsOnPage(3);
142
	m_hCombatTitle2 = lcd->AddText ( LG_SCROLLING_TEXT_FAST, LG_MEDIUM, DT_CENTER, 136 );
143
    lcd->SetOrigin ( m_hCombatTitle2, 12, 2 );
144
    m_hSpeedText1 = m_pLcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
145
    lcd->SetOrigin ( m_hSpeedText1, 5, 14);
146
    lcd->SetText ( m_hSpeedText1, _T("Speed:") );
147
    m_hSpeedText2 = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
148
    lcd->SetOrigin ( m_hSpeedText2, 80, 14);
149
    lcd->SetText ( m_hSpeedText2, _T("Dist:") );
150
    m_hMySpeed = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 40 );
151
    lcd->SetOrigin ( m_hMySpeed, 35, 14 );
152
    m_hTargetSpeed = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 40 );
153
    lcd->SetOrigin ( m_hTargetSpeed, 120, 14);
154
    HANDLE hullText2 = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 42);
155
    lcd->SetOrigin ( hullText2, 5, 24);
156
    lcd->SetText ( hullText2, _T("Hull") );
157
    HANDLE shieldText2 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 42 );
158
    lcd->SetOrigin ( shieldText2, 5, 34);
159
    lcd->SetText ( shieldText2, _T("Shields") );
160
    m_hTargetHull = lcd->AddProgressBar(LG_FILLED);
161
    lcd->SetProgressBarSize ( m_hTargetHull, 100, 8 );
162
    lcd->SetOrigin ( m_hTargetHull, 55, 24 );
163
    lcd->SetProgressBarPosition ( m_hTargetHull, 0 );
164
    m_hTargetShield = lcd->AddProgressBar(LG_FILLED);
165
    lcd->SetProgressBarSize ( m_hTargetShield, 100, 8 );
166
    lcd->SetOrigin ( m_hTargetShield, 55, 34 );
167
    lcd->SetProgressBarPosition ( m_hTargetShield, 0 );
168
    m_hMissiles2 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 10);
169
    lcd->SetOrigin ( m_hMissiles2, 0, 0);
170
    lcd->SetText ( m_hMissiles2, _T("") );
171
    m_hEnemies2 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 10);
172
    lcd->SetOrigin ( m_hEnemies2, 150, 0);
173
    lcd->SetText ( m_hEnemies2, _T("") );
174
 
175
	// rep pages
176
	lcd->AddNewPage ();
177
	lcd->ModifyControlsOnPage(4);
178
	m_hRepText[0] = lcd->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160);
179
    lcd->SetOrigin ( m_hRepText[0], 0, 2);
180
    m_hRepText[1] = lcd->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160);
181
    lcd->SetOrigin ( m_hRepText[1], 0, 13);
182
    m_hRepText[2] = lcd->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160);
183
    lcd->SetOrigin ( m_hRepText[2], 0, 24);
184
    m_hRepText[3] = lcd->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160);
185
    lcd->SetOrigin ( m_hRepText[3], 0, 35);
186
 
187
	lcd->AddNewPage ();
188
	lcd->ModifyControlsOnPage(5);
189
	for ( int i = 0; i < 4; i++ )
190
	{
191
		m_hCustomText[i] = lcd->AddText ( LG_SCROLLING_TEXT_FAST, LG_SMALL, DT_CENTER, 160 );
192
		lcd->SetOrigin ( m_hCustomText[i], 0, (i + 1) * 9 );
193
		lcd->SetText ( m_hCustomText[i], "Test" );
194
	}
195
	HANDLE customPage = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 80 );
196
	lcd->SetOrigin ( customPage, 0, 0);
197
	lcd->SetText ( customPage, _T("Custom Stats") );
198
	m_hCustomPage = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 80 );
199
	lcd->SetOrigin ( m_hCustomPage, 80, 0 );
200
 
201
	lcd->AddNewPage ();
202
	lcd->ModifyControlsOnPage(6);
203
	HANDLE combatTitle = lcd->AddText ( LG_SCROLLING_TEXT_FAST, LG_MEDIUM, DT_CENTER, 126 );
204
    lcd->SetOrigin ( combatTitle, 12, 0 );
205
	lcd->SetText ( combatTitle, _T("Combat Computer") );
206
    m_hMissiles3 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 10);
207
    lcd->SetOrigin ( m_hMissiles3, 0, 0);
208
    lcd->SetText ( m_hMissiles3, _T("") );
209
    m_hEnemies3 = lcd->AddText ( LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 20);
210
    lcd->SetOrigin ( m_hEnemies3, 140, 0);
211
    lcd->SetText ( m_hEnemies3, _T("") );
212
 
213
 
214
	// no game screen
215
	m_iTitlePage = lcd->AddNewPage () - 1;
216
    lcd->ModifyControlsOnPage ( m_iTitlePage );
217
    HANDLE icon3 = lcd->AddIcon(hIcon, 32, 32);
218
    lcd->SetOrigin(icon3, 1, 6);
219
	m_hMainText = lcd->AddText(LG_SCROLLING_TEXT_FAST, LG_BIG, DT_LEFT, 155);
220
    lcd->SetOrigin ( m_hMainText, 36, 9);
221
    lcd->SetText ( m_hMainText, _T("Reunion") );
222
	HANDLE pilotText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 155);
223
    lcd->SetOrigin ( pilotText, 37, 25);
224
    lcd->SetText ( pilotText, _T("No Game Found") );
225
 
226
	// no game screen
227
	m_iLoadingPage = lcd->AddNewPage () - 1;
228
    lcd->ModifyControlsOnPage ( m_iLoadingPage );
229
    HANDLE icon4 = lcd->AddIcon(hIcon, 32, 32);
230
    lcd->SetOrigin ( icon4, 1, 3 );
231
	m_hMainText2 = lcd->AddText(LG_SCROLLING_TEXT_FAST, LG_BIG, DT_LEFT, 155);
232
    lcd->SetOrigin ( m_hMainText2, 36, 7);
233
    lcd->SetText ( m_hMainText2, _T("Reunion") );
234
	HANDLE loadingText = lcd->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 155);
235
    lcd->SetOrigin ( loadingText, 37, 22);
236
    lcd->SetText ( loadingText, _T("Searching for Stats") );
237
    m_hLoadBar = lcd->AddProgressBar ( LG_CURSOR );
238
    lcd->SetProgressBarSize ( m_hLoadBar, 100, 6 );
239
    lcd->SetOrigin ( m_hLoadBar, 30, 34 );
240
    lcd->SetProgressBarPosition ( m_hLoadBar, 50 );
241
 
242
	m_iPage = m_iSplitPage = 0;
243
}
244
 
245
CLCDDisplay::~CLCDDisplay()
246
{
247
	delete m_pLcd;
248
}
249
 
250
void CLCDDisplay::Display ()
251
{
252
	int i;
253
 
254
    // Modifying controls on the 1st page
255
	CyString name = m_pData->GetGameName();
256
	name += ": ";
257
	name += m_pData->GetPilot();
258
 
259
	// first stats page
260
    m_pLcd->ModifyControlsOnPage(0);
261
	m_pLcd->SetText ( m_hStatsTitle1, (LPCSTR)name.c_str() );
262
	m_pLcd->SetText ( m_hShipsNum, (LPCSTR)CyString::Number(m_pData->GetShipsNum()).c_str() );
263
	m_pLcd->SetText ( m_hStationsNum, (LPCSTR)CyString::Number(m_pData->GetStations()).c_str() );
264
	m_pLcd->SetText ( m_hCredits, (LPCSTR)m_pData->GetCredits().c_str() );
265
	m_pLcd->SetText ( m_hGameTime, (LPCSTR)m_pData->GetGameTime().c_str() );
266
	m_pLcd->SetText ( m_hInsurance1, (LPCSTR)CyString::Number(m_pData->GetInsurance()).c_str() );
267
 
268
	// second stats pages (each ship classes)
269
    m_pLcd->ModifyControlsOnPage(1);
270
	m_pLcd->SetText ( m_hStatsTitle2, (LPCSTR)name.c_str() );
271
	for ( i = 0; i < MAXSHIPCLASS; i++ )
272
		m_pLcd->SetText ( m_hClasses[i], (LPCSTR)CyString::Number(m_pData->GetShipClass(i)).c_str() );
273
	m_pLcd->SetText ( m_hInsurance2, (LPCSTR)CyString::Number(m_pData->GetInsurance()).c_str() );
274
 
275
	// first combat page, your current ship)
276
    m_pLcd->ModifyControlsOnPage(2);
277
	m_pLcd->SetText ( m_hCombatTitle1, (LPCSTR)m_pData->GetMyShip().c_str() );
278
	m_pLcd->SetProgressBarPosition ( m_hMyHull, (float)m_pData->GetHull());
279
	m_pLcd->SetProgressBarPosition ( m_hMyShield, (float)m_pData->GetShields());
280
	m_pLcd->SetProgressBarPosition ( m_hMyWeapon, (float)m_pData->GetWeaponEnergy ());
281
	m_pLcd->SetText ( m_hMissiles, (LPCSTR)CyString::Number(m_pData->GetMissiles()).c_str() );
282
	m_pLcd->SetText ( m_hEnemies, (LPCSTR)CyString::Number(m_pData->GetEnemies()).c_str() );
283
 
284
 
285
	// second combat page, Your current target
286
    m_pLcd->ModifyControlsOnPage(3);
287
	CyString target = m_pData->GetMyTarget();
288
	if ( !m_pData->GetTargetRelation().Empty() )
289
	{
290
		target += " / ";
291
		target += m_pData->GetTargetRelation();
292
	}
293
	m_pLcd->SetText ( m_hCombatTitle2, (LPCSTR)target.c_str() );
294
	m_pLcd->SetText ( m_hSpeedText1, _T("Speed:") );
295
	m_pLcd->SetText ( m_hSpeedText2, _T("Distance:") );
296
	CyString speed = CyString::Number(m_pData->GetTargetSpeed()) + " (" + CyString::Number(m_pData->GetMySpeed()) + ")";
297
	m_pLcd->SetText ( m_hMySpeed, (LPCSTR)speed.c_str() );
298
	m_pLcd->SetText ( m_hTargetSpeed, (LPCSTR)m_pData->GetTargetDistanceStr().c_str() );
299
	m_pLcd->SetProgressBarPosition ( m_hTargetHull, (float)m_pData->GetTargetHull() );
300
	m_pLcd->SetProgressBarPosition ( m_hTargetShield, (float)m_pData->GetTargetShield() );
301
	m_pLcd->SetText ( m_hMissiles2, (LPCSTR)CyString::Number(m_pData->GetMissiles()).c_str() );
302
	m_pLcd->SetText ( m_hEnemies2, (LPCSTR)CyString::Number(m_pData->GetEnemies()).c_str() );
303
 
304
	// rep pagess
305
    m_pLcd->ModifyControlsOnPage(4);
306
 
307
	int done = 0;
308
	for ( i = 0; i < 4; i++ )
309
		m_pLcd->SetText ( m_hRepText[i], _T("") );
310
	for ( i = 0; i < MAXRACEREP; i++ )
311
	{
312
		SRaceRep rep = m_pData->GetRaceRep(i);
313
		if ( rep.sRace.Empty() ) continue;
314
 
315
		int pos = done - (m_iSplitPage * 4);
316
		++done;
317
		if ( pos >= 4 )
318
			break;
319
		else if ( pos < 0 )
320
			continue;
321
		CyString sRep = rep.sRank + " (" + (long)rep.iRepPct + "%)";
322
		if ( rep.bIncludeRace )
323
			sRep = rep.sRace + ": " + sRep;
324
		m_pLcd->SetText ( m_hRepText[pos], (LPCSTR)sRep.c_str() );
325
	}
326
 
327
	// wait while data is locked
328
	while ( m_pData->IsLocked() ) Sleep(1);
329
 
330
    m_pLcd->ModifyControlsOnPage(5);
331
	CyStringList *list = m_pData->GetCustomList();
332
	int pages = ((list->Count() - 1) / 4);
333
	CyString page("(Page: ");
334
	page += (long)(pages + 1);
335
	page += "/";
336
	page += (long)(m_iSplitPage + 1);
337
	page += ")";
338
	m_pLcd->SetText ( m_hCustomPage, (LPCSTR)page.c_str() );
339
 
340
	SStringList *pCustom = list->GetAt ( m_iSplitPage * 4 );
341
 
342
	for ( i = 0; i < 4; i++ )
343
	{
344
		if ( !pCustom )
345
			m_pLcd->SetText ( m_hCustomText[i], _T("") );
346
		else
347
		{
348
			m_pLcd->SetText ( m_hCustomText[i], pCustom->data.c_str() );
349
			pCustom = pCustom->next;
350
		}
351
	}
352
 
353
    m_pLcd->ModifyControlsOnPage(6);
354
	m_pLcd->SetText ( m_hMissiles2, (LPCSTR)CyString::Number(m_pData->GetMissiles()).c_str() );
355
	m_pLcd->SetText ( m_hEnemies2, (LPCSTR)CyString::Number(m_pData->GetEnemies2()).c_str() );
356
 
357
    m_pLcd->ModifyControlsOnPage(m_iTitlePage);
358
	m_pLcd->SetText(m_hMainText, (LPCSTR)m_pData->GetGameName().GetToken(" ", 2).c_str());
359
    m_pLcd->ModifyControlsOnPage(m_iLoadingPage);
360
	m_pLcd->SetText(m_hMainText2, (LPCSTR)m_pData->GetGameName().GetToken(" ", 2).c_str());
361
 
362
}
363
 
364
int CLCDDisplay::FindMaxRacePages()
365
{
366
	int count = 0;
367
	for ( int i = 0; i < MAXRACEREP; i++ )
368
	{
369
		SRaceRep rep = m_pData->GetRaceRep(i);
370
		if ( rep.sRace.Empty() ) continue;
371
 
372
		++count;
373
	}
374
 
375
	int pages = count / 4;
376
	if ( count % 4 ) pages++;
377
	return pages;
378
}
379
 
380
 
381
void CLCDDisplay::CheckButtons ()
382
{
383
	if ( m_pLcd->ButtonTriggered(LG_BUTTON_1))
384
	{
385
		if ( m_iPage == 0 )
386
			m_iPage = 1;
387
		else
388
			m_iPage = 0;
389
	}
390
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_2))
391
	{
392
		if ( m_iPage == 2 )
393
			m_iPage = 3;
394
		else if ( m_iPage == 3 )
395
			m_iPage = 6;
396
		else
397
			m_iPage = 2;
398
	}
399
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_3))
400
	{
401
		if ( m_iPage == 4 )
402
		{
403
			m_iSplitPage++;
404
			if ( m_iSplitPage >= FindMaxRacePages() )
405
				m_iSplitPage = 0;
406
		}
407
		else 
408
			m_iSplitPage = 0;
409
		m_iPage = 4;
410
	}
411
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_4))
412
	{
413
		CyStringList *list = m_pData->GetCustomList();
414
		if ( m_iPage == 5 )
415
		{
416
			m_iSplitPage++;
417
			if ( m_iSplitPage > ((list->Count() - 1) / 4) )
418
				m_iSplitPage = 0;
419
		}
420
		else
421
			m_iSplitPage = 0;
422
 
423
		m_iPage = 5;
424
	}
425
}
426
 
427
void CLCDDisplay::UpdateDisplay(bool updated)
428
{
429
	if ( !m_bStarted )
430
		m_pLcd->SetAsForeground(TRUE);
431
	m_bStarted = true;
432
 
433
	if ( m_bWaiting )
434
		m_pLcd->ShowPage( m_iTitlePage );
435
	else if ( m_bLoading )
436
		m_pLcd->ShowPage( m_iLoadingPage );
437
	else
438
		m_pLcd->ShowPage( m_iPage );
439
 
440
	if ( m_pCustomScreen )
441
	{
442
		if ( !m_pCustomScreen->Display () )
443
		{
444
			delete m_pCustomScreen;
445
			m_pCustomScreen = NULL;
446
		}
447
		m_pLcd->Update();
448
		return;
449
	}
450
 
451
	if ( updated )
452
	{
453
		m_iUpdateCount = 60;
454
		m_bLoading = false;
455
		m_bWaiting = false;
456
		m_pLcd->ModifyControlsOnPage ( m_iLoadingPage );
457
		m_pLcd->SetProgressBarPosition ( m_hLoadBar, 100 );
458
 
459
		if ( m_pData->GetCustomFiles()->Count() )
460
		{
461
			CyString c = m_pData->GetCustomFiles()->First();
462
			CyString v = m_pData->GetCustomFiles()->Head()->data;
463
			m_pData->GetCustomFiles()->PopFront();
464
			m_pCustomScreen = new CLcdCustomScreen ( m_pLcd );
465
			m_pCustomScreen->LoadScript ( m_pData->GetGameDirectory(), m_pData->GetProgDir(), c.c_str() );
466
			int max;
467
			CyString *tokens = v.SplitToken("|", &max);
468
			for ( int i = 0; i < max; i++ )
469
				m_pCustomScreen->SetVarible ( tokens[i], i );
470
		}
471
	}
472
	else
473
	{
474
		m_pLcd->ModifyControlsOnPage ( m_iLoadingPage );
475
		m_pLcd->SetProgressBarPosition ( m_hLoadBar, (float)(200 - m_iUpdateCount) / 2 );
476
		--m_iUpdateCount;
477
 
478
		if ( m_iUpdateCount <= 0 )
479
		{
480
			if ( !m_bWaiting && !m_bLoading )
481
			{
482
				m_bLoading = true;
483
				m_iUpdateCount = 200;
484
			}
485
			else if ( m_bLoading )
486
			{
487
				m_bLoading = false;
488
				m_bWaiting = true;
489
			}
490
			m_pData->Reset();
491
		}
492
	}
493
 
494
	// Display the stats
495
	Display ();
496
 
497
	// check buttons are pressed
498
	CheckButtons ();
499
 
500
	// Update the LCD display
501
    m_pLcd->Update();
502
}
503
 
504
LPCSTR CLCDDisplay::GetShipClassName(int i)
505
{
506
	switch (i)
507
	{
508
		case CLASS_M1:
509
			return _T("M1:");
510
		case CLASS_M2:
511
			return _T("M2:");
512
		case CLASS_M3:
513
			return _T("M3:");
514
		case CLASS_M4:
515
			return _T("M4:");
516
		case CLASS_M5:
517
			return _T("M5:");
518
		case CLASS_M6:
519
			return _T("M6:");
520
		case CLASS_M7:
521
			return _T("M7:");
522
		case CLASS_M8:
523
			return _T("M8:");
524
		case CLASS_TS:
525
			return _T("TS:");
526
		case CLASS_TM:
527
			return _T("TM:");
528
		case CLASS_TP:
529
			return _T("TP:");
530
		case CLASS_TL:
531
			return _T("TL:");
532
	}
533
 
534
	return "";
535
}