Subversion Repositories spk

Rev

Rev 1 | Go to most recent revision | Details | Compare with Previous | 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 );
242 cycrow 193
		lcd->SetText ( m_hCustomText[i], L"Test" );
1 cycrow 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
242 cycrow 255
	Utils::WString name = m_pData->GetGameName();
256
	name += L": ";
257
	name += m_pData->pilot();
1 cycrow 258
 
259
	// first stats page
260
    m_pLcd->ModifyControlsOnPage(0);
242 cycrow 261
	m_pLcd->SetText ( m_hStatsTitle1, name.c_str() );
262
	m_pLcd->SetText ( m_hShipsNum, Utils::WString::Number(m_pData->GetShipsNum()).c_str() );
263
	m_pLcd->SetText ( m_hStationsNum, Utils::WString::Number(m_pData->GetStations()).c_str() );
264
	m_pLcd->SetText ( m_hCredits, m_pData->credits().c_str() );
265
	m_pLcd->SetText ( m_hGameTime, m_pData->gameTime().c_str() );
266
	m_pLcd->SetText ( m_hInsurance1, Utils::WString::Number(m_pData->GetInsurance()).c_str() );
1 cycrow 267
 
268
	// second stats pages (each ship classes)
269
    m_pLcd->ModifyControlsOnPage(1);
242 cycrow 270
	m_pLcd->SetText(m_hStatsTitle2, name);
1 cycrow 271
	for ( i = 0; i < MAXSHIPCLASS; i++ )
242 cycrow 272
		m_pLcd->SetText ( m_hClasses[i], Utils::WString::Number(m_pData->GetShipClass(i)).c_str() );
273
	m_pLcd->SetText ( m_hInsurance2, Utils::WString::Number(m_pData->GetInsurance()).c_str() );
1 cycrow 274
 
275
	// first combat page, your current ship)
276
    m_pLcd->ModifyControlsOnPage(2);
242 cycrow 277
	m_pLcd->SetText ( m_hCombatTitle1, m_pData->myShip() );
1 cycrow 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 ());
242 cycrow 281
	m_pLcd->SetText ( m_hMissiles, Utils::WString::Number(m_pData->GetMissiles()).c_str() );
282
	m_pLcd->SetText ( m_hEnemies, Utils::WString::Number(m_pData->GetEnemies()).c_str() );
1 cycrow 283
 
284
 
285
	// second combat page, Your current target
286
    m_pLcd->ModifyControlsOnPage(3);
242 cycrow 287
	Utils::WString target = m_pData->myTarget();
288
	if ( !m_pData->targetRelation().empty() )
1 cycrow 289
	{
242 cycrow 290
		target += L" / ";
291
		target += m_pData->targetRelation();
1 cycrow 292
	}
242 cycrow 293
	m_pLcd->SetText ( m_hCombatTitle2, target);
1 cycrow 294
	m_pLcd->SetText ( m_hSpeedText1, _T("Speed:") );
295
	m_pLcd->SetText ( m_hSpeedText2, _T("Distance:") );
242 cycrow 296
	Utils::WString speed = Utils::WString::Number(m_pData->GetTargetSpeed()) + L" (" + Utils::WString::Number(m_pData->GetMySpeed()) + L")";
297
	m_pLcd->SetText ( m_hMySpeed, speed);
298
	m_pLcd->SetText ( m_hTargetSpeed, m_pData->GetTargetDistanceStr());
1 cycrow 299
	m_pLcd->SetProgressBarPosition ( m_hTargetHull, (float)m_pData->GetTargetHull() );
300
	m_pLcd->SetProgressBarPosition ( m_hTargetShield, (float)m_pData->GetTargetShield() );
242 cycrow 301
	m_pLcd->SetText ( m_hMissiles2, Utils::WString::Number(m_pData->GetMissiles()).c_str() );
302
	m_pLcd->SetText ( m_hEnemies2, Utils::WString::Number(m_pData->GetEnemies()).c_str() );
1 cycrow 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);
242 cycrow 313
		if ( rep.sRace.empty() ) continue;
1 cycrow 314
 
315
		int pos = done - (m_iSplitPage * 4);
316
		++done;
317
		if ( pos >= 4 )
318
			break;
319
		else if ( pos < 0 )
320
			continue;
242 cycrow 321
		Utils::WString sRep = rep.sRank + L" (" + (long)rep.iRepPct + L"%)";
1 cycrow 322
		if ( rep.bIncludeRace )
323
			sRep = rep.sRace + ": " + sRep;
242 cycrow 324
		m_pLcd->SetText ( m_hRepText[pos], sRep);
1 cycrow 325
	}
326
 
327
	// wait while data is locked
328
	while ( m_pData->IsLocked() ) Sleep(1);
329
 
330
    m_pLcd->ModifyControlsOnPage(5);
242 cycrow 331
	const Utils::WStringList &list = m_pData->customList();
332
	int pages = ((list.size() - 1) / 4);
333
	Utils::WString page(L"(Page: ");
1 cycrow 334
	page += (long)(pages + 1);
242 cycrow 335
	page += L"/";
1 cycrow 336
	page += (long)(m_iSplitPage + 1);
242 cycrow 337
	page += L")";
338
	m_pLcd->SetText ( m_hCustomPage, page);
1 cycrow 339
 
242 cycrow 340
	size_t pos = m_iSplitPage * 4;
341
	const Utils::WStringNode* pCustom = list[pos];
1 cycrow 342
 
343
	for ( i = 0; i < 4; i++ )
344
	{
345
		if ( !pCustom )
346
			m_pLcd->SetText ( m_hCustomText[i], _T("") );
347
		else
348
		{
242 cycrow 349
			m_pLcd->SetText ( m_hCustomText[i], pCustom->data);
350
			pCustom = list[++pos];
1 cycrow 351
		}
352
	}
353
 
354
    m_pLcd->ModifyControlsOnPage(6);
242 cycrow 355
	m_pLcd->SetText ( m_hMissiles2, Utils::WString::Number(m_pData->GetMissiles()));
356
	m_pLcd->SetText ( m_hEnemies2, Utils::WString::Number(m_pData->GetEnemies2()));
1 cycrow 357
 
358
    m_pLcd->ModifyControlsOnPage(m_iTitlePage);
242 cycrow 359
	m_pLcd->SetText(m_hMainText, m_pData->GetGameName().tokens(L" ", 2));
1 cycrow 360
    m_pLcd->ModifyControlsOnPage(m_iLoadingPage);
242 cycrow 361
	m_pLcd->SetText(m_hMainText2, m_pData->GetGameName().tokens(L" ", 2));
1 cycrow 362
 
363
}
364
 
365
int CLCDDisplay::FindMaxRacePages()
366
{
367
	int count = 0;
368
	for ( int i = 0; i < MAXRACEREP; i++ )
369
	{
370
		SRaceRep rep = m_pData->GetRaceRep(i);
242 cycrow 371
		if ( rep.sRace.empty() ) continue;
1 cycrow 372
 
373
		++count;
374
	}
375
 
376
	int pages = count / 4;
377
	if ( count % 4 ) pages++;
378
	return pages;
379
}
380
 
381
 
382
void CLCDDisplay::CheckButtons ()
383
{
384
	if ( m_pLcd->ButtonTriggered(LG_BUTTON_1))
385
	{
386
		if ( m_iPage == 0 )
387
			m_iPage = 1;
388
		else
389
			m_iPage = 0;
390
	}
391
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_2))
392
	{
393
		if ( m_iPage == 2 )
394
			m_iPage = 3;
395
		else if ( m_iPage == 3 )
396
			m_iPage = 6;
397
		else
398
			m_iPage = 2;
399
	}
400
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_3))
401
	{
402
		if ( m_iPage == 4 )
403
		{
404
			m_iSplitPage++;
405
			if ( m_iSplitPage >= FindMaxRacePages() )
406
				m_iSplitPage = 0;
407
		}
408
		else 
409
			m_iSplitPage = 0;
410
		m_iPage = 4;
411
	}
412
    else if ( m_pLcd->ButtonTriggered(LG_BUTTON_4))
413
	{
242 cycrow 414
		const Utils::WStringList &list = m_pData->customList();
1 cycrow 415
		if ( m_iPage == 5 )
416
		{
417
			m_iSplitPage++;
242 cycrow 418
			if ( m_iSplitPage > ((static_cast<int>(list.size()) - 1) / 4) )
1 cycrow 419
				m_iSplitPage = 0;
420
		}
421
		else
422
			m_iSplitPage = 0;
423
 
424
		m_iPage = 5;
425
	}
426
}
427
 
428
void CLCDDisplay::UpdateDisplay(bool updated)
429
{
430
	if ( !m_bStarted )
431
		m_pLcd->SetAsForeground(TRUE);
432
	m_bStarted = true;
433
 
434
	if ( m_bWaiting )
435
		m_pLcd->ShowPage( m_iTitlePage );
436
	else if ( m_bLoading )
437
		m_pLcd->ShowPage( m_iLoadingPage );
438
	else
439
		m_pLcd->ShowPage( m_iPage );
440
 
441
	if ( m_pCustomScreen )
442
	{
443
		if ( !m_pCustomScreen->Display () )
444
		{
445
			delete m_pCustomScreen;
446
			m_pCustomScreen = NULL;
447
		}
448
		m_pLcd->Update();
449
		return;
450
	}
451
 
452
	if ( updated )
453
	{
454
		m_iUpdateCount = 60;
455
		m_bLoading = false;
456
		m_bWaiting = false;
457
		m_pLcd->ModifyControlsOnPage ( m_iLoadingPage );
458
		m_pLcd->SetProgressBarPosition ( m_hLoadBar, 100 );
459
 
242 cycrow 460
		if ( m_pData->customFiles().size())
1 cycrow 461
		{
242 cycrow 462
			Utils::WString c = m_pData->customFiles().front();
463
			Utils::WString v = m_pData->customFiles()[0]->data;
464
			const_cast<Utils::WStringList *>(&m_pData->customFiles())->popFront();
1 cycrow 465
			m_pCustomScreen = new CLcdCustomScreen ( m_pLcd );
242 cycrow 466
			m_pCustomScreen->loadScript ( m_pData->GetGameDirectory(), m_pData->GetProgDir(), c.c_str() );
467
 
468
			std::vector<Utils::WString> tokens;
469
			size_t max = v.tokenise(L"|", tokens);
470
			for (size_t i = 0; i < max; i++ )
471
				m_pCustomScreen->setVarible(tokens[i], i);
1 cycrow 472
		}
473
	}
474
	else
475
	{
476
		m_pLcd->ModifyControlsOnPage ( m_iLoadingPage );
477
		m_pLcd->SetProgressBarPosition ( m_hLoadBar, (float)(200 - m_iUpdateCount) / 2 );
478
		--m_iUpdateCount;
479
 
480
		if ( m_iUpdateCount <= 0 )
481
		{
482
			if ( !m_bWaiting && !m_bLoading )
483
			{
484
				m_bLoading = true;
485
				m_iUpdateCount = 200;
486
			}
487
			else if ( m_bLoading )
488
			{
489
				m_bLoading = false;
490
				m_bWaiting = true;
491
			}
492
			m_pData->Reset();
493
		}
494
	}
495
 
496
	// Display the stats
497
	Display ();
498
 
499
	// check buttons are pressed
500
	CheckButtons ();
501
 
502
	// Update the LCD display
503
    m_pLcd->Update();
504
}
505
 
242 cycrow 506
Utils::WString CLCDDisplay::GetShipClassName(int i)
1 cycrow 507
{
508
	switch (i)
509
	{
510
		case CLASS_M1:
242 cycrow 511
			return L"M1:";
1 cycrow 512
		case CLASS_M2:
242 cycrow 513
			return L"M2:";
1 cycrow 514
		case CLASS_M3:
242 cycrow 515
			return L"M3:";
1 cycrow 516
		case CLASS_M4:
242 cycrow 517
			return L"M4:";
1 cycrow 518
		case CLASS_M5:
242 cycrow 519
			return L"M5:";
1 cycrow 520
		case CLASS_M6:
242 cycrow 521
			return L"M6:";
1 cycrow 522
		case CLASS_M7:
242 cycrow 523
			return L"M7:";
1 cycrow 524
		case CLASS_M8:
242 cycrow 525
			return L"M8:";
1 cycrow 526
		case CLASS_TS:
242 cycrow 527
			return L"TS:";
1 cycrow 528
		case CLASS_TM:
242 cycrow 529
			return L"TM:";
1 cycrow 530
		case CLASS_TP:
242 cycrow 531
			return L"TP:";
1 cycrow 532
		case CLASS_TL:
242 cycrow 533
			return L"TL:";
1 cycrow 534
	}
535
 
536
	return "";
537
}